本节目录
一、复调制细化(Zoom FFT)
二、matlab仿真代码
三、matlab结果分析
本节内容
一、复调制细化(Zoom FFT)
复调制细化(Zoom FFT)通过频谱搬移+复解析滤波+降采样实现高分辨率频谱分析。本文描述的是复解析滤波器结合复调制的频谱细化方法(Zoom-FFT的一种高级实现),通过设计一个复解析带通滤波器,将用户感兴趣的频带滤出并移频至零频附近,然后进行重采样和FFT分析,从而得到高分辨率的局部频谱。
实信号x(t)的解析信号表示为:
其中H{·}为希尔伯特变换,结果为复信号,仅包含正频率成分(无负频率镜像)。
目的:用来消除频谱冗余,便于后续复调制操作。
通过乘以复指数e^(-j 2π fc*t),将信号频谱搬移到新中心频率fc:
目的:将目标频带移至基带(零频附近),便于低通滤波处理。
设计复低通滤波器HLP(f),保留基带信号(带宽 BB),抑制高频干扰。
对滤波后信号降采样(因子 DD),降低采样率至fs/D,提升频率分辨率(Δf=fs/(D*N))。
对特定频段进行高分辨率分析,通过频谱搬移+降采样实现局部频谱放大。
二、matlab仿真代码
在matlab中实现了复解析滤波器复调制细化分析(Zoom-FFT),在密集间谐波的情况下,通过细化分析来获得更高的频率分辨率。生成一个多频率成分的信号,然后调用zoomffta函数进行细化分析,并绘制结果。自定义的zoomffta函数实现了复解析滤波器和复调制细化分析。
clear all; clc; close all;
fs=2048; % 采样频率
nfft=1024; % FFT变换长度
fk=[50 150 496 498 500 502 505]; % 频率矩阵
A=[220 35 1 1 1 1 1]; % 幅值矩阵
D=100; % 细化倍数
a=0.3; % 外扩系数
L=nfft*D+round(8*D/a); % 数据长度
t=(0:L-1)/fs; % 时间刻度
x=zeros(1,L); % 初始化
for k=1 : 7 % 构成信号
x=x+A(k)*cos(2*pi*fk(k)*t);
end
fe=500; % 细化区间中心频率
[xz,f]=zoomffta(x,fs,nfft,fe,D,a); % 复解析滤波器复调制细化分析
% 作图
subplot 211; plot(t,x,'k'); xlim([0 0.5]);
xlabel('时间/s'); ylabel('幅值')
title('信号时域波形');
subplot 212; plot(f,abs(xz),'k','linewidth',1.5);
set(gca, 'XTickMode', 'manual', 'XTick', [495,496,498,500,502,504,505,506]);
grid; ylim([0 1.2]);
xlabel('频率/Hz'); ylabel('幅值')
title('密集间谐波的分析');
set(gcf,'color','w');
function [xz,fz]=zoomffta(x,fs,N,fe,D,a)
M=round(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; % hfl和hfh归一化角频率
wh=2*pi*hfh/fs;
hr(1)=(wh-wl)/pi; % 按式(5-2-18a)计算复解析带通滤波器实部
hr(2:M+1)=(sin(wh*k)-sin(wl*k))./(pi*k).*w;
hi(1)=0; % 按式(5-2-18a)计算复解析带通滤波器虚部
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+1j*xiz).*exp(-1j*2*pi*(0:N-1)*yf); % 移频
xz=fft(xz); % FFT
xz=xz(1:N/2)/N; % 取细化复数谱
fz=(0:N/2-1)*fs/N/D+fl; % 计算细化谱对应的频率
end