请问怎么用matlab实现小波变换,我要处理的数据不是图像数据,而是一个很大的二维矩阵中的数据?

请问怎么用matlab实现小波变换,我要处理的数据不是图像数据,而是一个很大的二维矩阵中的数据?,第1张

兄弟,你在这儿可能是得不到答案的,我看你比较真诚,给你说一下。

不知道你matlab这个软件熟不熟,关于算法特别是软件编程的的东西,你只有自己改悄裂去 *** 作领会,才懂。

我这儿有一个我读研时候的程序,你看看,看得懂就看,原始数据用的地震数据(你可以用自己的txt或者dat数据进去试一下),需要加载seismic工具包,用的是二维两核闭参数小波做连续小波变换。二维数据大的话必须用窗口运并做再一点一点的平移窗口,窗口点数必须是2的n次方乘2的n次方,还要处理边界,不是一句两句讲的懂。

网上的程序你也可以下载下来看看,很有帮助。

addpath D:\MATLAB\work\SeisLab\S4M\Geophysics_2.01

addpath D:\MATLAB\work

%--------》初始化《---------------------------------------

clear all

clc

clf

%----------》读取数据《------------

f2=altreadsegy('a3.sgy')

Tr=length(f2(1,:))

T=length(f2(:,1))

f3=f2(:,32)

b=zeros(T,Tr)

%-----------------》拓展f(x,t)的边界《-------------

f1=zeros(T+112,Tr+112)

for i=1:1:T+112

for j=1:1:Tr+112

if i<=T&&j<=Tr

f1(i,j)=f2(i,j)

else

f1(i,j)=0

end

end

end

%-----------------》计算瞬时相位《---------------------

for m=1:(128-16):T

for n=1:(128-16):Tr

for x=1:128

for t=1:128

f(x,t)=f1(m+x-1,n+t-1)

end

end

%-------------》对每一道作Hilbet变换,并取瞬时相位余弦,进行二维小波变换《------------------

F=hilbert(f)

ip=cos(angle(F))

Ph=fft2(ip)

sz=zeros(128,128)

for h=1:40

seta=pi-(pi/3+h*pi/120)

a=0.02

for k=1:128

for j=1:128

x=a*((k-64)*cos(seta)-(j-64)*sin(seta))

t=a*((k-64)*sin(seta)+(j-64)*cos(seta))

g(k,j)=0.25*exp(-0.5*(5*x^2+(t-1)^2))

end

end

mh=Ph.*g

st=ifft2(mh)

sz1=abs(real(st))

for k=1:128

for j=1:128

if sz1(k,j)>=sz(k,j)

sz(k,j)=sz1(k,j)

else

sz(k,j)=sz(k,j)

end

end

end

end

b(m+7:m+119,n+7:n+119)=sz1(8:120,8:120)

end

end

s_cplot(b(8:T-8,8:Tr-8))

shading interp

f=fopen('ay.txt','w')

fwrite(f,f3,'float32')

fclose(f)

基本解答如下:

(1-1):

function [b,y] = by(m,n)

b=lcm(m,n)%最小中核公倍数

y=gcd(m,n)%最大公约数

end

(1-2):

function t=sushu(n)

m=floor(sqrt(n))

for i=2:m

if mod(n,i)==0

t=0

break

else

t=1

end

end

end

(2):可以一次算出每一项,发现他们都是同一个值,这个值的求法:SUM=sum(1:n^2)/n%n阶魔幻阵特有的和

function [A,H,L,DJ,SUM]=mag(n)

A=magic(n)%产生一个n阶魔幻阵

H=sum(A)%每行的和

L=sum(A)%每列的和

DJ=sum(diag(A))%对角线和

SUM=sum(1:n^2)/n%n阶魔幻阵特有的和

end

(3):这题我给出“该数各位数字之和为游告奇数”的求法,结合上面有判断素数的代码自己可以求出

该数各位数字之和为奇数:

function funct

for i=2:999

%l=floor(log10(i))+1%提卖磨掘取位数

n1=floor(i/100)%取出百位数字n1

n2=mod(floor(i/10),10)%取出十位数字n2

n3=mod(i,10) %取出个位数字n3

nsum=n1+n2+n3

if rem(nsum,2)~=0%判断是否为奇数

disp (i)

end

end

end

自己可以调试看看,祝你成功!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12298289.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存