ZFFT 【转载】

关于ZFFT

         ZFFT的实质是把一个宽带信号通过带通滤波器后变成一个窄带信号,从而可以通过选抽(即重采样)来降低采样频率, 进而可用少数点的FFT来达到高的频率分辨率.  可分辨出滤出的窄带信号的细微频谱结构,可以说ZFFT就像一个可变焦的相机(而CZT则是不可变焦的).

丁康老师基于复解析带通滤波器的复调制细化谱分析方法的基本步骤:
1、构造复解析带通滤波器,
2、带通滤波;
3、选抽;
4、移频(将带通滤波器的下截止频率移到0频);
5、做FFT。
6、频率调整(即把5的结果的0频看成是下截止频率)

其中2,3,4步可合成一步来做,这也是基于复解析带通滤波器的优点。

         FFT必须采长样,如果细化D倍,步骤5中FFT点数为N,滤波器半阶数为M的话,则原始信号点数至少为
(N-1)*D+2*M+1个点。
        当然你说直接做N*D个点的FFT,那频率分辨率确实和ZFFT的是一样的。



带扩展系数的zfft

function [xz fz]=zoomffta(x,fs,N,fe,D,a)
% 带扩展系数a的zoomfft
% x---输入时间序列,注意x的长度不能小于(N-1)*D+2*M;
% fs--x的采样频率
% N---做谱点数;
% D---细化倍数;
% a---扩展系数。a取大于0小于等于1的数,越大M越小,计算量越小

M=4*D/a;                        %滤波器半阶数
k=1:M;                          
w=0.5+0.5*cos(pi*k/M);          %Hanning窗

% 求取带通滤波器上下界;
fl=max(fe-fs/(4*D),-fs/2);
fh=min(fe+fs/(4*D),fs/2);

%求取扩展带通滤波器上下界;
hfl=fl-(fh-fl)*a/2;
hfh=fh+(fh-fl)*a/2;

%构造扩展带通滤波器;
wl=2*pi*hfl/fs;
wh=2*pi*hfh/fs;
hr(1)=(wh-wl)/pi;
hr(2:M+1)=(sin(wh*k)-sin(wl*k))./(pi*k).*w;
hi(1)=0;
hi(2:M+1)=(cos(wl*k)-cos(wh*k))./(pi*k).*w;

%选抽滤波
for k=1:N
    kk=(k-1)*D+M;
    xrz(k)=x(kk+1)*hr(1)+sum(hr(2:M+1).*(x(kk+2:kk+M+1)+x(kk:-1:kk-M+1)));
    xiz(k)=x(kk+1)*hi(1)+sum(hi(2:M+1).*(-x(kk+2:kk+M+1)+x(kk:-1:kk-M+1)));
end

%移频,把fl移到0频
yf=D*fl/fs;                       %移频量
xz=(xrz+j*xiz).*exp(-j*2*pi*(0:N-1)*yf);

xz=fft(xz);
xz=xz(1:N/2)/N;                  %细化复数谱

fz=(0:N/2-1)*fs/N/D+fl;          %细化谱对应的频率de>

转载地址:http://blog.163.com/lxg_1123@126/blog/static/74841406200971434012570/

你可能感兴趣的:(算法,FFT,matlab)