Сергей Борщ 143 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Приветствую всех. Просьба сильно не пинать, верхнюю математику прогулял 18 лет назад (жалею). Строю КИХ-фильтр по The Scientist and Engineer's Guide to Digital Signal Processing. Задал АЧХ(фаза = 0), сделал обратное ДПФ (получил коэфф. с мнимой частью = 0), далее сдвигаю полученные отсчеты для получения импульсной характеристики. Согласно свойствам ПФ из той же книги после сдвига отсчетов (чтобы нулевой отсчет попал в центр ИХ) фаза должна остаться нулевой, у меня же она нулевой ну никак не получается. Провожу примитивный эксперимент: создаю массив с треугольным импульсом из пяти отсчетов, делаю ДПФ - результат тот же: --> a = [ 1 2 3 4 3 2 1] a = 1. 2. 3. 4. 3. 2. 1. -->dft(a,1) ans = 2.2857143 - 0.6498453 + 0.3129490i 0.0274316 - 0.0343982i - 0.0204434 + 0.0895686i - 0.0204434 - 0.0895686i 0.0274316 + 0.0343982i - 0.6498453 - 0.3129490i Просто тупо повторяю описанное в книге: единичный первый отсчет - все как по книге, фаза = 0: --> a = [1 0 0 0 0 0 0]; dft(a,1) ans = 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571 Сдвигаю этот отсчет в центр - никакого намека на нулевую фазу. Причем числа такие, что на ошибки округления не похожи: --> a = [0 0 0 1 0 0 0]; dft(a,1) ans = 0.1428571 - 0.1287098 + 0.0619834i 0.0890700 - 0.1116902i - 0.0317887 + 0.1392754i - 0.0317887 - 0.1392754i 0.0890700 + 0.1116902i - 0.1287098 - 0.0619834i Ну тут фаза хоть линейна. А если сделать выборку вот такой, то от линейности фазы не остается и следа: --> a = [0 0 1 0 1 0 0]; dft(a,1) ans = 0.2857143 - 0.1604985 + 0.0772920i - 0.0396399 + 0.0497068i 0.0572813 - 0.2509656i 0.0572813 + 0.2509656i - 0.0396399 - 0.0497068i - 0.1604985 - 0.0772920i В чем я ошибаюсь, почему фаза ведет себя так странно? P.S. Считаю в SciLab, программа в double на C дает те же результаты. Еще вопрос: Для повышения разрешения ДПФ выборка с одной стороны дополняется нулевыми отсчетами. Правильно ли я понимаю, что при этом информация о фазе искажается? Почему в таком случае выборка не дополняется нулевыми отсчетами равномерно с обоих сторон? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба Некоторые соображения: ДПФ предполагает, что сигнал периодический. Вы берете ДПФ от последовательности треугольных импульсов. Это не эквивалентно Фурье-преобразованию одиночного импульса. Один отсчет - аналог дельта-функции, ее амплитудный спектр постоянен, а фазовый 0. В последних Ваших вариантах у Вас разные последовательности (периодические). Могу порекомендовать посмотреть книгу "Цифровая обработка сигналов" А.Б. Сергиенко (в сети была). Книга ориентирована на MATLAB, но это не принципиально. Надеюсь, что многие вопросы и неясности исчезнут. Есть форум по MATLAB на www.exponenta.ru. В MATLAB есть toolbox для разработки фильтров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба ДПФ предполагает, что сигнал периодический. Вы берете ДПФ от последовательности треугольных импульсов. Это не эквивалентно Фурье-преобразованию одиночного импульса.Естественно. Одиночный импульс имеет бесконечный периодический спектр. И наоборот. Могу порекомендовать посмотреть книгу "Цифровая обработка сигналов" А.Б. Сергиенко (в сети была).Есть она у меня. Вот из нее цитата: Очень важное значение имеет тот факт, что нерекурсивные фильтры позволяют легко обеспечить линейную ФЧХ[...]. Для этого необходима лишь симметрия импульсной характеристикиТак вот если 0 0 1 0 1 0 0 принять за импульсную характеристику, то она симметрична, а линейности ФЧХ я не наблюдаю. В MATLAB есть toolbox для разработки фильтров.Матлаба у меня нет, осваиваю бесплатный похожий на него SciLab. В нем тоже есть кое-что для фильтров. К тому же я хочу понять, как все это работает. По книгам все кажется достаточно простым, "а включаешь - не работет". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 16 июля, 2009 Опубликовано 16 июля, 2009 · Жалоба ... Одиночный импульс имеет бесконечный периодический спектр.... Для Фурье-преобразования аналоговых сигналов: Одиночный импульс имеет непрерывную спектральную плотность (на всей частотной оси), но не периодическую. Периодический сигнал имеет спектр, определенный на всей частотной оси, но дискретный по виду и непериодический. Матлаба у меня нет, осваиваю бесплатный похожий на него SciLab. В нем тоже есть кое-что для фильтров. К тому же я хочу понять, как все это работает. По книгам все кажется достаточно простым, "а включаешь - не работет". Могу порекомендовать ешё одну бесплатную программу maxima и её графический интерфейс под X xmaxima. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 июля, 2009 Опубликовано 17 июля, 2009 · Жалоба не совсем понимаю как вы смотрите фазу a = [ 1 2 3 4 3 2 1]; ifft(a); fvtool(a, 1) дает FIR с линейной фазой PS. неужели в SciLab нет функций синтеза фильтров по требуемой АЧХ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 17 июля, 2009 Опубликовано 17 июля, 2009 · Жалоба не совсем понимаю как вы смотрите фазу function [y]=angle(x) y = atan( imag(x), real(x) ); endfunction; а дальше самописный аналог unwrap(). Собственно в нем и была ошибка. Спасибо за вашу картинку, помогла. PS. неужели в SciLab нет функций синтеза фильтров по требуемой АЧХ?Возможно и есть, но я их пока не нашел, да и сам хочу разобраться в этой кухне. Еще один вопрос. Допустим, у меня есть импульсная характеристика из четырех точек. Я делаю ДПФ (или БПФ) и получаю 4 отсчета частотной характеристики: DC, Fs/4, Fs/2, -Fs/4. Но для фильтра с линейной фазой мне нужна ИХ с нечетным количеством отсчетов, чтобы один из них был средним, относительно которого и происходит симметрия. В этом случае после ДПФ я получу 5 отсчетов ЧХ. Правильно ли я понимаю, что они будут соответствовать частотам DC, Fs/5, 2Fs/5, -2Fs/5, -Fs/5, т.е. отсчета, соответствующего частоте Найквиста тут нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 18 июля, 2009 Опубликовано 18 июля, 2009 · Жалоба Но для фильтра с линейной фазой мне нужна ИХ с нечетным количеством отсчетов Не обязательно. КИХ с симметричными вещественными коэффициентами есть фильтры с линейной фазой. Причем симметрия может быть как b(n)=b(N-1-n) так и b(n)=-b(N-1-n) (при счете с нуля и всего коэффициентов N). Будет лишь изменяться тип АЧХ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться