4

LCD ディスプレイに出力する 8 ビット Atmega32 用のスペクトラム アナライザを開発しています。最大サンプリング周波数は 40kHz であるため、最大周波数は fs > 2B に準拠して 20kHz です。現在、内部で信号を生成してから、この信号に FFT を適用し、LCD でスペクトルを表示しています。

これは疑似コードで書かれていることに注意してください。

 #define SIG_N 128 //Number of samples in signal buffer
 #define FFT_N 64  //2*Output bins 
 uint_8 signal[SIG_N];
 uint_8 spektrum[FFT_N];

 for (int i = 0; i < SIG_N; i++){
   signal[i] = 255*sin(2*3.14*f*i / SIG_N);
 }
 computeFFT(signal,spektrum,FFT_N); //arbitrary method computes signal outputs spektrum

現在、出力スペクトルには FFT_N/2 = 32 個のビンがあり、それぞれが 1Hz を表しています。したがって、私のスペクトルが現在表している最高周波数 (私はこれをテストしました) - 32Hz. 各ビンが 625Hz を表すように、これらのビンの「周波数幅」を増やすにはどうすればよいですか? メモリの制限があるため、FFT_N のサイズを 64 ~ 128 を超えて増やすことはできません。

4

2 に答える 2

15

Fs各ビンの幅 (Hz) は、サンプル レート(Hz) と FFT ビンの数 N の2 つの要素に依存します。

bin_width = Fs / N;

したがって、でサンプリングしFs = 40 kHzN = 64FFT にビンがある場合、各ビンの幅は 625 Hz になります。対象のビンは、0 から N / 2 - 1 のビンになります。

Bin 0        0 Hz
Bin 1      625 Hz
Bin 2     1250 Hz
...
Bin 31  19,375 Hz
于 2012-05-25T12:43:48.577 に答える