listensea 发表于 2007-8-15 08:55

请教高手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 编辑 ]

zhlong 发表于 2007-8-15 09:58

回复 #1 listensea 的帖子

tt=zeros(100);
tt=-pi:0.01:pi;
tt=zeros(100);
tt=zeros(629,629);

这么多同样的变量tt,前面的都没用啊。

另外你的信号会不会太短了,只有一个周期,试着把采样频率降低点,总的采样时间增长点。

listensea 发表于 2007-8-15 10:04

不好意思,改程序改乱了,应该是
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

zhlong 发表于 2007-8-15 10:41

回复 #3 listensea 的帖子

楼主信号频率本身就很低啊,正弦信号按频率表示是这样的sin(2*pi*f*t),而楼主信号为sin(t),相当于f=1/(2*pi),所以看上去当然接近零了。

listensea 发表于 2007-8-15 10:43

如果把采样频率降低,信号增长,确实能看到想要的结果,(程序如下)
可是在处理实际数据时,信号序列是不能随便变的啊,怎么样改变采样频率呢,难道用插值?


%%%%%%%%%%%%%%%%%
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)

zhlong 发表于 2007-8-15 10:48

回复 #5 listensea 的帖子

降采样、频谱细化都可以。
实际信号采样频率一般是根据要采集信号的性质决定的,所以一般不会出现你仿真例子中的情况。

listensea 发表于 2007-8-15 10:53

谢谢你啊,仿真的问题已经搞定了。
我的实际采样数据是像正弦波的海浪图像,可是通过fft变换频率都在0位置(可能是太近了,看不出来了)。
但是实际上海浪的频率是挺低的啊,请问这种情况怎么办呢。

zhlong 发表于 2007-8-15 10:58

回复 #7 listensea 的帖子

增加分析点数,然后将频率轴的显示范围设置小点看看。
比如set(gca,'Xlim',)命令。
页: [1]
查看完整版本: 请教高手2维fft问题