ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
885551 Топик полностью
йцукен (29.11.2018 21:04 - 21:18, просмотров: 197) ответил Nikolay_Po на Да я, честное слово, не заглядывал в паспорта. Помню, что на самом дешёвом 100МГц-чипе Cortex-M4 от Микрочипа, память была серьёзным вопросом. Но там порядка 64к было.
Мы инженеры или где? Давайте возьмём логарифмическую линейку и посчитаем. IIR второго порядка, он же биквад, требует хранения 2 иксов, 2 игреков и 5 коэффициентов. Если у нас несколько одинаковых каналов, иксы и игреки у каждого свои, коэффициенты общие. Это тот минимум, которым можно обойтись, но фильтровать по одному отсчёту неэффективно. С другой стороны, увеличение размера блока больше нескольких десятков отсчётов ничего не даёт, только транжирит память и делает фильтр менее реалтаймовым. Если мы фильтруем звук с частотой дискретизации 48 кГц, можно от балды взять размер блока 48, тогда у нас будет 50 иксов (48 + 2, которые нужно сохранять между вызовами функции фильтрации), 50 игреков и 5 коэффициентов, или 420 байт, если считать в флоатах. Если у нас цепочка биквадов, следующему фильтру иксы не нужны, потому что его иксы - игреки предыдущего. Короче, дофига биквадов можно в 64к натолкать, скорее скорость (no pun intended) будет лимитировать. Только что сообразил, что если входные и промежуточные значения больше не нужны, можно затирать иксы игреками, и всей цепочке нужен всего один буфер, плюс 2 икса и 2 игрека на биквад. Тогда 64к - это не много, а очень много.