![]() |
/***************************************************************** 函數原型:void IFFT(struct compx *xin) 函數功能:對輸入的復數組進行快速逆傅里葉變換(IFFT) 輸入參數:*xin復數結構體組的首地址指針,struct型 輸出參數:無 作者:瓶子 *****************************************************************/ void IFFT(struct compx *xin) { float temp; int i; xin[0].real /= FFT_N; xin[0].imag /= FFT_N; xin[FFT_N >> 1].real /= FFT_N; xin[FFT_N >> 1].imag /= FFT_N; for (i = 1; i < FFT_N >> 1; i++) { temp = xin[i].real / FFT_N; xin[i].real = xin[FFT_N - i].real / FFT_N; xin[FFT_N - i].real = temp; temp = xin[i].imag / FFT_N; xin[i].imag = xin[FFT_N - i].imag / FFT_N; xin[FFT_N - i].imag = temp; } FFT(xin); } 基于以上代碼的逆FFT參考代碼,希望大家有用 |
牛人真多啊 |
FFT哪里有詳細點的學習資料呀!這程序能看懂,但不知道原理!![]() |
wanghaojie 發表于 2021-9-7 09:31 這是三目運算符 |
(i=0?FFT_N:(FFT_N/2)); 這里是三目運算符,樓主沒有錯。你還要加強下C基礎的學習。 |
正好需要,頻譜燈必要的算法 |
MCU丶NOOB 發表于 2021-7-20 18:48 =這里,樓主應該寫錯了 ![]() |
MCU丶NOOB 發表于 2021-7-20 18:48 某頻率點的幅值為:該點復數的模值除以N/2(n=1時是直流分量,其幅值是該點的模值除以N)。 |
為什么要除以FFT_N/2 |
為什么計算出來的幅值都是零點幾 |
s[ i].real=sqrt(s[ i].real*s[ i].real+s[ i].imag*s[ i].imag)/(i=0?FFT_N:(FFT_N/2)); 里面i=0?是什么意思 有bug吧 |
有采樣的函數嗎?先采樣再FFT這樣才更有實用價值啊 |
感謝樓主分享 |
感謝樓主分享 |
這個程序沒怎么看懂 |
感謝分享,這個有采樣的程序嗎 |
感謝樓主分享 |
學習了,謝謝樓主分享! |
這個也是查表嗎? |
感謝分享,等有積分了馬上下載 |
LeoXie 發表于 2019-4-12 18:01 我雖然不懂,但是我看你的三角生成的有問題呀。。/ 44800 這事采樣頻率吧,這個應該是/采樣點數呀。。 |
謝謝分享! |
下載了,等有時間看看 |
感謝樓主 |
謝謝樓主分享! |
謝謝樓主分享! |
感謝分享 |
挺好學習學習 |
感謝分享!![]() |
樓主你好,測試算出來的誤差有點大是什么原因 fx = 1500 * sin(PI * 2 * i * 350.0 / 44800) + 2700 * sin(PI * 2 * i * 8400.0 / 44800) + 4000 * sin(PI * 2* i * 18550.0 / 44800); i: 1, 350 - 1515.876709 i: 2, 700 - 0.000037 i: 3, 1050 - 13.832612 i: 4, 1400 - 0.000021 i: 5, 1750 - 0.000106 i: 6, 2100 - 0.000004 i: 7, 2450 - 63.505074 i: 8, 2800 - 28.065117 i: 9, 3150 - 8.681163 i: 10, 3500 - 0.000003 i: 11, 3850 - 27.872404 i: 12, 4200 - 0.000009 i: 13, 4550 - 28.500025 i: 14, 4900 - 0.000009 i: 15, 5250 - 0.000394 i: 16, 5600 - 0.000023 i: 17, 5950 - 0.000057 i: 18, 6300 - 0.000031 i: 19, 6650 - 14.382548 i: 20, 7000 - 0.000009 i: 21, 7350 - 117.270576 i: 22, 7700 - 0.000043 i: 23, 8050 - 23.529263 i: 24, 8400 - 2862.641113 i: 25, 8750 - 3.221907 i: 26, 9100 - 0.000009 i: 27, 9450 - 0.000341 i: 28, 9800 - 0.000022 i: 29, 10150 - 43.866310 i: 30, 10500 - 0.000080 i: 31, 10850 - 67.757050 i: 32, 11200 - 0.000032 i: 33, 11550 - 1.971847 i: 34, 11900 - 0.000046 i: 35, 12250 - 16.637976 i: 36, 12600 - 0.000021 i: 37, 12950 - 0.000365 i: 38, 13300 - 0.000002 i: 39, 13650 - 15.182350 i: 40, 14000 - 67.564186 i: 41, 14350 - 2.074305 i: 42, 14700 - 0.000011 i: 43, 15050 - 60.110844 i: 44, 15400 - 0.000009 i: 45, 15750 - 122.913864 i: 46, 16100 - 0.000014 i: 47, 16450 - 0.000136 i: 48, 16800 - 0.000023 i: 49, 17150 - 0.000022 i: 50, 17500 - 0.000009 i: 51, 17850 - 25.744360 i: 52, 18200 - 0.000009 i: 53, 18550 - 4473.796387 i: 54, 18900 - 0.000032 i: 55, 19250 - 13.660447 i: 56, 19600 - 89.433647 i: 57, 19950 - 1.869473 i: 58, 20300 - 0.000012 i: 59, 20650 - 0.000831 i: 60, 21000 - 0.000022 i: 61, 21350 - 128.387222 i: 62, 21700 - 0.000014 i: 63, 22050 - 66.304977 |
打算移植試一試 |
我怎么測試下來 時間遠遠不止呢,我用的24MHZ 的 STC51 執行128 的 FFT 需要 50多mS啊 |
感謝分享,研究一下 |
請問還需要用到什么程序嗎,能不能給個完整的ad采樣然后FFT的呢 |
下來看看 |
下下來測試下先。 |
有誰試用過可行嗎 |
不錯,正在搞信號處理方面的![]() |
可以使用,結果還在測試中,調用create_sin_tab得改改 |
我試了一下,keil編譯的時候顯示空間不足,郁悶了。 |