Chirp-Z变换(线性调频Z变换)原理

Chirp-Z变换(Chirp-Z Transform,CZT)

采用FFT算法可以很快地计算出全部DFT值,即Z变换在单位圆上的全部等间隔采样值。
在实际情况中,并不需要对整个单位圆的频谱进行分析,例如,对于窄带信号,往往只需要对信号所在的一段频带进行分析,即可在所关心的这段频带内进行密集的采样,而对这个频带以外的部分可以完全不管。
Z变换的螺旋采样,它沿Z平面上的一段螺线进行等分角的采样,这些采样点可以表示为
z k = A W − k ,    k = 0 , 1 , ⋯   , M − 1 z_k=AW^{-k},\ \ k=0,1,\cdots,M-1 zk=AWk,  k=0,1,,M1
其中, M M M为采样点的总数, A A A为起始点位置,可以用半径 A 0 A_0 A0及相角 θ 0 \theta_0 θ0表示为 A = A 0 e j θ 0 A=A_0 e^{j\theta_0} A=A0ejθ0
参数 W W W表示为 W = W 0 e − j ϕ 0 W=W_0e^{-j\phi_0} W=W0ejϕ0 W 0 W_0 W0为螺线的伸展率, W 0 > 1 W_0>1 W0>1,螺线内缩, W 0 < 1 W_0<1 W0<1,螺线外伸;
ϕ 0 \phi_0 ϕ0为螺线上采样点之间的等分角。
在这里插入图片描述

M = N M=N M=N A = 1 A=1 A=1 W = e − j 2 π N W=e^{-j\frac{2\pi}{N}} W=ejN2π时, z k z_k zk就等间隔地分布在单位圆上,这时CZT退化DFT。
假设 x ( n ) x(n) x(n)是长度为 N N N的有限长序列,则其Z变换在采样点 z k z_k zk上的值 X ( z k ) = ∑ n = 0 N − 1 x ( n ) z k − n ,    k = 0 , 1 , 1 , ⋯   , M − 1 X(z_k)=\sum_{n=0}^{N-1}x(n)z_k^{-n}, \ \ k=0,1,1,\cdots,M-1 X(zk)=n=0N1x(n)zkn,  k=0,1,1,,M1
为减少计算量,将上式运算转换为卷积形式,从而采用FFT进行计算。

算法原理

z k = A W − k z_k=AW^{-k} zk=AWk代入 X ( z k ) = ∑ n = 0 N − 1 x ( n ) z k − n X(z_k)=\sum_{n=0}^{N-1}x(n)z_k^{-n} X(zk)=n=0N1x(n)zkn可得
X ( z k ) = ∑ n = 0 N − 1 x ( n ) A − n W n k X(z_k)=\sum_{n=0}^{N-1}x(n)A^{-n}W^{nk} X(zk)=n=0N1x(n)AnWnk
n k nk nk替换为 1 2 [ k 2 + n 2 − ( k − n ) 2 ] \frac{1}{2}[k^2+n^2-(k-n)^2] 21[k2+n2(kn)2],则
X ( z k ) = ∑ n = 0 N − 1 x ( n ) A − n W 1 2 [ k 2 + n 2 − ( k − n ) 2 ] = W k 2 2 ∑ n = 0 N − 1 x ( n ) A − n W n 2 2 W − ( k − n ) 2 2 X(z_k)=\sum_{n=0}^{N-1}x(n)A^{-n}W^{\frac{1}{2}[k^2+n^2-(k-n)^2]}=W^\frac{k^2}{2}\sum_{n=0}^{N-1}x(n)A^{-n}W^{\frac{n^2}{2}}W^{-\frac{(k-n)^2}{2}} X(zk)=n=0N1x(n)AnW21[k2+n2(kn)2]=W2k2n=0N1x(n)AnW2n2W2(kn)2
定义 g ( n ) = x ( n ) A − n W n 2 2 ,    n = 0 , 1 , 2 , ⋯   , N − 1 g(n)=x(n)A^{-n}W^{\frac{n^2}{2}},\ \ n=0,1,2,\cdots,N-1 g(n)=x(n)AnW2n2,  n=0,1,2,,N1 h ( n ) = W − n 2 2 h(n)=W^{- \frac{n^2}{2}} h(n)=W2n2,则有
g ( k ) ∗ h ( k ) = ∑ n = 0 N − 1 g ( n ) h ( k − n ) = ∑ n = 0 N − 1 x ( n ) A − n W n 2 2 W − ( k − n ) 2 2 ,    k = 0 , 1 , ⋯   , M − 1 g(k)\ast h(k)=\sum_{n=0}^{N-1}g(n)h(k-n)=\sum_{n=0}^{N-1}x(n)A^{-n}W^{\frac{n^2}{2}}W^{-\frac{(k-n)^2}{2}},\ \ k=0,1,\cdots,M-1 g(k)h(k)=n=0N1g(n)h(kn)=n=0N1x(n)AnW2n2W2(kn)2,  k=0,1,,M1
则有
X ( z k ) = [ g ( k ) ∗ h ( k ) ] W k 2 2 ,    k = 0 , 1 , ⋯   , M − 1 X(z_k)=[g(k)\ast h(k)]W^\frac{k^2}{2},\ \ k=0,1,\cdots,M-1 X(zk)=[g(k)h(k)]W2k2,  k=0,1,,M1
算法流程图如下:
在这里插入图片描述

实现步骤

  1. 选择一个最小整数 L L L,使其满足 L ≥ N + M − 1 L\ge N+M-1 LN+M1,同时 L = 2 m L=2^m L=2m
  2. h ( n ) h(n) h(n)的主值序列 h ^ ( n ) \hat h(n) h^(n),并计算DFT;
    h ^ ( n ) = { W − n 2 2 0 ≤ n ≤ M − 1 任意值 N ≤ n ≤ L − 1 W − ( n − L ) 2 2 L − N + 1 ≤ n ≤ L − 1 \hat h(n)=\left\{\begin{array}{ll} W^{-\frac{n^2}{2}} & 0\le n \le M-1 \\ \text{任意值} & N \le n \le L-1 \\ W^{-\frac{(n-L)^2}{2}} & L-N+1\le n \le L-1 \end{array}\right. h^(n)= W2n2任意值W2(nL)20nM1NnL1LN+1nL1
    H ( k ) = D F T [ h ^ ( n ) ] ,    L 点 H(k)=DFT[\hat h(n)],\ \ L点 H(k)=DFT[h^(n)],  L
  3. x ( n ) x(n) x(n)加权、补零,并计算DFT;
    g ( n ) = { x ( n ) A − n W n 2 2 0 ≤ n ≤ N − 1 0 N ≤ n ≤ L − 1 g(n)=\left\{\begin{array}{ll} x(n)A^{-n}W^{\frac{n^2}{2}} & 0\le n \le N-1 \\ 0 & N \le n \le L-1 \end{array}\right. g(n)={x(n)AnW2n200nN1NnL1
    G ( k ) = D F T [ g ( n ) ] ,    L 点 G(k)=DFT[g(n)],\ \ L点 G(k)=DFT[g(n)],  L
  4. Y ( k ) = G ( k ) H ( k ) ,    L 点 Y(k)=G(k)H(k),\ \ L点 Y(k)=G(k)H(k),  L
  5. y ( n ) = I D F T [ Y ( k ) ] ,    L 点 y(n)=IDFT[Y(k)],\ \ L点 y(n)=IDFT[Y(k)],  L
  6. X ( z k ) = W k 2 2 y ( k ) ,    0 ≤ k ≤ M − 1 X(z_k)=W^{\frac{k^2}{2}}y(k),\ \ 0 \le k \le M-1 X(zk)=W2k2y(k),  0kM1

上述步骤实现程序可见Matlab的czt函数内部程序。

仿真分析

此处使用函数czt实现Chirp-Z变换,并将结果与DFT和采样序列插0后序列的DFT进行对比。

clc;clear;close all;
N = 8192;
f1 = 100;
f2 = 101;
fs = 8000;
Ts = 1/fs; 
ts = (1:N)*Ts;
x = cos(2*pi*f1*ts) + cos(2*pi*f2*ts) + 0.5*randn(1,N); 
y_DFT = abs(fft(x)); %%DFT
w = exp(-1i*2*pi*(150-50)/(N*fs));
a = exp(1i*2*pi*50/fs);
y_CZT = abs(czt(x,N,w,a));%%CZT

fn = (0:N-1)/N;
fy = fs*fn;
fz = (150-50)*fn + 50;
fyy = fs*(0:2*N-1)/(2*N);
xx = [x zeros(1,N)];
yy_DFT = abs(fft(xx)); %%插0 DFT
plot(yy_DFT);
plot(fy,20*log10(y_DFT), fz,20*log10(y_CZT), fyy,20*log10(yy_DFT));
xlim([80 120]);
legend('DFT','CZT','插0 DFT');

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值