看板 Math 關於我們 聯絡資訊
前同事回了我這段 ----- 如果用 512 階 FFT 且是 100Hz 取樣的話 那麼就傳入 5 秒的資料(500點)剩下的補 0。 再做FFT輸出這些資料的頻譜。 ----- 想必輸入的程式是這樣 for (i = 0; i < 512; i++) { s[i].real = 依序填 512 點取樣值; s[i].imag = 0; } 然後做 fft(s); 可是我怎麼取輸出的頻域呢? s[0] 就是 0hz (直流成份) s[1] 是 100hz s[2] 是 200hz 是這樣嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.82.254.91 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1571604334.A.2A0.html ※ 編輯: HuangJC (111.82.254.91 臺灣), 10/21/2019 04:50:34
HuangJC : 感覺不太對,取樣定理說要兩倍以上取樣 10/21 05:40
HuangJC : 所以 100HZ 取樣的話,只能還原出 50HZ 以下的波 10/21 05:41
HuangJC : 那我就看不懂頻域怎麼解讀的了.. 10/21 05:41
j0958322080 : 對原始資料補0是為了符合FFT算法,出來的結果是-f~f 10/21 11:01
j0958322080 : 你自己丟個sin波疊合的時域訊號進去就知道了 10/21 11:02
j0958322080 : #1SDMTp7K 10/21 11:02
j0958322080 : #1SD-QFRG 10/21 11:04
下面這個,文章代碼消失了,找不到! ------- 我昨天沒做多 sin 波,只做 sin(x) ,1HZ,用 2HZ 去取樣 所以我取到的點全部都是 0 然後我腦袋就當機了... 全取到 0,根本無法預估振幅,是要分析什麼? 取樣定理說要兩倍,我這有兩倍了啊 XD (我是故意找麻煩沒錯,但這很方便驗算..) ※ 編輯: HuangJC (111.82.254.91 臺灣), 10/21/2019 11:38:57
j0958322080 : 兩個都差不多,反正就是你把FFT後的資料畫出來 10/21 15:51
j0958322080 : 你看我文章的那張圖,做完FFT之後的X是頻率Y是振幅 10/21 16:26
HuangJC : 振幅是一種相對的東西,我在下一篇列出了絕對的值 10/21 21:07
HuangJC : 結果發現大有問題,這點當初你有發現嗎? 10/21 21:08
j0958322080 : 因為你做FT要歸一阿 10/21 22:06
這個 歸一 怎麼做? 你的例子裡沒有直流成份 (這是電子電機講法,因為什麼都是 sin 波的組合 這個看法非常適合電子電機,它就是交流電) 或說,常數項 像我把每一項都除以 4 時 s[0] 卻要除以 8 這樣我很心虛,因為怎麼會有個例外呢? 是不是我硬湊得太過份了? 另外我也有算角度,你也沒算 一算角度就發現湊答案湊得誇張.. ※ 編輯: HuangJC (111.82.254.91 臺灣), 10/21/2019 23:49:49
HuangJC : 好吧,文中有 模值;有人也是用這些算法 10/21 23:59
HuangJC : 雖然我是湊答案的,但剛好湊到和他一樣 XD 10/22 00:00
j0958322080 : 你自己加油吧 10/22 08:55
HuangJC : 謝謝 10/22 15:03