スペアナの見栄えを改善

ベースレベルがかなりバタつくので、平均化処理を入れてみた

やっていることは、過去の平均値の重み付け0.9、最新の計算値の重み付け0.1で加算していくだけ、ベースレベルが暴れなくなるので視覚上の効果は結構大きい改善、スペアナ的になるという意味でね

	/* 5. 平均化と実効値計算(振幅スペクトル : db) */
	for (uint32_t i = 0; i < FFT_LEN / 2; i++) {
		float32_t real = fft_out[2 * i];
		float32_t imag = fft_out[2 * i + 1];
		cur[i] = (real * real + imag * imag) * HANN_GAIN_CORRECTION + 1e-12f;
		// averaging
		if (first) {
			fft_ave[i] = cur[i];
		} else {
			fft_ave[i] = fft_ave[i] * 0.9f + cur[i] * 0.1f;
		}
		fft_rms[i] = (int16_t) (10.0f * log10f(fft_ave[i]));
	}
	first = false;	// to set first flag to false

<写真>

<条件>

以前の記事と変わらずですが、

・入力は5KHzのduty50%のPWM

・ADCサンプリング周波数 200KHzで一次IIRフィルタ(cut off 20KHz)処理後に1/5 decimation

・Hann windows処理

・FFT実行後に平均化処理後に対数スケール変換

 

admin

 

コメントを残す