私はSTM32L4マイクロプロセッサを使用してFFTを計算しようとしていますが、 SDカードから.wavファイルを読み込み、パディングを削除して1024バイトのデータを配列に格納します。 私のPCの16進エディタで同じwavファイルを開くことにより、このデータが正しいことを確認しました。 MatLabでFFTを計算し、その大きさをとると、入力正弦波の周波数に対応する周波数ビンが一致します。これは私のCコードでは当てはまりません(私が使っているKeilデバッガに見られるように)。 ARM DSPライブラリによって与えられた値と、MatLabで生成された値との間には、MatLab = 5.2のbin [0]、C = 131246のbin [0]の間にほとんど相関はありません。 (...編集を参照してください) 私はFFTの2つの異なるバージョンを試してみたと私は以下のそれらの両方が含まれます:ARM DSPライブラリとMatLabを使用してFFTを計算すると、結果が矛盾します
/* Carry out an FFT on the (correctly formatted) input data */
arm_cfft_f32(&arm_cfft_sR_f32_len1024, inputBuffer, IFFTFLAG, BRFLAG);
/* Calculate the complex magnitude of the FFT */
arm_cmplx_mag_f32(inputBuffer, outputBuffer, FFTSIZE);
非推奨コード:
arm_cfft_radix4_instance_f32 S;
arm_cfft_radix4_init_f32(&S, FFTSIZE, IFFTFLAG, BITREVERSEFLAG);
arm_cfft_radix4_f32(&S, inputBuffer);
arm_cmplx_mag_f32(inputBuffer, outputBuffer, FFTSIZE);
どちらの結果で同じ(間違った)値。 Cで行われた前処理はすべて正しく、私は配列FFTSIZE * 2の長さを以下のように配列します: Re [0]、Im [0]、Re [1]、Im [1]、...、Re [1023 ]、Im [1023]。
ご意見やご協力をいただければ幸いです。 :)
EDIT: 私はDCビン以外では、2つの計算の間の値が実際に相関していることを認識しました。 すなわち両方の計算のために、ビン47は最大値を有する(それは22.05kHzでサンプリングされた1kHzの正弦波であるので意味がある)。 ARM DSPライブラリがビンの出力を大きく拡大する理由は何ですか?
どのような問題がありますか? –
@OliverCharlesworth Cで生成されたすべての値は、私のmatlabスクリプトのものと比較して膨大です。最初の10ビンを例として挙げます。 bin [1] - 413.7、bin [2] - 410、bin [3] - 415、bin [4] - 408. Matlab:bin [0] - 5.2、bin [1] - 5.2、bin [2] - 5.3、bin [3] - 5.2、bin [4] - 5.3。 –
@OliverCharlesworth私は、DCビン以外の値が相関していることを認識しました(つまり、両方の計算ビン48が最大値です).Cのすべての結果のみが大幅にスケールアップされます。これを引き起こしている可能性がありますか? –