short int(16ビットPCM)サンプルのローパスフィルタリング


9

16ビットPCMサンプルとして与えられたオーディオを処理するソフトウェアを書いています。処理の最初の段階では、特定の周波数範囲(特定のカットオフ周波数より上)のエネルギー(または総変動)を計算します。

私が現在行っていることは、元の信号のエネルギーからローパスフィルター処理された信号のエネルギーを差し引くことです。多くの処理が整数サンペルを浮動小数点表現に変換することに専念していることがわかりました。

だから私の質問は、整数サンプルを浮動小数点に変換せずにフィルタリングするための技術はありますか?

回答:


6

もちろん、固定小数点演算を使用して、整数サンプルに直接フィルターを適用できます。

たとえば、係数が[1 / 3、1、1 / 2]で、係数が8ビットの解像度のFIRフィルターを使用すると、出力は次のようになります。

out[n] = (85 * sample[n] + 256 * sample[n - 1] + 128 * sample[n - 2]) >> 8

次の2つの点に注意してください。

  • 係数の量子化は、せいぜいフィルター応答のわずかな変化を引き起こす可能性があり、最悪の場合、フィルターを不安定にします。フィルタータイプとその係数の値は何ですか?

  • オーバーフロー/データ型/切り捨ての問題。上記の例では、outが16ビット整数の範囲を超える可能性があるため、クリッピングを行う必要があります。


2
sample [n-1]は256倍する必要があると思います。そうでない場合、それは効果的で重み付けされているの代わりに、。 112561
Jason R

あなたは正しい、編集されました!
ピシェネット2012

3
@pichenettes量子化された値に到達した方法、符号付きか符号なしかなどを説明するのに良いかもしれません。あなた次第です。
ジム・クレイ

3

一部のプロセッサでは、パイプラインの危険性がなくなるため、整数の大きな(ただしキャッシュ内の)ブロックを浮動小数点に変換してから処理する方が高速になる場合があります。これをベンチマークすることをお勧めします。

スケーリングされた整数または固定小数点演算を使用する場合、係数および中間値に必要な追加の整数精度の量は、サンプルレートと目的のカットオフ周波数の比率にほぼ比例します。16ビットサンプルで24、32、48ビット以上の精度の整数演算を使用して、希望の数値ノイズフロアレベルに下げる必要がある場合があります。一部のプロセッサ命令セット(ARM、MIPSなど)には、この目的のためだけに64ビットの累算演算が含まれている場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.