查看单个帖子
旧 2009-03-30, 12:14   #1
sockhui
初级会员
 
注册日期: 2009-03-30
年龄: 46
帖子: 2
声望力: 0
sockhui 正向着好的方向发展
默认 请问在matlab中fft,fft2,fftshift的区别是什么?

matlab中采用fft做傅立叶变换,而要得到其频谱图是不是有一定的要求,下面是我收集到的几个例子:
matlab帮助文件中的核心部分是:

Y = fft(y,512);
Pyy = Y.* conj(Y) / 512;
f = 1000*(0:256)/512;
plot(f,Pyy(1:257))
title('Frequency content of y')
xlabel('frequency (Hz)')

而对于不绘制图片的采用
%求付利叶变换
frequency=1000*(0:512)/1024; % 实际频率点
fftdata=fft(data); %付利叶变换
y=fftdata.*conj(fftdata)/1024
sinfft=fftdata(1:513,2);
cosfft=fftdata(1:513,3);

%求能量最大点
[fz1,f1]=max(abs(sinfft));
[fz2,f2]=max(abs(cosfft));

% 求两信号能量最大点的频率
sin_frequency = frequency(f1); %得到实际频率
cos_frequency = frequency(f2);

% 求两信号能量最大点的相位
phase1=phase(sinfft(f1))*57.3;
phase2=phase(cosfft(f1))*57.3;

fprintf('信号1频率=%fHz\n信号2频率=%fHz\n',sin_frequency,cos_frequency);
fprintf('信号2比信号1幅值衰减=%f db\n',20*log10(fz2/fz1));
fprintf('信号2比信号1相位差=%f度\n',phase1-phase2);
通过这两种方法均可以得到其频率。


请问具体是采用那种方法比较好,请熟悉的人能够解释一下!
sockhui 当前离线   回复时引用此帖