[原创]基于matlab's fft的自定义myfft函数
刚学着用matlab的fft函数时,遇到一些问题:变换结果向量对应的频率向量是什么?画频谱图时如何手动规定显示频率范围?等。如是乎自定义了一个自己方便用的myfft函数:% myfft my fft program based on matlab's fft
% =myfft(fs,x,fmax,p)
% inputs: fs:sampling frequency
% x:analysed signal(vector)
% fmax:maximum frequency for display
% p:plot or not
% outputs: X:fft result(vector)
% f:frequencies of X's elements(vector)
function =myfft(fs,x,fmax,p)
if nargin==2
fmax=fs/2;
p='noplot';
end
if nargin==3
p='noplot';
end
X=[];
f=[];
n=length(x);
t=.*(1/fs);
X=2*fft(x)/n;
X=X(1:ceil(fmax*n/fs));
f=linspace(0,fmax,ceil(fmax*n/fs));
if strcmp(p,'plot')
subplot(2,1,1);
plot(t,x,'k');
set(gca,'Xlim',);
title('Signal');
xlabel('t(s)');
ylabel('amp');
subplot(2,1,2);
plot(f,abs(X),'k');
set(gca,'Xlim',);
title('Spectrum');
xlabel('f(Hz)');
ylabel('amp');
end
调试程序如下:
fs=100;
t=0:1/fs:5;
x=5*sin(2*pi*10*t+pi/3);
figure(1);
=myfft(fs,x,fs/2,'plot');
[ 本帖最后由 eight 于 2007-12-20 19:19 编辑 ] 结果如下: 原帖由 hyl2323 于 2007-12-20 19:16 发表 http://www.chinavib.com/forum/images/common/back.gif
刚学着用matlab的fft函数时,遇到一些问题:变换结果向量对应的频率向量是什么?画频谱图时如何手动规定显示频率范围?等。如是乎自定义了一个自己方便用的myfft函数:
% myfft my fft program based on ...
这个在信号处理方法板块貌似讨论过,是一样的吗? 回eight,好像讨论过,但或多或少带有点个人色彩,t=.*(1/fs);
这句话有点心得:整周期采样,如果包含整周期的最后一个点t=0:1/fs:T,出来的频谱就有泄漏,幅值与设定不符,这是我第一次用fft遇到的印象最深刻的问题。
页:
[1]