Статей много, каждая о какой-то части данной статьи пишет гораздо более развёрнуто и зачастую гораздо более научным языком с кучей математики. А вот обзорной статьи, в которой бы на пальцах были объяснены основные принципы и обозначены темы для изучения я так и не нашёл. Самое близкое к этому — статья Тараса Ковриженко про нормализацию громкости.
Со знаком бесконечности как раз вопросов возникнет больше чем ответов — до этого речь идёт о каком-то конечном сигнале и тут вдруг возникает бесконечность. Откуда, почему? Если требуется бесконечное количество отсчётов, как в таком случае восстанавливать конечный сигнал? Вообще оцифровка сигнала и восстановление сигнала — это темы для двух больших отдельных статей, если не книг.
В данной конкретной реализации используется биквадратный фильтр. Он как я понял относится к фильтрам БИХ (с бесконечной импульсной характеристикой). Работает примерно также.
Берётся 2 последних отсчёта входного сигнала, 2 последних отсчёта выходного сигнала и текущий сигнал. Они умножаются на коэффициенты и складываются.
Насчёт «достаточно было написать формулу для восстановления» — совершенно не достаточно. Сколько бы человек её поняло? Для большинства это просто набор математических символов. Я специально исключил практически всю математику из статьи и даже не пытался описывать некоторые детали — это сделало бы статью в разы больше и непонятнее. Плюс к тому я вроде нигде не забыл оставить ссылки на более содержательные и подробные статьи по каждой сложной теме.
Насчёт «повторения плохого изложения» — если бы было что повторять, этой статьи вообще бы не было. Но чтобы собрать материалы у меня ушло около недели поисков по интернету и вдумчивого чтения далеко не адаптированного для обывателей материала.
Насчёт фильтров каюсь — сам не разобрался до конца в теме, перепишу этот блок. Спасибо за пояснение про то откуда берётся фазовый сдвиг.
Про Web Audio API скорее всего будет отдельная статья.
Используя webaudioplayground.appspot.com (спасибо dtestyk) Воспроизвёл поведение данного фильтра:
Создаём такую схему: Oscillator node -> Biquad filter (lowpass, Q=15, freq=5000) -> Analyzer -> выход
Запускаем воспроизведение в oscilator'е и меняем частоту. В районе 5000 Hz отчётливо слышно и видно резкое усиление звука.
Так что данные графики отображают действительную картину того, как работает фильтр lowpass в web audio api.
И да, стоит добавить, что если говорить о цифровом сигнале, что точно восстановить из него аналоговый может не получиться даже, если частота дискретизации выше частоты Найквиста, т.к. есть ещё искажения сигнала связанные с его квантованием по уровню. Однако, нижняя граница частоты дискретизации всё равно не меняется.
Да, по первому пункту согласен, скорее всего в процессе редактирования напортачил, сейчас поправлю.
Насчёт второго пункта — серая полоса на графика показывает сигнал с уровнем 1. И я тоже считал, что эти фильтры не должны вызывать усиления сигнала, однако именно такой график получается, если брать информацию из BiquadFilterNode#getFrequencyResponse. Либо это ошибка в реализации данной функции, либо сам фильтр действительно так устроен, тестов пока не проводил. Вообще этот график сильно похож на график групповой задержки для фильтра Баттерворта (https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%91%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%B2%D0%BE%D1%80%D1%82%D0%B0)
Со знаком бесконечности как раз вопросов возникнет больше чем ответов — до этого речь идёт о каком-то конечном сигнале и тут вдруг возникает бесконечность. Откуда, почему? Если требуется бесконечное количество отсчётов, как в таком случае восстанавливать конечный сигнал? Вообще оцифровка сигнала и восстановление сигнала — это темы для двух больших отдельных статей, если не книг.
В данной конкретной реализации используется биквадратный фильтр. Он как я понял относится к фильтрам БИХ (с бесконечной импульсной характеристикой). Работает примерно также.
Берётся 2 последних отсчёта входного сигнала, 2 последних отсчёта выходного сигнала и текущий сигнал. Они умножаются на коэффициенты и складываются.
Насчёт «повторения плохого изложения» — если бы было что повторять, этой статьи вообще бы не было. Но чтобы собрать материалы у меня ушло около недели поисков по интернету и вдумчивого чтения далеко не адаптированного для обывателей материала.
Насчёт фильтров каюсь — сам не разобрался до конца в теме, перепишу этот блок. Спасибо за пояснение про то откуда берётся фазовый сдвиг.
Про Web Audio API скорее всего будет отдельная статья.
Создаём такую схему: Oscillator node -> Biquad filter (lowpass, Q=15, freq=5000) -> Analyzer -> выход
Запускаем воспроизведение в oscilator'е и меняем частоту. В районе 5000 Hz отчётливо слышно и видно резкое усиление звука.
Так что данные графики отображают действительную картину того, как работает фильтр lowpass в web audio api.
Насчёт второго пункта — серая полоса на графика показывает сигнал с уровнем 1. И я тоже считал, что эти фильтры не должны вызывать усиления сигнала, однако именно такой график получается, если брать информацию из BiquadFilterNode#getFrequencyResponse. Либо это ошибка в реализации данной функции, либо сам фильтр действительно так устроен, тестов пока не проводил. Вообще этот график сильно похож на график групповой задержки для фильтра Баттерворта (https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%91%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%B2%D0%BE%D1%80%D1%82%D0%B0)