请教高手2维fft问题
我想测试一下2维fft的效果,于是先做了一个2维的sin 函数,从0-2pi,然后用fft2变换,结果怎么看不出0频率以外的频率呢,请问哪个地方有问题?谢谢!
程序如下:
程序如下:
%--------------------------------------------------------------
%test two dim fft
clear
close
t=0:0.01:2*pi;
tt=zeros(100);
tt=-pi:0.01:pi;
tt=zeros(100);
tt=zeros(629,629);
for i=1:629,
tt(i,:)=sin(t);
end
figure,mesh(tt) %show the two-dim sine function
ftr=fftshift(fft2(tt));
ftr=abs(ftr);
figure,mesh(ftr) %show the result of fft2 of two-dim sine function
%-------------------------------------------------------------------------------------------
[ 本帖最后由 zhlong 于 2007-8-15 08:57 编辑 ]
回复 #1 listensea 的帖子
tt=zeros(100);tt=-pi:0.01:pi;
tt=zeros(100);
tt=zeros(629,629);
这么多同样的变量tt,前面的都没用啊。
另外你的信号会不会太短了,只有一个周期,试着把采样频率降低点,总的采样时间增长点。 不好意思,改程序改乱了,应该是
t=0:0.01:2*pi;
M=size(t);
tt=zeros(M(2),M(2));
for i=1:M(2),
tt(i,:)=sin(t); %2-d sine function
end
figure,mesh(tt) %show the two-dim sine function
ftr=fftshift(fft2(tt));
ftr=abs(ftr);
figure,mesh(ftr) %show the result of fft2 of two-dim sine function
回复 #3 listensea 的帖子
楼主信号频率本身就很低啊,正弦信号按频率表示是这样的sin(2*pi*f*t),而楼主信号为sin(t),相当于f=1/(2*pi),所以看上去当然接近零了。 如果把采样频率降低,信号增长,确实能看到想要的结果,(程序如下)可是在处理实际数据时,信号序列是不能随便变的啊,怎么样改变采样频率呢,难道用插值?
%%%%%%%%%%%%%%%%%
t=0:0.5:20*pi;
M=size(t);
tt=zeros(M(2),M(2));
for i=1:M(2),
tt(i,:)=sin(t); %2-d sine function
end
figure,mesh(tt) %show the two-dim sine function
ftr=fftshift(fft2(tt));
figure,mesh(ftr)
回复 #5 listensea 的帖子
降采样、频谱细化都可以。实际信号采样频率一般是根据要采集信号的性质决定的,所以一般不会出现你仿真例子中的情况。 谢谢你啊,仿真的问题已经搞定了。
我的实际采样数据是像正弦波的海浪图像,可是通过fft变换频率都在0位置(可能是太近了,看不出来了)。
但是实际上海浪的频率是挺低的啊,请问这种情况怎么办呢。
回复 #7 listensea 的帖子
增加分析点数,然后将频率轴的显示范围设置小点看看。比如set(gca,'Xlim',)命令。
页:
[1]