[an error occurred while processing this directive]
|
Ваш сигнал имеет вариацию: 2^13 плюс-минус 20. После умножения на 32 получается 2^18 плюс-минус 640. Допустим, что поступившее значение нулевого отсчета входного сигнала, будучи умноженным на 32 равно
x[0] = 2^18.
Теперь пропустим его через фильтр, полагая, что линия задержки фильтра была перед экспериментом обнулена, т.е.
x[-1] = 0, y[-1] = 0.
Вычислим теперь y[1], полагая для удобства, что 131071 приближенно равно (с точностью до 1) 2^17:
y[0] = 117340*y[-1] + 131071*(x[0] - x[-1]) =
~= 117340*0 + (2^17)*(2^18 - 0) = 2^35.
Вот тут-то возникает первый вопрос: а уверены ли Вы, что делаете правильно округление и что симулинк не отсекает все, что выше 2^31-1?
У меня создается впечатление после описания, которое Вы дали мне в последнем посте, что дело обстоит именно таким образом. Отсечение - ни что иное, как нелинейность, которая производит шумы во всей полосе.
Та же "петрушка" произойдет в двойном экземпляре на втором шаге при вычислении y[1].
Чтобы проверить эту гипотезу, подайте на Ваш фильтр короткий сигнал в виде ступеньки амплитуды 2^18 (десяти отсчетов вполне хватит, чтобы увидеть, что происходит) и посмотрите на выходные значения. Если нулевой выходной отсчет равен 2^31-1, то имеет место именно та проблема, о которой я написал.