FFT理解

还是得靠理解啊

背景

FFT靠背板的选手被合数循环FFT题卡掉了。

前言

FFT的核心思想是DFT和IDFT.
换言之就是快速求出点值表示。

前置

单位根: w w w:n次方后变成1(乘法单位元)。
要是有 w n 2 = − 1 w^\frac{n}{2}=-1 w2n=1更为舒适( 2 n F F T 2^nFFT 2nFFT时使用)

实现

我们拿一个数组存储当前的对应的点值(废话)。
其中下标对应的是多少次根。
以2的n次方为循环节的fft为例:
F ( x ) = a 1 x n 0 + a 2 x n 1 . . . . . . a n − 1 x n n − 1 F(x)=a_1x^0_n+a_2x^1_n......a_{n-1}x^{n-1}_n F(x)=a1xn0+a2xn1......an1xnn1
那么 F ( x ) = ( a 1 x n / 2 0 + a 3 x n / 2 2 + . . . . . . . ) + x ∗ ( a 2 x n / 2 0 + a 4 x n / 2 2 + . . . . . . . ) F(x)=(a_1x^0_{n/2}+a_3x^2_{n/2}+.......)+x*(a_2x^0_{n/2}+a_4x^2_{n/2}+.......) F(x)=(a1xn/20+a3xn/22+.......)+x(a2xn/20+a4xn/22+.......)
并且由于 x n n = = x n / 2 n / 2 x^n_n==x^{n/2}_{n/2} xnn==xn/2n/2,因此上面两个值都不用换直接拿来用
大概是这个样子:
原数组: a 1 ( x n / 2 0 ) , a 2 ( x n / 2 0 ) , a 1 x n / 2 1 , a 2 x n / 2 1 . . . . . . a_1(x^0_{n/2}),a2(x^0_{n/2}),a_1x^1_{n/2},a_2x^1_{n/2}...... a1(xn/20),a2(xn/20),a1xn/21,a2xn/21......
求数组: a n ( x n 0 )    , a n ( x n 1 )    , a n ( x n 2 ) a_n(x^0_{n})\ \ ,a_n(x^1_{n})\ \ ,a_n(x^2_{n}) an(xn0)  ,an(xn1)  ,an(xn2)
由于单位根性质, a n ( x n k ) = a 1 ( x n 2 k ) + x n k ∗ a 2 ( x n 2 k ) a_n(x^k_n)=a_1(x^{2k}_n)+x^k_n*a_2(x^{2k}_n) an(xnk)=a1(xn2k)+xnka2(xn2k),然后会发现如果2k>n变1了,因此每个新位置是由哪些原先的位置求出的呈一个循环,下标每增加1,区间(循环)右移当前分成了几个的长度。
这样做就可以递归分解合数的fft了。

优化

理论上多合数积底的fft也可以和 2 n 2^n 2n底的一样翻转。
但是裸奔的多合数基底fft都是黑题了,你还想优化常数?你以为你谁啊
上面那句话是作者自用的,请勿误伤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中的fft函数是用于进行快速傅里叶变换的函数。快速傅里叶变换(FFT)是一种用于将时域信号转换为频域信号的算法。使用FFT可以将一个信号分解成一系列频率分量,从而更好地理解和分析信号的频谱特性。 在引用和引用中的代码示例中,展示了如何在MATLAB中使用fft函数进行频域分析。首先,通过设定采样点数N和FFT所用的采样点数NFFT,确定信号的长度和频域分析的精度。然后,根据信号的时间序列生成信号y。接下来,使用fft函数对信号y进行傅里叶变换,得到频域信号x。通过取绝对值,可以得到频域信号的幅度谱m。最后,根据FFT的性质,计算频率轴f,并绘制出频率轴上的振幅谱图。 通过调整采样点数N和FFT所用的采样点数NFFT,可以控制频域分析的精度和频率分辨率。较大的N和NFFT值可以提高分析的精度,但同时也会增加计算量。 需要注意的是,以上只是MATLAB中使用fft函数进行频域分析的基本方法,具体使用方法还需根据实际需求进行调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MatLab中的fft变换(快速傅里叶变换)](https://blog.csdn.net/weixin_43215105/article/details/127932757)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [FFT在matlab中的使用方法](https://blog.csdn.net/YAOHAIPI/article/details/102078741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值