Расчет КИХ фильтра методом частотной выборки

Все что касается фильтрации
eiyawii
Сообщения: 60
Зарегистрирован: 20 окт 2011, 07:38

Расчет КИХ фильтра методом частотной выборки

Сообщение eiyawii »

В данной статье ( http://www.dsplib.ru/content/filters/fir/fir.html ) очень подробно рассмотрен расчет КИХ фильтров, тем не менее некоторые вещи я упускаю из виду и у меня получается результат не как в статье.

Импульсная характеристика получается не симметричная, что как бы говорит о том, что ошибка в дискретизации ФЧХ, и коэффициенты имеют большую мнимую часть (сотые) - значит и выборка АЧХ сделана неверно?

Вообще алгоритм, как я понял, такой:
1. задаем АЧХ (из условия)
2. задаем ФЧХ (по формуле 13, 14)
3. считаем комплексный коэффициент передачи по формуле 15
4. получаем коэффициенты фильтра через ОДПФ (формула 16)
верно?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение Бахурин Сергей »

именно так. Проверьте ваши расчетные функции по приведнному примеру (таблицы в статье) если что-то расходится - ищите ошибку.

eiyawii
Сообщения: 60
Зарегистрирован: 20 окт 2011, 07:38

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение eiyawii »

Изображение

Изображение

картинки АЧХ и ФЧХ

По таблице сходятся первые 4 компл коэффициента передачи, потом нули, последние 3 коэф - не сходятся. Всего 16 коэф, ФЧХ по формуле 13 считаю.

На всякий случай вот код для функции АЧХ и ФЧХ

Код: Выделить всё

for i in range(0,N):
        if xx[i]<(2*pi/N)*4 or xx[i]>(2*pi/N)*12:
            y.append(1)
        else:
            y.append(0)

Код: Выделить всё

    for i in range(0, N/2):
        y.append(-1*((N-1)/float(N))*pi*i)
    for i in range(N/2, N):
        y.append(-1*((N-1)*(i-N)/N)*pi)

eiyawii
Сообщения: 60
Зарегистрирован: 20 окт 2011, 07:38

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение eiyawii »

так, ошибку нашел.
Ошибка в коде

Код: Выделить всё

    for i in range(0, N/2):
        y.append(-1*((N-1)/float(N))*pi*i)
    for i in range(N/2, N):
        y.append(-1*((N-1)*(i-N)/N)*pi)
-1*((N-1)*(i-N)/N)*pi - в этом выражении при делении остаток отбрасывался, так как используются целые числа, просто надо во float перевести какое-нибудь число. Теперь всё симметрично.

По поводу подавления эффекта Гиббса.

Во-первых в некоторой литературе, где объясняется метод частотной выборки, напрочь отсутствует какое-либо упоминание об этом эффекте, хотя и говорят что функция между отсчетами ведет себя не подобающе и даже дают описание как она ведет (например, книга Сергиенко А. Б.). Почему не говорят об эффекте Гиббса?

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

ivan219
Сообщения: 61
Зарегистрирован: 09 май 2011, 16:39

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение ivan219 »

Боюсь ошибиться но возможно нужно сделать так:
Сначала сложить все коэффициенты ИХ поделить на N. Вывести средние значение, а потом поделить все коэффициенты на среднее значение.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение Бахурин Сергей »

eiyawii писал(а): Как теперь избавиться от эффекта Гиббса с помощью окна? В Вашей статье указано что необходимо перемножить импульсные характеристики фильтра и окна, но тогда нормировка изменится.
Почему измениться? Все нормально будет
вот пример в матлабе без окна (синие графики) и с окном (красные)

Код: Выделить всё

dt = 0.25;
t = -5:dt:5;
h0 = sinc(t)*dt;
hw = h.*hamming(length(h))';


H0 = 20*log10(fftshift(abs(fft([h0 zeros(1,1000)]))));
HW = 20*log10(fftshift(abs(fft([hw zeros(1,1000)]))));
freq = (0:length(H0)-1)/length(H0) - 0.5;
figure; plot(freq, H0, freq, HW, 'r'); grid on;
figure; plot(t,h0,t,hw,'r'); grid on;
h.png
h.png (7.91 КБ) 13155 просмотров
freq.png
freq.png (8.75 КБ) 13155 просмотров

eiyawii
Сообщения: 60
Зарегистрирован: 20 окт 2011, 07:38

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение eiyawii »

всё получилось.
Спасибо большое, Сергей.

1. А есть ли способы как-то по другому устранять колебания Гиббса? После применения окна в полосе пропускания всё-таки незначительные колебания остаются.

2. И еще такой вопрос: в статье написано, что "Важно отметить, что точкой пересечения АЧХ при использовании оконного сглаживания и без него является точка по уровню -6 дБ" - почему так?

3. Как рассчитать коэффициент расширения у оконной функции?

4. Можно ли методом частотной выборки синтезировать ПФ, ФВЧ ? и как в этом случае рассчитывать фазовую характеристику?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение Бахурин Сергей »

eiyawii писал(а): 1. А есть ли способы как-то по другому устранять колебания Гиббса? После применения окна в полосе пропускания всё-таки незначительные колебания остаются.
Для фильтра с конечной импульсной характеристикой колебания будут все равно вы лишь можете регулировать их но устранить не можете никогда.
eiyawii писал(а): 2. И еще такой вопрос: в статье написано, что "Важно отметить, что точкой пересечения АЧХ при использовании оконного сглаживания и без него является точка по уровню -6 дБ" - почему так?
это такое свойство. Его можно доказать математически, но смысл в том что уровень амплитуды 0.5 остается на месте при сглаживании фронта АЧХ
eiyawii писал(а): 3. Как рассчитать коэффициент расширения у оконной функции?
ну я это делал руками расчитывая спектр окна и брал отношение его ширины по нулям к прямоугольному окну
eiyawii писал(а): 4. Можно ли методом частотной выборки синтезировать ПФ, ФВЧ ? и как в этом случае рассчитывать фазовую характеристику?
да конечно можно. Фазовую характеристику можно рассчитывать абсолютно также

Pavia
Сообщения: 38
Зарегистрирован: 25 апр 2011, 18:45

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение Pavia »

Для фильтра с конечной импульсной характеристикой колебания будут все равно вы лишь можете регулировать их но устранить не можете никогда.
А если их сделать меньше машинной точности?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Расчет КИХ фильтра методом частотной выборки

Сообщение Бахурин Сергей »

Pavia писал(а): А если их сделать меньше машинной точности?
Для этого потребуется очень длинный фильтр на практике очень сложно будет такой использовать. Вы можете сделать эти колебания не более заданного уровня (скажем менее 0.1 дБ) тогда на практике такой фильтр будет вносить пренебрежимо малые искажения и в подавляющем большинстве случаев такой фильтр можно считать "ровным".

Ответить