数字信号处理系列:线性调频Z变换(CZT)
本节目录
一、线性调频Z变换(CZT)
二、matlab仿真代码
三、matlab结果分析
本节内容
一、线性调频Z变换(CZT)
CZT(Chirp Z-Transform),中文名称线性调频Z变换,或简称啁啾Z变换。其中啁啾(zhou jiu)源自鸟鸣声,在信号处理中表示频率线性变化的信号。
ChirpZ变换是一种广义的Z变换计算方法,能够在Z平面上的任意路径(如直线、圆弧、对数螺旋等)进行频谱分析。与传统的FFT(快速傅里叶变换)相比,CZT不局限于单位圆上的均匀采样,而是通过调整参数灵活选择分析路径和分辨率,适用于高精度频谱分析和非均匀信号处理。
CZT的核心是通过Chirp信号调制和卷积运算实现高效计算。
CZT算法流程
CZT的应用场景
二、matlab仿真代码
信号生成
fs=2048; N=4096; df1=fs/N; % 分辨率0.5 Hz
t=(0:N-1)/fs; f1=431.1; f2=433.3; % 频率间隔2.2 Hz
s=3*cos(2πf1t)+5*cos(2πf2t-0.4); % 合成信号
FFT分析
wind=hanning(N)'; % 汉宁窗
S=abs(fft(s.*wind))*4/N; % FFT并归一化
CZT分析
f0=428; DELf=0.01; M=1024; % CZT参数
A=exp(1j*2πf0/fs); W=exp(-1j*2πDELf/fs);
G=czt(s.*wind,M,W,A); % CZT变换
GX=abs(G)*4/N; % 归一化
Matlab具体代码如下:
clear all; clc; close all;
fs=2048; % 采样频率
N=4096; % 信号长度
df1=fs/N; % 分辨率
n=1:N; % 样点索引
t=(n-1)/fs; % 时间序列
f1=431.1; f2=433.3; % 信号频率
s=3*cos(2*pi*f1*t)+5*cos(2*pi*f2*t-0.4); % 构成信号序列
wind=hanning(N)'; % 窗函数
S=abs(fft(s.*wind))*4/N; % FFT并求幅值
n1=1:N/2; % 正频率部分索引
fre1=(n1-1)*fs/N; % FFT变换后的正频率刻度
[V,K]=findpeaks(S(n1),'minpeakheight',1); % 寻找FFT频谱幅值的峰值并显示
fprintf('%5.2f %5.2f %5.2f %5.2f\n',fre1(K(1)),V(1),fre1(K(2)),V(2))
% CZT
f0=428; DELf=0.01; M=N/4; % 设置CZT的参数f0,DELf和M
n2=f0:DELf:f0+(M-1)*DELf; % 设置CZT中的频率区间
A=exp(1j*2*pi*f0/fs); % 设置A和W
W=exp(-1j*2*pi*DELf/fs);
G=czt(s.*wind,M,W,A); % CZT变换
GX=abs(G)*4/N; % 求出CZT后的频谱幅值
[V,K]=findpeaks(GX,'minpeakheight',1); % 寻找CZT频谱幅值的峰值并显示
fprintf('%5.2f %5.2f %5.2f %5.2f\n',n2(K(1)),V(1),n2(K(2)),V(2))
% 作图
subplot 211; plot((n1-1)*df1,S(n1),'k');
title('FFT得到的全景幅值谱图')
xlabel('频率/Hz'); ylabel('幅值');
grid on; xlim([0 fs/2])
subplot 212; plot(n2,abs(GX),'k');
title('CZT得到的幅值谱图')
xlabel('频率/Hz'); ylabel('幅值');
grid on; xlim([428 438]); hold on
stem(n2(K(1)),V(1),'k');
stem(n2(K(2)),V(2),'k');
set(gcf,'color','w');
三、matlab结果分析
FFT结果
431.00 2.91 433.50 4.50
CZT结果
431.10 2.99 433.30 4.99