К сожалению, нет хорошего способа узнать фактический максимум сигнала, не пройдя выборку за выборкой и не найдя его.
Если вам известно количество бит в выборках PCM, вы можете предположить, чтомасштабирование будет ограничено [-2^(bits-1), 2^(bits-1)-1]
.Это будет абсолютный максимум и минимум сигнала.Однако это самое пессимистичное масштабирование - если у вас есть 16-битный сигнал, который никогда не выходит за пределы диапазона [-1024,1024]
, например, вы отказываетесь от большой области отображения (а также от динамического диапазона АЦП, но этодругая история).
Если вы хотите динамически масштабировать сигнал, вы можете просто увеличивать масштаб графика каждый раз, когда ваш сигнал будет обрезан.Более сложным подходом было бы увеличение масштаба по мере необходимости, но затем постепенное уменьшение максимальной шкалы с течением времени.Хороший способ ослабить максимальную шкалу - это экспоненциальный спад, например, умножить максимальную шкалу на 0,98 (или на другое число <1) на каждой итерации. </p>