专栏文章

Chirp-Z Transform / Inverse Chirp-Z Transform

算法·理论参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@mlgxrwbb
此快照首次捕获于
2026/02/11 02:30
上周
此快照最后确认于
2026/02/19 01:15
16 小时前
查看原文

Chirp-Z Transform / Inverse Chirp-Z Transform

读者需要具有一定的多项式基础和数学基础。

Chirp-Z Transform

给定 n1n-1 次多项式 F(x)F(x) ,求它在每个 i[0,n1],pqii\in[0,n-1],p\cdot q^i 上的点值,要求 O(nlogn)\mathbf O(n\log n)
Chirp-Z Transform(CZT)解决的是上面的问题,概括出来就是等比数列多项式多点求值。
我们先尝试构造一个卷积的形式:
yi=j=0n1fjxj=j=0n1fj(pqi)j=j=0n1(fjpj)qijy_i=\sum_{j=0}^{n-1}f_j\cdot x^j=\sum_{j=0}^{n-1}f_j(p\cdot q^i)^j=\sum_{j=0}^{n-1}(f_j\cdot p^j)q^{i\cdot j}
解释:根据点值的定义,将 xi=pqix_i=p\cdot q^i 代入,然后变形将指数 jj 给到括号内,提出 qq 相关的项。
yi=j=0n1(fjpj)q(i+j2)(i2)(j2)y_i=\sum_{j=0}^{n-1}(f_j\cdot p^j)q^{\binom{i+j}2-\binom i2-\binom j2}
解释:有恒等式 ij=(i+j2)(i2)(j2)i\cdot j=\binom{i+j}2-\binom i2-\binom j2
直接按组合数的定义展开即证。
(i+j2)(i2)(j2)=12(i+j)(i+j1)12i(i1)12j(j1)=12(i2+iji+ij+j2ji2+ij2+j)=12(2ij)=ij\begin{aligned} &\binom{i+j}2-\binom i2-\binom j2\\ &=\frac12(i+j)(i+j-1)-\frac12i(i-1)-\frac12j(j-1)\\ &=\frac12(i^2+i\cdot j-i+i\cdot j+j^2-j-i^2+i-j^2+j)\\ &=\frac12(2\cdot i\cdot j)\\ &=i\cdot j \end{aligned}
yi=q(i2)j=0n1(fjpj)q(i+j2)(j2)=q(i2)j=0n1(fjpjq(j2))q(i+j2)y_i=q^{-\binom i2}\sum_{j=0}^{n-1}(f_j\cdot p^j)q^{\binom{i+j}2-\binom j2}=q^{-\binom i2}\sum_{j=0}^{n-1}(f_j\cdot p^j\cdot q^{-\binom j2})q^{\binom{i+j}2}
解释:将与求和索引 jj 无关的项提出到求和符号外,然后展开乘方运算,将仅与 jj 有关的量放到一起,构造卷积形式。
yi=q(i2)j=0n1ujvi+jy_i=q^{-\binom i2}\sum_{j=0}^{n-1}u_j\cdot v_{i+j}
解释:换元 ut=ftptq(t2),vt=q(t2)u_t=f_t\cdot p^t\cdot q^{-\binom t2},v_t=q^{\binom t2}。此时后面的求和部分 ujvi+j\sum u_j\cdot v_{i+j} 是一个减法卷积形式,可以构造 U(x)=ujxj,V(x)=vjxjU(x)=\sum u_j\cdot x^j,V(x)=\sum v_j\cdot x^j,计算 U(x)U(x)V(x)V(x) 的减法卷积即可得到 ujvi+j\sum u_j\cdot v_{i+j} 部分,最后乘上前面的系数 q(i2)q^{-\binom i2} 就完成了。
那如何计算 U(x)U(x)V(x)V(x) 的减法卷积呢?经典的方法是将其中一个系数翻转,然后计算二者的加法卷积(多项式乘法)。使用快速数论变换实现多项式乘法可以做到 O(nlogn)\mathbf O(n\log n) 的时间复杂度。

Inverse Chirp-Z Transform

给定 n1n-1 次多项式 F(x)F(x) 在每个 i[0,n1],pqii\in[0,n-1],p\cdot q^i 上的点值,求它,要求 O(nlogn)\mathbf O(n\log n)
Inverse Chirp-Z Transform(ICZT)解决的是上面的问题,概括出来就是等比数列多项式多点插值。
我们先尝试简化问题。设 G(x)=j=0n1gjxj=F(px)=j=0n1fj(pjxj)G(x)=\sum\limits_{j=0}^{n-1}g_j\cdot x^j=F(p\cdot x)=\sum\limits_{j=0}^{n-1}f_j(p^j\cdot x^j)。如果我们能求出 G(x)G(x) 的系数 gjg_j,又因为 gj=fjpjg_j=f_j\cdot p^j,那我们就能直接得到 F(x)F(x) 的系数 fj=gjpjf_j=g_j\cdot p^{-j}。此时问题简化为“给定 n1n-1 次多项式 G(x)G(x) 在每个 i[0,n1],qii\in[0,n-1],q^i 上的点值,求它,要求 O(nlogn)\mathbf O(n\log n)”。
G(x)G(x) 在牛顿基下的形式为 G(x)=j=0n1gjk=0j1(xqk)G(x)=\sum\limits_{j=0}^{n-1}g'_j\prod\limits_{k=0}^{j-1}(x-q^k)
yi=g(qi)=j=0n1gjk=0j1(qiqk)=j=0igjk=0j1(qiqk)y_i=g(q^i)=\sum_{j=0}^{n-1}g'_j\prod\limits_{k=0}^{j-1}(q^i-q^k)=\sum_{j=0}^ig'_j\prod_{k=0}^{j-1}(q^i-q^k)
解释:根据 G(x)G(x) 的牛顿基表示形式展开,然后根据点值的定义带入。后面我们把第一个求和式中 jj 的上界从 n1n-1 缩小为 ii,是因为若 j>ij>i,则第二个求积式中 kk 可以取到 ii,导致乘积结果为 00,对 yiy_i 无影响。
yi=j=0igjq(j2)(i)q!(ij)q!y_i=\sum_{j=0}^ig'_j\cdot q^{\binom j2}\dfrac{(i)_q!}{(i-j)_q!}
解释:根据变形 qq-阶乘恒等式 k=0j1(qiqk)=q(j2)(i)q!(ij)q!\prod\limits_{k=0}^{j-1}(q^i-q^k)=q^{\binom j2}\dfrac{(i)_q!}{(i-j)_q!} 可得。
请不要被 qq-阶乘这个名字吓住。这只是个定义:(n)q!=i=1n(qi1)(n)_q!=\prod\limits_{i=1}^n(q^i-1)。熟悉 qq-analog 的读者应该会发现,这不是标准的 qq-阶乘形式 [n]q![n]_q!。这里是我们有意为之,定义此变形 qq-阶乘,舍去了分母的部分,并且将分子的部分乘上了 1-1
k=0j1(qiqk)=k=0j1qk(qik1)=qk=0j1kk=0j1(qik1)\prod_{k=0}^{j-1}(q^i-q^k)=\prod_{k=0}^{j-1}q^k(q^{i-k}-1)=q^{\sum\limits_{k=0}^{j-1}k}\prod_{k=0}^{j-1}(q^{i-k}-1)
解释:提出 qkq^k 一项,然后通过乘方运算规律将其完全扯到求积式外面。
k=0j1(qiqk)=q(j2)k=0j1(qik1)\prod_{k=0}^{j-1}(q^i-q^k)=q^{\binom j2}\prod_{k=0}^{j-1}(q^{i-k}-1)
解释:求积式外面的系数的指数是等差数列求和,其结果为 j(j1)2\frac{j(j-1)}2,这等同于 (j2)\binom j2。观察目前这个式子与目标式 q(j2)(i)q!(ij)q!q^{\binom j2}\dfrac{(i)_q!}{(i-j)_q!} 的差异,接下来我们只需要证明 k=0j1(qik1)=(i)q!(ij)q!\prod\limits_{k=0}^{j-1}(q^{i-k}-1)=\dfrac{(i)_q!}{(i-j)_q!} 即可。
(i)q!(ij)q!=l=ij+1i(ql1)\dfrac{(i)_q!}{(i-j)_q!}=\prod_{l=i-j+1}^i(q^l-1)
解释:根据定义有 (i)q!=l=1i(ql1)(i)_q!=\prod\limits_{l=1}^i(q^l-1) 以及 (ij)q!=l=1ij(ql1)(i-j)_q!=\prod\limits_{l=1}^{i-j}(q^l-1),直接相除即可。
(i)q!(ij)q!=k=0j1(qik1)\dfrac{(i)_q!}{(i-j)_q!}=\prod_{k=0}^{j-1}(q^{i-k}-1)
解释:换元 k=ilk=i-l,也就有 l=ikl=i-k。原先 l=ij+1l=i-j+1 的下界对应现在 ik=ij+1i-k=i-j+1 也就是 k=j1k=j-1 的上界;原先 l=il=i 的上界对应现在 ik=ii-k=i 也就是 k=0k=0 的下界,证毕。
如果想了解更多关于 qq-analog 的内容可以阅读 WorldMachine 的专栏 - 分拆数与 qq-analog 小记
yi(i)q!=j=0i(gjq(j2))1(ij)q!\dfrac{y_i}{(i)_q!}=\sum_{j=0}^i\left(g'_j\cdot q^{\binom j2}\right)\dfrac1{(i-j)_q!}
解释:移项整理,尝试构造卷积形式。
ai=j=0ibjcija_i=\sum_{j=0}^ib_j\cdot c_{i-j}
解释:换元 at=yt(t)q!,bt=gtq(t2),ct=1(t)q!a_t=\dfrac{y_t}{(t)_q!},b_t=g'_t\cdot q^{\binom t2},c_t=\dfrac1{(t)_q!}。此时后面的求和部分 bjcij\sum b_j\cdot c_{i-j} 是一个加法卷积形式,可以构造 B(x)=bjxj,C(x)=cjxjB(x)=\sum b_j\cdot x^j,C(x)=\sum c_j\cdot x^j。注意你现在要求的是 gjg'_j 一项,也就是要求 B(x)B(x),那就需要多项式除法(多项式乘法逆元)求出 B(x)B(x),然后 gj=bjq(j2)g'_j=b_j\cdot q^{-\binom j2} 即可。
接下来我们需要把牛顿基系数 gg' 转换回常规系数 gg
G(x)=j=0n1gjk=0j1(xqk)=j=0n1gjk=0j(jk)q(1)jkq(jk2)xkG(x)=\sum_{j=0}^{n-1}g'_j\prod_{k=0}^{j-1}(x-q^k)=\sum_{j=0}^{n-1}g'_j\sum_{k=0}^j\binom jk_q(-1)^{j-k}q^{\binom{j-k}2}x^k
解释:牛顿基式子,然后 qq-二项式定理把后面的求积式化掉。
没想到吧 qq-analog 还在发力。qq-二项式定理的内容为:
k=0j1(xqk)=k=0j(jk)q(1)jkq(jk2)xk\prod_{k=0}^{j-1}(x-q^k)=\sum_{k=0}^j\binom jk_q (-1)^{j-k}q^{\binom{j-k}2}x^k
首先定义 qq-二项式系数 (nk)q=(n)q!(k)q!(nk)q!\binom nk_q=\frac{(n)_q!}{(k)_q!(n-k)_q!}。注意这里的 (n)q!(n)_q! 是我们之前定义的变形 qq-阶乘 i=1n(qi1)\prod\limits_{i=1}^n(q^i-1)。我们需要先证明一个递推关系 (nk)q=(n1k1)q+qk(n1k)q\binom nk_q=\binom{n-1}{k-1}_q+q^k\binom{n-1}k_q,它又名 qq-帕斯卡恒等式。
(n1k1)q+qk(n1k)q=(n1)q!(k1)q!(nk)q!+qk(n1)q!(k)q!(n1k)q!\binom{n-1}{k-1}_q+q^k\binom{n-1}k_q=\frac{(n-1)_q!}{(k-1)_q!(n-k)_q!}+q^k\frac{(n-1)_q!}{(k)_q!(n-1-k)_q!}
解释:按照 qq-二项式系数的定义展开。
(n1k1)q+qk(n1k)q=(n1)q!(k)q!(nk)q!((qk1)+qk(qnk1))\binom{n-1}{k-1}_q+q^k\binom{n-1}k_q=\frac{(n-1)_q!}{(k)_q!(n-k)_q!}\left((q^k-1)+q^k(q^{n-k}-1)\right)
解释:通分。
(n1k1)q+qk(n1k)q=(n1)q!(k)q!(nk)q!(qn1)\binom{n-1}{k-1}_q+q^k\binom{n-1}k_q=\frac{(n-1)_q!}{(k)_q!(n-k)_q!}(q^n-1)
解释:展开分式右侧的括号内容。
(n1k1)q+qk(n1k)q=(n)q!(k)q!(nk)q!=(nk)q\binom{n-1}{k-1}_q+q^k\binom{n-1}k_q=\frac{(n)_q!}{(k)_q!(n-k)_q!}=\binom nk_q
解释:根据定义有 (n)q!=(n1)q!(qn1)(n)_q!=(n-1)_q!(q^n-1),直接把括号内容乘到分子上合并。然后得到的式子根据 qq-二项式系数的定义变形,证毕。
接下来我们使用数学归纳法证明 qq-二项式定理,先是一些记号:
  • Ln(x)=k=0n1(xqk)L_n(x)=\prod\limits_{k=0}^{n-1}(x-q^k),特别地 Ln(0)L_n(0) 是空积,也就是说 Ln(0)=1L_n(0)=1
  • Rn(x)=k=0ncn,kxkR_n(x)=\sum\limits_{k=0}^nc_{n,k}x^k,这里我们换元 cn,k=(nk)q(1)nkq(nk2)c_{n,k}=\binom nk_q(-1)^{n-k}q^{\binom {n-k}2} 方便书写。
下面开始证明。当 n=0n=0 时,Ln(x)=1L_n(x)=1Rn(x)=(00)q(1)0q0x0=1R_n(x)=\binom 00_q(-1)^0q^0x^0=1,结论成立。假设对 n1n-1 成立,我们知道 Ln(x)=Ln1(x)(xqn1)L_n(x)=L_{n-1}(x)(x-q^{n-1}),考虑这个等式左右两边每一项的关系:
k,[xk]Ln(x)=[xk1]Ln1(x)qn1[xk]Ln1(x)\forall k,[x^k]L_n(x)=[x^{k-1}]L_{n-1}(x)-q^{n-1}[x^k]L_{n-1}(x)
解释:[xk]Ln(x)[x^k]L_n(x) 表示提取多项式 Ln(x)L_n(x)xkx^k 项系数。根据前面提到的 Ln(x)L_n(x)Ln1(x)L_{n-1}(x) 之间的关系,我们知道 Ln(x)L_n(x)xkx^k 项是由 Ln1L_{n-1}xk1x^{k-1} 项乘上 xx 加上 Ln1L_{n-1}xkx^k 项乘上 qn1-q^{n-1} 得到。
k,[xk]Ln(x)=cn1,k1qn1cn1,k\forall k,[x^k]L_n(x)=c_{n-1,k-1}-q^{n-1}c_{n-1,k}
解释:根据归纳假设,Ln1(x)=Rn1(x)L_{n-1}(x)=R_{n-1}(x),而 Rn1(x)R_{n-1}(x) 是一个求和式,它的 xkx^k 项就是 cn1,kc_{n-1,k},同理它的 xk1x^{k-1} 项就是 cn1,k1c_{n-1,k-1}
k,[xk]Ln(x)=(n1k1)q(1)nkq(nk2)qn1(n1k)q(1)n1kq(n1k2)\forall k,[x^k]L_n(x)=\binom{n-1}{k-1}_q(-1)^{n-k}q^{\binom{n-k}2}-q^{n-1}\binom{n-1}k_q(-1)^{n-1-k}q^{\binom{n-1-k}2}
解释:按照 cn,kc_{n,k} 的定义直接展开。
k,[xk]Ln(x)=(1)nkq(nk2)((n1k1)qqn1(n1k)q(1)1q(n1k2)(nk2))\forall k,[x^k]L_n(x)=(-1)^{n-k}q^{\binom{n-k}2}\left(\binom{n-1}{k-1}_q-q^{n-1}\binom{n-1}k_q(-1)^{-1}q^{\binom{n-1-k}2-\binom{n-k}2}\right)
解释:提取公因式。
k,[xk]Ln(x)=(1)nkq(nk2)((n1k1)q+qk(n1k)q)\forall k,[x^k]L_n(x)=(-1)^{n-k}q^{\binom{n-k}2}\left(\binom{n-1}{k-1}_q+q^k\binom{n-1}k_q\right)
解释:首先将 (1)1(-1)^{-1} 直接乘掉。然后右边 qq 的指数是 (n1k2)(nk2)=(nk1)(nk2)2(nk)(nk1)2=nk12(nk2(nk))=nk12(2)=n+k+1\binom{n-1-k}2-\binom{n-k}2=\frac{(n-k-1)(n-k-2)}2-\frac{(n-k)(n-k-1)}2=\frac{n-k-1}2(n-k-2-(n-k))=\frac{n-k-1}2(-2)=-n+k+1,前面还乘了一项 qn1q^{n-1},那么 qq 的总指数就是 n+k+1+n1=k-n+k+1+n-1=k
k,[xk]Ln(x)=(1)nkq(nk2)(nk)q=cn,k=[xk]Rn(x)\forall k,[x^k]L_n(x)=(-1)^{n-k}q^{\binom{n-k}2}\binom nk_q=c_{n,k}=[x^k]R_n(x)
解释:第一步是 qq-帕斯卡恒等式,然后根据 cn,kc_{n,k} 的定义直接化简。然后 cn,kc_{n,k} 又是 Rn(x)R_n(x)xkx^k 项系数,所以我们证明了对于每个 kkLn(x)L_n(x)xkx^k 项系数和 Rn(x)R_n(x)xkx^k 项系数相同,那么就有 Ln(x)=Rn(x)L_n(x)=R_n(x)qq-二项式定理证毕。
交换求和顺序,对比系数就有 gj=i=jn1gi(ij)q(1)ijq(ij2)g_j=\sum\limits_{i=j}^{n-1}g'_i\binom ij_q(-1)^{i-j}q^{\binom{i-j}2}
gj=i=jn1gi(i)q!(j)q!(ij)q!(1)ijq(ij2)g_j=\sum_{i=j}^{n-1}g'_i\dfrac{(i)_q!}{(j)_q!(i-j)_q!}(-1)^{i-j}q^{\binom{i-j}2}
解释:根据 qq-组合数的定义展开。
gj(j)q!=i=jn1(gi(i)q!)(1)ijq(ij2)(ij)q!g_j(j)_q!=\sum_{i=j}^{n-1}(g'_i(i)_q!)\dfrac{(-1)^{i-j}q^{\binom{i-j}2}}{(i-j)_q!}
解释:移项整理,构造卷积形式。
gj=1(j)q!i=jn1uivijg_j=\dfrac1{(j)_q!}\sum_{i=j}^{n-1}u_i\cdot v_{i-j}
解释:换元 ut=gt(t)q!,vt=(1)tq(t2)(t)q!u_t=g'_t(t)_q!,v_t=\dfrac{(-1)^tq^{\binom t2}}{(t)_q!}。此时后面的求和部分 uivij\sum u_i\cdot v_{i-j} 是一个加法卷积形式,可以构造 U(x)=ujxj,V(x)=vjxjU(x)=\sum u_j\cdot x^j,V(x)=\sum v_j\cdot x^j。计算 U(x)U(x)V(x)V(x) 的加法卷积即可得到 ujvij\sum u_j\cdot v_{i-j} 部分,最后乘上前面的系数 1(j)q!\dfrac1{(j)_q!} 就完成了。然后 fj=gjpjf_j=g_j\cdot p^{-j},得到 ff
以上多项式乘法逆元可以牛顿迭代,加法卷积可以快速数论变换,可以做到 O(nlogn)\mathbf O(n\log n) 的时间复杂度。

评论

2 条评论,欢迎与作者交流。

正在加载评论...