拆系数FFT(任意模数FFT)

本文介绍了拆系数FFT的方法,适用于任意模数的快速傅里叶变换。通过将多项式系数拆分成两部分,利用复数和单位复数根的性质,可以将原本需要4次DFT的运算减少到2次,大大提高了计算效率。具体实现中,通过构造C(x)和D(x)两个复数多项式,并结合DFT的共轭特性,实现了高效的算法。
摘要由CSDN通过智能技术生成

拆系数FFT

对于任意模数 m o d mod mod
m = m o d m=\sqrt {mod} m=mod
把多项式 A ( x ) A(x) A(x) B ( x ) B(x) B(x)的系数都拆成 a × m + b a\times m+b a×m+b的形式,时 a , b a, b a,b都小于 m m m
提出,那么一个多项式就可以拆成两个多项式的加法
一个是 a ∗ m a*m am的,一个是 b b b
直接乘法分配律, a a aa aa一遍, a b ab ab一遍, b a ba ba b b bb bb一遍,四遍 F F T FFT FFT
乘出来不会超过取模范围
然后合并直接
( a × m + b ) ( c × m + d ) = a × c × m 2 + ( a × c + b × d ) m + b × d (a\times m+b)(c\times m+d)=a\times c\times m^2+(a\times c+b\times d)m+b\times d (a×m+b)(c×m+d)=a×c×m2+(a×c+b×d)m+b×d
这样子要进行 7 7 7 D F T DFT DFT

如果研究一下 m y y myy myy 2016 2016 2016 年的集训队论文就会发现有 2 2 2 次 或者 1.5 1.5 1.5 D F T DFT DFT F F T FFT FFT 算法
2次的够了吧
m y y myy myy 巧妙的运用了复数的虚部,优化了算法
具体来说


C ( x ) = A ( x ) + i B ( x ) C(x)=A(x)+iB(x) C(x)=A(x)+iB(x)
D ( x ) = A ( x ) − i B ( x ) D(x)=A(x)-iB(x) D(x)=A(x)iB(x)

假设
c ( w n k ) c(w_n^k) c(wnk) 表示将 C ( x ) C(x) C(x) D F T DFT DFT 后的点值
d ( w n k ) d(w_n^k) d(wnk) 表示将 D ( x ) D(x) D(x) D F T DFT DFT 后的点值
w w w n n n 次单位复数根
c o n j ( x ) conj(x) conj(x) 表示 x x x 的共轭复数
那么
c ( w 2 n k ) = A ( w 2 n k ) + i B ( w 2 n k ) = ∑ j = 0 2 n − 1 A j w 2 n j k

FFT(快速傅立叶变换)是一种用于将时域信号转换为频域表示的算法。在信号处理和数据分析中广泛应用。FFT算法的核心思想是将一个复杂度为O(N^2)的傅立叶变换问题转化为一个复杂度为O(NlogN)的问题,从而大大提高算法的效率。 在进行FFT算法时,我们需要先确定待处理信号的长度。接下来,我们需要对原始信号进行填充,通常是以2的整数次幂为长度,这是为了方便后续计算。然后,我们需要确定系数系数矩阵)的方式。常用的系数方式有蝶形形式和雷德算法等。 蝶形形式是FFT算法中最基础的系数方式之一。它将FFT的计算过程分解为多个蝶形计算单元,每个蝶形计算单元都是由两个乘法器和两个加法器组成。这种系数方式可以减小计算的复杂度,提高算法的效率。 雷德算法是一种对蝶形形式的改进,它通过将一个蝶形计算单元分为多个不同阶数的蝶形计算单元来加快计算速度。这种系数方式可以减少计算的次数,进一步提高算法的效率。 在进行FFT算法之前,我们还需要对信号进行预处理,包括零填充、加窗等操作,以避免频谱泄漏和谱分辨率降低等问题。 总结来说,系数系数矩阵)是FFT算法中重要的一环,能够通过蝶形形式和雷德算法等方式来提高算法的效率。通过FFT算法,我们可以快速地将时域信号转换为频域表示,从而实现对信号的频谱分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值