频谱细化之ZOOMFFT算法


一、 算法简介

复调制 Zoom-FFT[64]的核心思想是对有限长连续的中频信号进行 FFT 变换得 到粗略的信号序列感兴趣区间,然后对粗略的信号序列执行第二次 FFT 分析, 进而得到精确的频谱。
若已知离散的中频信号序列 x(m),采样点数为 M,采样频率为 fs,放大倍数为 D,并做 M 点 FFT 变换,得到输出序列 x(k)。
算法的执行步骤如下:
(1)频移(复调制)
复调制是将感兴趣的频谱的起始点移动到零频点,确保感兴趣信号扩展到频 谱的显示范围内。若已知频谱的起止频率为 f1~f2,则信号的中频频率 f0可表示为:
在这里插入图片描述
在这里插入图片描述
式中, fs = M *f ,f 为谱线间隔, f0 / f 表示 f0的中心移位,即整个频谱中心 频率 f0所对应的频谱的序列。可以得知,复调制将频率分量 f0平移到 x1(m)的零频处。而为了将 X(k)零点附近的频谱细化,可以把频率降到 fs / D 重新抽样,D 是细化倍数。
(2)数字低通滤波
低通滤波可以保证频谱变换后的频率不会因频谱混叠而受到干扰,若选择的 细化倍数为 D,那么数字低通滤波器的截止频率要满足 fc  fs / 2D 。
(3)重采样
降低采样频率至 fs/D,然后重采样可以提高频率分辨率。根据采样定理,当采 样点保持 N 不变时,若采样频率降低至原来的 1/D,相当于采样窗口时间增长 D 倍,这时候分辨率变为原来的 1/D。
(4)复数 FFT
重采样后,信号的实部和虚部被分开,所以必须对信号做 N 点复 FFT,可以 得到 N 条谱线,便得到了细化的频谱。如果细化倍数为 D,重采样频率将下降 为原来的 1/ D,采样时间也增大到原来的 D 倍。需要注意的是,采样时间的增 大仅在第一次采样时增加了采样点数,而在后续重采样时,仍为 M 个采样点, 并没有增加之后的 FFT 运算时间。

二、算法仿真

clear;
close all;
clc;
fs=1024;   %采样频率
N=1024;    %傅里叶变换点数
D=50;      %细化倍数
M=200;     %滤波器阶数
t=(0:N*D+2*M)/fs;    %时间轴

% x = 1.5 * cos(2 * pi * 98 * t);

x = 1.5 * cos(2 * pi * 98 * t) + 2 * cos(2 * pi * 99 * t) + ...
3 * cos(2 * pi * 100. * t) + 3.5 * cos(2 * pi * 101 *t);


xf=fft(x,N);     %傅里叶变换
xf=abs(xf(1:N/2))/N*2;

fe=99.5;     %中心频率

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;

p=0:N-1;
w=0.5-0.5*cos(2*pi*p/N);
xrz=zeros(1,N/2);
xiz=zeros(1,N/2);
% L=10;   %循环次数
% for i=1:L
    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
    xzt=(xrz+1j*xiz).*exp(-1j*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;

figure();
subplot(211);
plot((0:N/2-1)*fs/N, 2 * abs(xf(1:(N/2))) / N, 'b', 'LineWidth', 3);
grid on;
title('FFT和ZoomFFT仿真对比','FontSize',30);
ax1 = gca;  % 获取当前子图的坐标轴对象
ax1.FontSize = 25;  % 设置坐标轴上文字的字体大小
xlabel('Frequency (Hz)','FontSize',30);
ylabel('Amplitude','FontSize',30);
legend('FFT','FontSize',25);

subplot(212);
plot(f, xz, 'r', 'LineWidth', 3);
grid on;
ax1 = gca;  % 获取当前子图的坐标轴对象
ax1.FontSize = 25;  % 设置坐标轴上文字的字体大小
xlabel('Frequency (Hz)','FontSize',30);
ylabel('Amplitude','FontSize',30);
legend('ZoomFFT','FontSize',25);


三、仿真结果

在这里插入图片描述


  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
zoomfft算法在Matlab中可以进行仿真。根据引用\[1\]中的描述,zoomfft算法是一种基于复调制的方法,可以用于频谱细化。在Matlab中,可以使用一些常见的方法,如Zoom FFT法、Chirp Z变换、Yip Zoom变换等来实现。根据引用\[2\]中的仿真参数,可以设置采样频率为1000Hz,细化倍数为50,滤波器阶数为200,FFT点数为2048,频率为166.4Hz和165Hz。根据引用\[3\]中的代码,可以实现zoomfft算法的仿真,并通过设置相应的参数来得到细化后的频率。通过这样的仿真,可以验证zoomfft算法的简明易实现性。 #### 引用[.reference_title] - *1* [基于MATLAB复调制ZOOM_FFT算法的分析和实现](https://blog.csdn.net/weixin_39951419/article/details/115947844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [频谱细化-----Zoom-FFT算法介绍及MATLAB实现](https://blog.csdn.net/yhcwjh/article/details/113772955)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [zoomfft的matlab仿真](https://blog.csdn.net/ccsss22/article/details/114896114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值