Перейти к содержанию
    

Синтез КИХ. Непонятки с фазой

Приветствую всех. Просьба сильно не пинать, верхнюю математику прогулял 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 дает те же результаты.

 

Еще вопрос: Для повышения разрешения ДПФ выборка с одной стороны дополняется нулевыми отсчетами. Правильно ли я понимаю, что при этом информация о фазе искажается? Почему в таком случае выборка не дополняется нулевыми отсчетами равномерно с обоих сторон?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Некоторые соображения:

ДПФ предполагает, что сигнал периодический. Вы берете ДПФ от последовательности треугольных импульсов. Это не эквивалентно Фурье-преобразованию одиночного импульса.

Один отсчет - аналог дельта-функции, ее амплитудный спектр постоянен, а фазовый 0.

В последних Ваших вариантах у Вас разные последовательности (периодические).

 

Могу порекомендовать посмотреть книгу "Цифровая обработка сигналов" А.Б. Сергиенко (в сети была). Книга ориентирована на MATLAB, но это не принципиально. Надеюсь, что многие вопросы и неясности исчезнут.

 

Есть форум по MATLAB на www.exponenta.ru.

В MATLAB есть toolbox для разработки фильтров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ДПФ предполагает, что сигнал периодический. Вы берете ДПФ от последовательности треугольных импульсов. Это не эквивалентно Фурье-преобразованию одиночного импульса.
Естественно. Одиночный импульс имеет бесконечный периодический спектр. И наоборот.
Могу порекомендовать посмотреть книгу "Цифровая обработка сигналов" А.Б. Сергиенко (в сети была).
Есть она у меня. Вот из нее цитата:
Очень важное значение имеет тот факт, что нерекурсивные фильтры позволяют легко обеспечить линейную ФЧХ[...]. Для этого необходима лишь симметрия импульсной характеристики
Так вот если 0 0 1 0 1 0 0 принять за импульсную характеристику, то она симметрична, а линейности ФЧХ я не наблюдаю.

 

В MATLAB есть toolbox для разработки фильтров.
Матлаба у меня нет, осваиваю бесплатный похожий на него SciLab. В нем тоже есть кое-что для фильтров. К тому же я хочу понять, как все это работает. По книгам все кажется достаточно простым, "а включаешь - не работет".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... Одиночный импульс имеет бесконечный периодический спектр....

Для Фурье-преобразования аналоговых сигналов:

Одиночный импульс имеет непрерывную спектральную плотность (на всей частотной оси), но не периодическую.

Периодический сигнал имеет спектр, определенный на всей частотной оси, но дискретный по виду и непериодический.

 

Матлаба у меня нет, осваиваю бесплатный похожий на него SciLab. В нем тоже есть кое-что для фильтров. К тому же я хочу понять, как все это работает. По книгам все кажется достаточно простым, "а включаешь - не работет".

Могу порекомендовать ешё одну бесплатную программу maxima и её графический интерфейс под X xmaxima.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не совсем понимаю как вы смотрите фазу

 

a = [ 1 2 3 4 3 2 1];
ifft(a);
fvtool(a, 1)

 

дает FIR с линейной фазой

 

PS. неужели в SciLab нет функций синтеза фильтров по требуемой АЧХ?

post-3453-1247800969_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не совсем понимаю как вы смотрите фазу
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, т.е. отсчета, соответствующего частоте Найквиста тут нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но для фильтра с линейной фазой мне нужна ИХ с нечетным количеством отсчетов

 

Не обязательно.

КИХ с симметричными вещественными коэффициентами есть фильтры с линейной фазой.

Причем симметрия может быть как b(n)=b(N-1-n) так и b(n)=-b(N-1-n) (при счете с нуля и всего коэффициентов N).

Будет лишь изменяться тип АЧХ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...