Часть 2'complement выглядит так, как будто она должна работать, но она неоправданно сложна, поскольку обычные целые числа представлены с использованием 2'complement (если только вы не используете очень экзотическое оборудование).Вы можете просто сделать это вместо этого:
signed int signedInputVal = (signed int)inputVal;
signedInputVal >>= 14;
Это даст вам значение в диапазоне - (2 ^ 17) - (2 ^ 17-1).
Похоже, всеваши значения выборки близки к -6800, поэтому я предполагаю, что это смещение, которое необходимо учитывать.
(сюда не входит RMS-часть, которая появляется после того, как у вас есть правильные целочисленные значения со знаком)