hyl2323 发表于 2007-12-20 19:16

[原创]基于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:17

结果如下:

eight 发表于 2007-12-20 19:18

原帖由 hyl2323 于 2007-12-20 19:16 发表 http://www.chinavib.com/forum/images/common/back.gif
刚学着用matlab的fft函数时,遇到一些问题:变换结果向量对应的频率向量是什么?画频谱图时如何手动规定显示频率范围?等。如是乎自定义了一个自己方便用的myfft函数:
% myfft       my fft program based on ...
这个在信号处理方法板块貌似讨论过,是一样的吗?

hyl2323 发表于 2007-12-21 08:08

回eight,好像讨论过,但或多或少带有点个人色彩,t=.*(1/fs);
这句话有点心得:整周期采样,如果包含整周期的最后一个点t=0:1/fs:T,出来的频谱就有泄漏,幅值与设定不符,这是我第一次用fft遇到的印象最深刻的问题。
页: [1]
查看完整版本: [原创]基于matlab's fft的自定义myfft函数