CZT & Blusetein‘s FFT

本文介绍了Z变换的基本概念,然后深入探讨了ChirpZ变换,其采样点沿螺线分布,提供了更广泛的灵活性。BluesteinsFFT算法利用巧妙的代换将ChirpZ变换转化为卷积运算,通过FFT进行高效计算。尽管有额外的FFT开销,但ChirpZ变换允许任意采样点配置,使得它在信号处理中更具优势。
摘要由CSDN通过智能技术生成

参考文献:

  1. [Sto66] Stockham Jr T G. High-speed convolution and correlation[C]//Proceedings of the April 26-28, 1966, Spring joint computer conference. 1966: 229-233.
  2. [Blu68] Bluestein L. A linear filtering approach to the computation of discrete Fourier transform[J]. IEEE Transactions on Audio and Electroacoustics, 1970, 18(4): 451-455.
  3. [RSR69] Rabiner L R, Schafer R W, Rader C M. The chirp z‐transform algorithm and its application[J]. Bell System Technical Journal, 1969, 48(5): 1249-1292.
  4. [PKG+16] Pariyal P S, Koyani D M, Gandhi D M, et al. Comparison based analysis of different FFT architectures[J]. International journal of image, graphics and signal processing, 2016, 8(6): 41.
  5. 数字信号处理——Chirp Z变换_chirpz变换-CSDN博客
  6. Bluestein算法简要介绍-CSDN博客
  7. 如何理解离散傅里叶变换及Z变换 - 知乎 (zhihu.com)
  8. Bluestein’s FFT Algorithm (stanford.edu)

Z-transform

给定复数序列 x n , n ∈ [ − ∞ , + ∞ ] x_n, n \in [-\infty,+\infty] xn,n[,+],它的 Z-transform 定义为
X ( z ) = ∑ n x n z − n X(z) = \sum_n x_n z^{-n} X(z)=nxnzn
这是关于复变量 z z z 的连续函数。可以限制在有限个的非零的时域样本
X ( z ) = ∑ n = 0 N − 1 x n z − n X(z) = \sum_{n=0}^{N-1} x_nz^{-n} X(z)=n=0N1xnzn
这个有限和对于任意的 z ≠ 0 z\neq 0 z=0 都收敛。假如我们选取 N N N 个频域采样点 z k , k = 0 , 1 , ⋯   , N − 1 z_k,k=0,1,\cdots,N-1 zk,k=0,1,,N1,可以计算这些位置的函数值:
X k = X ( z k ) = ∑ n = 0 N − 1 x n z k − n X_k = X(z_k) = \sum_{n=0}^{N-1} x_nz_k^{-n} Xk=X(zk)=n=0N1xnzkn
特别地,如果设置 z k = e 2 k π i / N z_k = e^{2k\pi i/N} zk=e2kπi/N(复平面上单位圆的等分点),那么它恰好是 DFT

Chirp Z-transform

[RSR69] 研究了更一般的螺线上的 Z-transform,称之为啁啾 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 , W A,W A,W 是任意复数,可写作如下的形式:
A = A 0 e 2 π i ⋅ θ 0 W = W 0 e 2 π i ⋅ ϕ 0 \begin{aligned} A &= A_0 e^{2\pi i \cdot \theta_0}\\ W &= W_0 e^{2\pi i \cdot \phi_0}\\ \end{aligned} AW=A0e2πiθ0=W0e2πiϕ0
其中,

  • A 0 ∈ R + A_0 \in \mathbb R^+ A0R+ 表示起始采样点 z 0 z_0 z0 的模长
  • θ 0 ∈ [ 0 , 1 ) \theta_0 \in [0,1) θ0[0,1) 确定了起始采样点 z 0 z_0 z0 的相位角,确切地说是 2 π θ 0 2\pi \theta_0 2πθ0
  • ϕ 0 ∈ [ 0 , 1 ) \phi_0 \in [0,1) ϕ0[0,1) 确定了相邻采样点之间的角差距(angular spacing),确切地说是 2 π ϕ 0 2\pi \phi_0 2πϕ0
  • W 0 ∈ R + W_0 \in \mathbb R^+ W0R+ 表示螺线的伸展率,
    • W 0 = 1 W_0=1 W0=1 时,采样点形成了一段圆弧
    • W 0 < 1 W_0<1 W0<1 时,螺旋线是外伸的(spiral out)
    • W 0 > 1 W_0>1 W0>1 时,螺旋线是内缩的(spiral in)

如图所示:

在这里插入图片描述

根据螺线上采样点的形式,可以写出:
X k = X ( A W − k ) = ∑ n = 0 N − 1 x n A − n W n k ,    k ∈ [ M ] X_k = X(AW^{-k}) = \sum_{n=0}^{N-1} x_nA^{-n}W^{nk},\,\, k \in [M] Xk=X(AWk)=n=0N1xnAnWnk,k[M]
啁啾 Z 变换不要求 N , M N,M N,M 相等,并且它们都是任意整数(包括素数),这里 N N N 是时域样本数,而 M M M 是频域样本数。

Bluestein’s FFT

[RSR69] 给出了计算 CZT 的快速算法。首先使用 Bluestein’s ingenious substitution
n k = n 2 + k 2 − ( k − n ) 2 2 nk = \frac{n^2 + k^2 - (k-n)^2}{2} nk=2n2+k2(kn)2
于是可以得到:
X k = W k 2 2 ⋅ ∑ n = 0 N − 1 ( x n A − n W n 2 2 ) W − ( k − n ) 2 2 = W k 2 2 ⋅ [ x n A − n W n 2 2 ] n ∈ Z ⊛ k [ W − n 2 2 ] n ∈ Z \begin{aligned} X_k &= W^{\frac{k^2}{2}} \cdot \sum_{n=0}^{N-1} \left(x_nA^{-n}W^{\frac{n^2}{2}}\right) W^{-\frac{(k-n)^2}{2}}\\ &= W^{\frac{k^2}{2}} \cdot \left[x_nA^{-n}W^{\frac{n^2}{2}}\right]_{n \in \mathbb Z} \circledast_k \left[W^{-\frac{n^2}{2}}\right]_{n \in \mathbb Z} \end{aligned} Xk=W2k2n=0N1(xnAnW2n2)W2(kn)2=W2k2[xnAnW2n2]nZk[W2n2]nZ
其中符号 ⊛ k \circledast_k k 表示位置 k ∈ Z k \in \mathbb Z kZ 的卷积运算。因此 CZT 可以被这么计算:

  1. 首先根据序列 x n , n ∈ [ N ] x_n,n \in [N] xn,n[N],计算新的序列 y n = x n A − n W n 2 2 ,    n ∈ [ N ] y_n = x_nA^{-n}W^{\frac{n^2}{2}},\,\, n \in [N] yn=xnAnW2n2,n[N]

  2. 其次使用 FFT 去计算(有限长的时域上)卷积运算。[Blu68] 使用了 [Sto66] 建议的 zero padding + cyclic convolution 策略,

    1. 设置 L = 2 m ≥ N + M − 1 L=2^m \ge N+M-1 L=2mN+M1 是二的幂次

    2. 构造 L L L 长序列
      f n = { y n , 0 ≤ n ≤ N − 1 0 , N ≤ n ≤ L − 1 f_n = \left\{\begin{aligned} y_n, && 0 \le n \le N-1\\ 0, && N \le n \le L-1 \end{aligned}\right. fn={yn,0,0nN1NnL1

    3. 构造 L L L 长序列
      h n = { W − n 2 2 , 0 ≤ n ≤ M − 1 W − ( n − L ) 2 2 , M ≤ n ≤ L − 1 h_n = \left\{\begin{aligned} W^{-\frac{n^2}{2}}, && 0 \le n \le M-1\\ W^{-\frac{(n-L)^2}{2}}, && M \le n \le L-1 \end{aligned}\right. hn= W2n2,W2(nL)2,0nM1MnL1

    4. 使用 radix-2 FFT 分别计算出 F k , k ∈ [ L ] F_k, k\in[L] Fk,k[L] 以及 H k , k ∈ [ L ] H_k, k\in[L] Hk,k[L](使用 L L L-th 本原单位根),计算阿达玛乘积 G k = F k ⋅ H k G_k = F_k \cdot H_k Gk=FkHk,再使用 Inv-FFT 计算出 g k , k ∈ [ L ] g_k, k\in[L] gk,k[L],并截取出前 k k k 个数值

  3. 最后计算 X k = g k ⋅ W k 2 2 ,    k ∈ [ M ] X_k = g_k \cdot W^{\frac{k^2}{2}},\,\, k \in [M] Xk=gkW2k2,k[M]

总的计算开销是 O ( ( N + M ) log ⁡ 2 ( N + M ) ) O\big((N+M)\log_2(N+M)\big) O((N+M)log2(N+M)),但是它花费了 3 3 3 个长度 L ≥ N + M − 1 L \ge N+M-1 LN+M1 的 FFT 运算,因此隐藏的常数比 FFT 大得多。好处是时域上的采样点形成了更一般的螺线,并且数量可以是任意的,它比 DFT 更加灵活

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值