Программирование фильтра низких частот -

Я запрограммировал эмулятор Sega Master System на Java (, хотя этот вопрос не относится к Java ), и закончил все, кроме звукового чипа SN76489. Как этот чип издает звук достаточно просто -проблема, с которой я столкнулся, заключается в преобразовании его в форму, которую можно воспроизвести на ПК/ноутбуке/независимо от того, на чем работает JVM.

Я определил шаги следующим образом;

Поскольку SN76489 работает с частотой дискретизации примерно 221 кГц -, это означает, что волны, которые он выдает, имеют частоту до 110 кГц (, хотя на практике я сомневаюсь, что что-либо когда-либо достигает такой высокой частоты ). Поэтому мне нужно реализовать фильтр нижних частот -, прежде чем я буду понижать его дискретизацию.

Затем я хочу понизить его до 44,1 кГц, чтобы я мог выводить его через аудиолинию (, в моем случае — линию исходных данных Java ).

Для этого мне нужно установить фильтр нижних частот -на 22,05 кГц, но проблема в том, что я понятия не имею (с математической точки зрения ), как на самом деле работает фильтр нижних частот -. Мне нужно это, чтобы иметь возможность написать один.

В настоящее время мой звуковой чип создает 0,2-секундный буфер и сохраняет в нем сэмплы на частоте 221 кГц, как упоминалось выше. Я могу понижать частоту дискретизации, как я понимаю -, но если я понижаю частоту дискретизации без применения низкочастотного -фильтра, я понимаю, что потенциально могу получить сбои наложения в результирующем звуковом потоке.

Может ли кто-нибудь порекомендовать простейший алгоритм с математическим мышлением для выполнения этого -Я понимаю, что из-за задействованных переменных низкий -проход никогда не бывает «точным», но мне просто нужно разумное объяснение, достаточно упрощенное для понимания. мой мозг (, который до сих пор не имел дела с обработкой волн ), чтобы понять.

Если это поможет, уточните :SN76489 одновременно выводит три прямоугольных сигнала и один шумовой канал. Они суммируются и выводятся на микшер/усилитель -. На этом этапе цепочки я хочу запустить фильтр низких частот -до того, как понизить дискретизацию, а затем усилить волну. Любая помощь, которую люди могут дать мне, очень ценится. Я понимаю, что требуется фоновое чтение, но я хочу знать, «что» мне нужно прочитать. Большое спасибо.

ОБНОВЛЕНИЕ:В конце концов я придумал более простой подход -, но все еще не совсем готовый. SN76489 работает, генерируя каждый тональный канал из значения регистра -, выводится полярность 1, значение уменьшается и так далее -, пока значение не станет 0, затем значение сбрасывается и полярность переключается на -. ] 1 и так далее. Затем это значение умножается на громкость, чтобы получить окончательную амплитуду для этого семпла, и суммируется с другими каналами.

Теперь я просто предотвращаю создание значения регистра, которое создаст прямоугольную волну выше предела Найквиста, который мне требуется. Это дает мне намного лучший сигнал, но в нем все еще есть некоторое гудение / треск -, не знаю почему, поскольку максимально возможная частота должна быть 18 473 Гц. Может быть, это треск/жужжание связано с тем, что, когда микросхема переключает канал с одной частоты на другую, она не позволяет полностью завершить форму текущей волны? Например, чип выдает 1111, затем 00 -вместо полных четырех нулей и переключается на новую частоту -, это может привести к наложению частот, не так ли?

7
задан PhilPotter1987 19 April 2012 в 09:46
поделиться