arm_cfft_radix4_f32関数 |
FFT(Fast Fourier Transform, 高速フーリエ変換)を実行する |
関数のソース(CMSIS 2.0以上をダウンロード・インストールする必要あり) CMSIS_2_00\CMSIS\DSP_Lib\Source\Cortex-M4-M3\TransformFunctions\arm_cfft_radix4_f32.c サンプルソース(DFFSKN40基板付属CD-ROMに収録) IARprojects\src\projects\arm_fft_float 引数と戻り値 説明(イメージ) 使用例(サンプルソースの一部)
testInput_250hz_fs48khzは250Hzのサイン波を48kHzでサンプリングしたもの。複素数の配列なので実数、虚数、実数、虚数・・・と並ぶ。 FFT結果もtestInput_250hz_fs48khzに入っている。 FFT結果は複素数なのでarm_cmplx_mag_f32で実数にしている。testOutputがスペクトルの振幅になる。 実験 上記のサンプルソースをDFFSKN40基板(デジタルフィルター社)にて実験した。Cortex-M4マイコンはPK40X256VMD100(Kinetis, フリースケール社)搭載。 LCDでスペクトルをグラフ表示している。左から6番目が48kHz/1024*(6-1) = 234Hzの成分。入力信号が250Hzなのでそのあたりが膨らんでいる。 まめ知識 arm_cfft_radix4_q15(整数16ビット版)はなぜか正常動作しない(CMSIS_2_00)。動かした人はご報告ください。 info@digitalfilter.com このデバイスPK40X256VMD100にはFPU(浮動小数点ユニット)を持たないので本来は整数版を使うべきだが、上述の理由で浮動小数点版を使用した。 窓関数がないのでスペクトルのすそ野が広がっている。窓関数をかける場合は自力で生成して施す必要がある。 |