hustyoung 发表于 2006-11-22 09:01

关于ZOOMfft的问题

如果对一个一3000HZ采样的1024个点的波形用从论坛上下载的zoomfft程序,怎么计算了?希望那位牛人指点一下,最好能给个例子说明一下!

[ 本帖最后由 zhangnan3509 于 2007-7-4 15:04 编辑 ]

hustyoung 发表于 2006-11-22 09:03

附件是从网上下载的zoomfft的matlab程序

%ZoomFFT谱
%x-信号序列
%fs-采样频率
%N-做谱点数
%fe-分析中心频率
%D-细化倍数
%L-平均段数
%M-滤波器半阶数
%f-返回频率向量
%xz-返回幅值谱

function =ZoomFFT(x,fs,N,fe,D,L,M)

k=1:M;                        
w=0.5+0.5*cos(pi*k/M);          %Hanning窗

fl=max(fe-fs/(4*D),-fs/2.2);
fh=min(fe+fs/(4*D),fs/2.2);

yf=D*fl;                     %移频量
df=fs/D/N;
f=fl:df:fl+(N/2-1)*df;
xz=zeros(1,N/2);
wl=2*pi*fl/fs;
wh=2*pi*fh/fs;
hr(1)=(wl-wh)/pi;
hr(2:M+1)=(sin(wl*k)-sin(wh*k))./(pi*k).*w;
hi(1)=0;
hi(2:M+1)=(cos(wl*k)-cos(wh*k))./(pi*k).*w;

k=0:N-1;
w=0.5-0.5*cos(2*pi*k/N);

for i=1:L
    for k=1:N
      kk=(k-1)*D+M+(i-1)*N;
      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
    xzt=(xrz+j*xiz).*exp(-j*2*pi*(0:N-1)*yf/fs);
    xzt=xzt.*w;
    xzt=xzt-sum(xzt)/N;
    xzt=fft(xzt);
    xz=xz+(abs(xzt(1:N/2))/N*2).^2;
end
xz=(xz/L).^0.5;

yangzj 发表于 2006-11-22 09:19

原帖由 hustyoung 于 2006-11-22 09:01 发表
如果对一个一3000HZ采样的1024个点的波形用从论坛上下载的zoomfft程序,怎么计算了?希望那位牛人指点一下,最好能给个例子说明一下!

ZFFT是针对长样数据做的.

fs=10240;
N=1024;
D=40;
M=300;

t=(0:N*D+2*M)/fs;
x=cos(2*pi*2005*t)+cos(2*pi*2006*t);
xf=fft(x,N);
xf=abs(xf(1:N/2))/N*2;
subplot(211);
plot((0:N/2-1)*fs/N,xf);

fe=2005;
L=1;%不做平均
=ZoomFFT(x,fs,N,fe,D,L,M);
subplot(212);
plot(f,xz);

hustyoung 发表于 2006-11-22 15:14

可是我的数据长度只有1024个点啥,而且实际的数据采集中一般也是1024个点的,不可能有10240个点出来的。
如果ZOOMFFT只能针对长数据的话,那不是没有太大的用处???

yangzj 发表于 2006-11-22 19:58

没办法,ZFFT就得长数据,对于密集频谱来说只能这样.

hustyoung 发表于 2006-11-23 10:05

如果是这样的话,那和fft有什么区别?如果我有10240个点的话,我的fft的分辨率也就满足要求了啊!!

yangzj 发表于 2006-11-23 21:51

这样说没错,只有计算量的差别
页: [1]
查看完整版本: 关于ZOOMfft的问题