1

私は16チャンネルのオーディオミキサーをやっています。各チャネルは符号付きハーフワード (短い) であり、それらを加算してから 16 で割り、結果が符号付きハーフワードになるようにしたいと考えています。兆候が保持されるようにこれを行う方法について頭を悩ませているようには見えません。0x4fff と 0x6fff を追加すると、結果は負になりますが、負のハーフワードではなく、32 ビット ワードで正の値にする必要があります。ここでは符号拡張を使用する必要があると確信していますが、提案は大歓迎です。各入力値を 1/16 にスケーリングしてから追加してみましたが、それは機能しますが、各チャネルが 12 ビットに縮小されるため、解像度が失われます

すべてのチャネルを追加し、追加する前にそれらを符号拡張してから、追加された結果を符号拡張し、続いて asr #4 シフトして 16 ビットの結果に戻すとします。それはうまくいくでしょうか?

4

1 に答える 1

2

2つの値がロードされて追加されると、結果はすでに32ビットレジスタ内にあります。除算に算術シフトを使用すると、最終結果の符号が保持されます。ldrsh負の値を32ビットに符号拡張します。


ldrsh r0, [r2], #4
ldrsh r1, [r2], #4
add r0, r0, r1
mov r0, r0, asr #4

またはそれに似たもの。最後のシフトは、別のオペコードと非常に簡単に組み合わせることができます。

于 2012-06-11T21:55:54.500 に答える