| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Цифровой полосовой фильтр |
| Автор: svip 13.10.2008, 20:04 |
| Есть сигнал 20Гц - 50 КГц из него нужно отфильтровать полосу шириной 5 Гц (то есть 25-30Гц или 101-106Гц и тд.) Значения амплитуды сигнала лежат в массиве. Читал что нужно выполнить прямое преобразование Фурье, потом что-то как-то сделать, потом выполнить обратное преобразование фурье. Но вот что-то ничего толком непонятно. Может у кого есть пример фильтра полосового??? или кто-то может понятно "на пальцах" с примерами объяснить. Буду очень благодарен, потому что уже пропло чувство, что наконец то смогу сделать этот фильтр. |
| Автор: svip 16.10.2008, 18:35 |
| народ помогите. |
| Автор: Alexeis 16.10.2008, 19:27 |
| svip, прямой фурье дает комплексный спектр. т.е. комплексные амплитуды частот. Из спектра удаляются все частоты, т.е. зануляются соответствующие элементы массивов Re и Im, потом над Re и Im массивами производиться обратное преобразование фурье, вот и вся задача. У меня есть готовое решение, но каждый раз забываю. Стукни днем в асю, напомни |
| Автор: Alexeis 17.10.2008, 10:15 | ||
| Приатачиваю фильтр, но там не быстрый фурье, а простой при том с плавающей точкой. Так чтобы только понять принцип. Между стрелочками область которая удаляется из спектра, розовым рисуется исходный сигнал, зеленым полученный после фильртации. Также выкладываю целочисленный БПФ на 1024 точки "Бабочка".
Если что есть и рекурсивный фильтр, он быстрее работает. |
| Автор: svip 21.10.2008, 12:59 |
| Отлично то что нужно. буду разбираться, но сразу два вопроса, что за время меряется при клике на кнопку test, и в каких частотных пределах все это работает. |
| Автор: svip 23.10.2008, 21:16 |
| Тут просто массив, если его воспроизводить с разной скоростью, то частота будет меняться. А как воспроизводить с разной скоростью?? Самая крайняя комплексная амплитуда соответствует половине частоты дискретизации, крайняя слева частоте волны, которая укладывается целиком в интервал над которым производиться фурье, т.е. будет зависеть от количества точек фурье. А тут вообще не понял. |
| Автор: svip 23.10.2008, 22:07 |
| И вот тоже не могу разобраться 40 * Sin(2 * pi / 100 * x) тут 40- амплитуда, x- время (допустим в секундах) 1/100 - частота, только вот в чем??? и как определить частоту фильтрации, получается есть использовать формулу 40 * Sin(2 * pi / 10 * x) то пик амплитуды АЧХ лежит между SpeedButton1.left=2 и SpeedButton2.left=3 каксвязать с частотой??? чтобы у АЧХ проградуировать шкалу частот. |
| Автор: Alexeis 23.10.2008, 23:08 | ||
Ну как, задать частоту выборок звуковой карте, она соответственно будет ее выдерживать. например 8000 выборок в секунду или 44100, тон будет разным. Спектр видел? Это ж массив значений. Рабочим является первая половина массива. Нулевой элемент амплитуда нулевой частоты, т.е. постоянная составляющая. Частота первого элемента спектра это величина обратная длительности всего участка (например 1024 точек) т.е. 1/T. Второго элемента 2/T, третьего 3/T т.д. В середине массива длительность 2х выборок, т.е. половина частоты дискретизации. Для 44100 это будет 22050Гц. Советую немного почитать по дискретному фурье, мож яснее станет. |