1

現在、cortex m3 PSoC 5lp チップで ARM CMSIS DSP ライブラリを使用しようとしています。
一部の関数を使用していくつかの問題に遭遇し、関数arm_cfft_q15(または関数のいずれかarm_cfft_***) の使用について質問があります。

私が持っていると言う

    q15_t ADC_samples[1024];
    q15_t MAG_of_fft[1024];

そして私は走る

    arm_cfft_q15(1024pt_fft, ADC_samples, sample_length);

これにより、「その場で」変換が行われます。そのため、FFT は実数値と虚数値の両方を返すため、実際には長さ 512 の fft しか返せないのでしょうか、それとも 1024 FFT サンプルの 512 でしょうか? FFTを取得した後、私は

    arm_cmplx_mag_q15(ADC_samples, MAG_of_fft, fftlength);

fftlength1024 はどこですか。

これが返さMAG_of_fftれ、プロットすると、実際に期待している形状のように見えますが、FFT の長さが正確にわからないため、結果を解釈する方法が正確にはわかりません。私は 1024pt FFT を実行していると言っていますが、512pt FFT のみ、または 1024pt FFT の半分のみを返しているようです。

それで、私はこれを正しく理解していますか?これはADC_samples、1024 pt の FFT を取得するには、配列がデータの 2 倍の長さでなければならないことを意味しますか? そして、FFTの長さが1024であることを伝えることで、その2048配列を使用してFFTの大きさを計算できますか?

これらの関数を適切に解釈する方法と、予想されるFFTの長さを誰かが説明してくれますか?

4

1 に答える 1

1

関数のarm_cfftファミリは、複素数値の信号で動作します。つまり、 で実行される 1024 ポイントの FFTarm_cfft_q15には、2048 の値で表される 1024 の複素数入力サンプルが必要です ( CMSIS DSP ソフトウェア ライブラリq15_tのドキュメントで説明されているように、インターリーブされた実数部と虚数部)。返されると、バッファーには、複素数入力信号の周波数ドメイン表現に対応する 1024 の複素数 (2048 値) が含まれます。q15_t

したがって、この例をあなたのケースに適応させると、次のように FFT を計算します。

q15_t ADC_samples[2048];
arm_cfft_q15(1024pt_fft, ADC_samples, 0, 1);

その後の呼び出し

q15_t MAG_of_fft[1024];
arm_cmplx_mag_q15(ADC_samples, MAG_of_fft, fftlength);

fftlength=1024次に、1024 の複素数値 (2048 のq15_t値)ADC_samplesを 1024 の実数値 (1024 の値) に縮小しq15_t、結果を に格納しMAG_of_fftます。

補足として、実際に実数値の信号を扱っている場合は、同じ関数を使用して、バッファーの 2 番目のインデックス (虚数部分)をゼロで埋めることができます (したがって、バッファーの 2 倍の大きさのバッファーを使用ます)。実サンプルの実際の数)。または、より効率的な関数ファミリーを使用することもできます (ドキュメントのこのセクションで説明されています)。ADC_samplesADC_samplesarm_rfft

于 2015-08-29T04:10:43.910 に答える