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

news/2024/7/6 1:56:25 标签: matlab, DFT, CZT, FFT, Chirp-Z变换

CZT_0">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^{k^2}{2},\ \ k=0,1,\cdots,M-1 X(zk)=[g(k)h(k)]Wk22,  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 \ L-1 \end{array}\right. g(n)={x(n)AnW2n200nN1Nn L1
    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进行对比。

matlab">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');

在这里插入图片描述


http://www.niftyadmin.cn/n/85807.html

相关文章

监管持续,医疗卫生机构如何守好“涉疫”数据安全?

肆虐三年的新冠疫情&#xff0c;影响着全球经济发展、社会正常运行&#xff0c;也成为网络攻击、勒索软件攻击快速增长的温床&#xff0c;“滋生”了一系列网络、数据安全问题&#xff0c;受到各界关注。最近&#xff0c;上线运行三年的 “粤康码”发布公告、官宣部分服务下线&…

手把手教你,解决C盘分区不足,C盘怎么扩大磁盘分区

由于在磁盘分区中&#xff0c;C盘是很重要的一个磁盘&#xff0c;为了保证C盘有足够的磁盘分区。其中扩大C盘分区很常见的操作之一。那么&#xff0c;C盘怎么扩大磁盘分区&#xff1f;在本文中&#xff0c;易我小编将全面地讲解C盘合并分区的方法。 一、为什么C盘怎么扩大磁盘分…

【软件测试】自动化测试该如何做?项目?技术团队?你真的会自动化吗......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 对于自动化测试&…

【微信小程序】--注册小程序账号安装开发者工具(一)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

第三届区块链服务网络(BSN)全球合作伙伴大会在杭州成功举办

为持续推动分布式技术和产业创新发展&#xff0c;2023年2月17日&#xff0c;由杭州市人民政府指导&#xff0c;杭州市拱墅区人民政府、国家信息中心主办&#xff0c;中国移动通信集团有限公司、区块链服务网络&#xff08;BSN&#xff09;发展联盟承办&#xff0c;中国移动通信…

从零实现深度学习框架:Seq2Seq从理论到实战【理论篇】

来源&#xff1a;投稿 作者&#xff1a;175 编辑&#xff1a;学姐 往期内容&#xff1a; 从零实现深度学习框架1&#xff1a;RNN从理论到实战&#xff08;理论篇&#xff09; 从零实现深度学习框架2&#xff1a;RNN从理论到实战&#xff08;实战篇&#xff09; 从零实现深度…

数据的存储(整型)

目录 一、数据类型介绍 &#xff08;一&#xff09;类型的意义 二、 整型家族 &#xff08;一&#xff09;为什么对于整型数据存放内存中其实存放的是补码 &#xff08;二&#xff09; 大小端介绍 1. 什么大端小端 2. 设计一个小程序来判断当前机器的字节序 3. 截断和…

springcloud+vue实现图书管理系统

一、前言&#xff1a; 今天我们来分享一下一个简单的图书管理系统 我们知道图书馆系统可以有两个系统&#xff0c;一个是管理员管理图书的系统&#xff0c;管理员可以&#xff08;1&#xff09;查找某一本图书情况、&#xff08;2&#xff09;增加新的图书、&#xff08;3&…