在http://www.chinavib.com/forum/vi ... 23569&highlight=czt上我曾提供了zfft_m的函数,yangzj 指出:“这个程序的采用这样的滤波有问题哦,使整个程序都没有意义了.既然都已经做了 nf点的FFT了,那直接用这个结果的频率分辨率已经很低了,也就没必要后面的细化了. ”他批评得对。我把原函数作了改进,用了decimate函数既滤波又下采样,现提供该ZFFT函数共享。该函数文件名为exzfft_m: function y=exzfft_m(x,fi,fs,nfft,np) % x 被测信号,被测信号长度要>=nfft*np % fi 细化的最低频率 % fs 采样频率 % nfft 作细化FFT长 % np 放大倍数 % y 细化FFT输出 nt=length(x); %计算读入数据长度 fa=fi+0.5 * fs/np; %最大细化截止频率 nf= 2^nextpow2(nt); %取大于nt且最接近nt的整数次方为FFT长度 na=round(0.5 * nf/np+1); %确定细化带宽的数据长度 % 频移 n=0: nt-1; %建一个递增向量 b=n*pi* (fi+fa)/fs; %乘单位旋转因子进行频移 y=x.*exp(-i*b); % 滤波和下采样 c=decimate(y,np); % FFT y=fft(c, nfft) * 2/nfft; 以下又给出测试程序,计算结果如下: [ 本帖最后由 zhangnan3509 于 2007-7-4 15:32 编辑 ] [attach]17885[/attach] [attach]17886[/attach] |
GMT+8, 2024-11-24 18:28 , Processed in 0.048077 second(s), 15 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.