回答:
もちろん、固定小数点演算を使用して、整数サンプルに直接フィルターを適用できます。
たとえば、係数が[1 / 3、1、1 / 2]で、係数が8ビットの解像度のFIRフィルターを使用すると、出力は次のようになります。
out[n] = (85 * sample[n] + 256 * sample[n - 1] + 128 * sample[n - 2]) >> 8
次の2つの点に注意してください。
係数の量子化は、せいぜいフィルター応答のわずかな変化を引き起こす可能性があり、最悪の場合、フィルターを不安定にします。フィルタータイプとその係数の値は何ですか?
オーバーフロー/データ型/切り捨ての問題。上記の例では、outが16ビット整数の範囲を超える可能性があるため、クリッピングを行う必要があります。
一部のプロセッサでは、パイプラインの危険性がなくなるため、整数の大きな(ただしキャッシュ内の)ブロックを浮動小数点に変換してから処理する方が高速になる場合があります。これをベンチマークすることをお勧めします。
スケーリングされた整数または固定小数点演算を使用する場合、係数および中間値に必要な追加の整数精度の量は、サンプルレートと目的のカットオフ周波数の比率にほぼ比例します。16ビットサンプルで24、32、48ビット以上の精度の整数演算を使用して、希望の数値ノイズフロアレベルに下げる必要がある場合があります。一部のプロセッサ命令セット(ARM、MIPSなど)には、この目的のためだけに64ビットの累算演算が含まれている場合があります。