作者j0958322080 (Tidus)
看板comm_and_RF
标题[问题] FFT补零的方法
时间Fri Jan 11 08:42:50 2019
快速傅立叶只能用於2^N个资料点数,N为自然数,
有查到通常是会用补零的方式把资料点数补满到2^N。
因为套装软体没办法符合我的需求,
所以使用numerical recipe中FFT 的code,
我给讯号源sin(2*pi)+sin(30*pi)+sin(100*pi),在[0,2pi)内等分1000点,
http://i.imgur.com/hXDLxgj.jpg
我把讯号转成频谱强度,
橘色是FFT补到2048,蓝色是直接DFT,都还没除1000。
昨天问人说FFT转出来不正确,我想可能是因为补零造成内插,
这样FFT要如何使用於任意数的资料点数?
-----
Sent from JPTT on my LGE LG-H860.
--
!!!!!!!!!!!!!签名档破750000点击率啦!!!!!!!!!!!!!!!
Fw: [问卦] 电影:决胜21点的机率问题
https://goo.gl/2BpbB7 #1MfN3FgZ (joke)
1F:→ yeebon: chx64的1/2悖论真的很经典呢07/22 16:41
!!!!!!!!!!!!!!签名档破750000点击率啦!!!!!!!!!!!!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.26.230.28
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/comm_and_RF/M.1547167375.A.6D0.html
2F:推 profyang: Matlab的fft,不补到2的次方也可以算 你114.137.114.214 01/12 12:23
3F:→ j0958322080: 公司没有matlab,且包成dll用C较方便 27.242.7.14 01/12 18:11
4F:推 bxxl: 应该没错, 本来就是长这样. 不同点数的DFT220.136.146.133 01/13 19:31
5F:→ bxxl: 算出来的结果本来就不会一样啊.220.136.146.133 01/13 19:31
6F:→ bxxl: 你要先懂N点DFT结果的物理意义.220.136.146.133 01/13 19:33
7F:→ bxxl: N不同,你对应频率上的格子点就偏移了220.136.146.133 01/13 19:35
8F:推 bxxl: 但偏移不代表不对,只是你要正确的解读它220.136.146.133 01/13 19:42
9F:推 bxxl: 另外回到原题,最简单的做法就是直接喂它1024220.136.146.133 01/13 19:47
10F:→ bxxl: 有限制说你不能一次取1024点资料吗?220.136.146.133 01/13 19:48
11F:→ bxxl: 常见的应用中,取样讯号是一直进来的220.136.146.133 01/13 19:49
12F:→ bxxl: 要取1000点或1024点是看你方便, 那当然选220.136.146.133 01/13 19:49
13F:→ bxxl: 计算快速的1024点啊220.136.146.133 01/13 19:49
14F:→ j0958322080: 点数我不能保证,因为是写给客户的 27.242.7.14 01/13 21:11
15F:→ j0958322080: 我们只能建议他量测2^N点数 27.242.7.14 01/13 21:12
16F:→ j0958322080: 这样看起来就只能混用Radix去做了 27.242.7.14 01/13 21:14
17F:推 bxxl: matlab是call FFTW library220.136.146.133 01/13 23:42
18F:→ bxxl: 基本上也是不同点数的算法不一样220.136.146.133 01/13 23:42
19F:→ bxxl: N能因数分解为小质数时最快220.136.146.133 01/13 23:43
20F:→ j0958322080: 原来matlab也是call FFTW的喔@@ 27.242.7.14 01/14 00:27
21F:推 cuello: 不用再受限2^n了吧,我之前都直接叫fftw 61.230.112.161 11/05 23:21
22F:→ cuello: 如果你刚好用Linux, $ apt-cache search 61.230.112.161 11/05 23:23
23F:→ cuello: fftw 61.230.112.161 11/05 23:23
24F:→ cuello: fftw 很强的, NR 并非ㄧ定可靠喔~ 61.230.112.161 11/05 23:26
25F:→ cuello: 有些问题用掉过我了我不少时间精力.... 61.230.112.161 11/05 23:29
26F:→ cuello: 得到的教训:数值问题交给数值专家... 61.230.112.161 11/05 23:30
27F:→ cuello: 我根本就不该花时间去改码到算对为止... 61.230.112.161 11/05 23:33
28F:→ cuello: (NB: 但我说的并不是它的 dft routines 61.230.112.161 11/05 23:35
29F:→ cuello: ) 61.230.112.161 11/05 23:35
30F:推 cuello: "算对"?是,会有算对算错的问题! 61.230.112.161 11/05 23:40
31F:→ cuello: 随时要有其它软体可以对答案,我常用 ma 61.230.112.161 11/05 23:41
32F:→ cuello: tlab 61.230.112.161 11/05 23:41
33F:→ cuello: 所以,必须自己写时,建议用可靠的程式库 61.230.112.161 11/05 23:44
34F:→ j0958322080: 是这样没错,FFTW没开放源码,仅DLL 39.9.30.88 11/16 18:20
35F:→ j0958322080: 我个人是习惯把源码撷取出来包进程式 39.9.30.88 11/16 18:20
36F:推 cuello: 我自己的确也有这种顷向,ㄧ直都是 58.114.211.63 11/16 23:26
37F:→ cuello: 後来也找到了原始码对付任何尺寸,不必方 58.114.211.63 11/16 23:30
38F:→ cuello: 形 58.114.211.63 11/16 23:30
39F:→ cuello: 现在想起来程式里 fftw ㄧ直都非预设,是 58.114.211.63 11/16 23:33
40F:→ cuello: 选项 :) 58.114.211.63 11/16 23:33