Расчет КИХ фильтра методом частотной выборки
Расчет КИХ фильтра методом частотной выборки
В данной статье ( http://www.dsplib.ru/content/filters/fir/fir.html ) очень подробно рассмотрен расчет КИХ фильтров, тем не менее некоторые вещи я упускаю из виду и у меня получается результат не как в статье.
Импульсная характеристика получается не симметричная, что как бы говорит о том, что ошибка в дискретизации ФЧХ, и коэффициенты имеют большую мнимую часть (сотые) - значит и выборка АЧХ сделана неверно?
Вообще алгоритм, как я понял, такой:
1. задаем АЧХ (из условия)
2. задаем ФЧХ (по формуле 13, 14)
3. считаем комплексный коэффициент передачи по формуле 15
4. получаем коэффициенты фильтра через ОДПФ (формула 16)
верно?
Импульсная характеристика получается не симметричная, что как бы говорит о том, что ошибка в дискретизации ФЧХ, и коэффициенты имеют большую мнимую часть (сотые) - значит и выборка АЧХ сделана неверно?
Вообще алгоритм, как я понял, такой:
1. задаем АЧХ (из условия)
2. задаем ФЧХ (по формуле 13, 14)
3. считаем комплексный коэффициент передачи по формуле 15
4. получаем коэффициенты фильтра через ОДПФ (формула 16)
верно?
- Бахурин Сергей
- Администратор
- Сообщения: 1114
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Расчет КИХ фильтра методом частотной выборки
именно так. Проверьте ваши расчетные функции по приведнному примеру (таблицы в статье) если что-то расходится - ищите ошибку.
Re: Расчет КИХ фильтра методом частотной выборки
картинки АЧХ и ФЧХ
По таблице сходятся первые 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)
Re: Расчет КИХ фильтра методом частотной выборки
так, ошибку нашел.
Ошибка в коде
-1*((N-1)*(i-N)/N)*pi - в этом выражении при делении остаток отбрасывался, так как используются целые числа, просто надо во float перевести какое-нибудь число. Теперь всё симметрично.
По поводу подавления эффекта Гиббса.
Во-первых в некоторой литературе, где объясняется метод частотной выборки, напрочь отсутствует какое-либо упоминание об этом эффекте, хотя и говорят что функция между отсчетами ведет себя не подобающе и даже дают описание как она ведет (например, книга Сергиенко А. Б.). Почему не говорят об эффекте Гиббса?
Как теперь избавиться от эффекта Гиббса с помощью окна? В Вашей статье указано что необходимо перемножить импульсные характеристики фильтра и окна, но тогда нормировка изменится.
Ошибка в коде
Код: Выделить всё
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)
По поводу подавления эффекта Гиббса.
Во-первых в некоторой литературе, где объясняется метод частотной выборки, напрочь отсутствует какое-либо упоминание об этом эффекте, хотя и говорят что функция между отсчетами ведет себя не подобающе и даже дают описание как она ведет (например, книга Сергиенко А. Б.). Почему не говорят об эффекте Гиббса?
Как теперь избавиться от эффекта Гиббса с помощью окна? В Вашей статье указано что необходимо перемножить импульсные характеристики фильтра и окна, но тогда нормировка изменится.
Re: Расчет КИХ фильтра методом частотной выборки
Боюсь ошибиться но возможно нужно сделать так:
Сначала сложить все коэффициенты ИХ поделить на N. Вывести средние значение, а потом поделить все коэффициенты на среднее значение.
Сначала сложить все коэффициенты ИХ поделить на 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;
Re: Расчет КИХ фильтра методом частотной выборки
всё получилось.
Спасибо большое, Сергей.
1. А есть ли способы как-то по другому устранять колебания Гиббса? После применения окна в полосе пропускания всё-таки незначительные колебания остаются.
2. И еще такой вопрос: в статье написано, что "Важно отметить, что точкой пересечения АЧХ при использовании оконного сглаживания и без него является точка по уровню -6 дБ" - почему так?
3. Как рассчитать коэффициент расширения у оконной функции?
4. Можно ли методом частотной выборки синтезировать ПФ, ФВЧ ? и как в этом случае рассчитывать фазовую характеристику?
Спасибо большое, Сергей.
1. А есть ли способы как-то по другому устранять колебания Гиббса? После применения окна в полосе пропускания всё-таки незначительные колебания остаются.
2. И еще такой вопрос: в статье написано, что "Важно отметить, что точкой пересечения АЧХ при использовании оконного сглаживания и без него является точка по уровню -6 дБ" - почему так?
3. Как рассчитать коэффициент расширения у оконной функции?
4. Можно ли методом частотной выборки синтезировать ПФ, ФВЧ ? и как в этом случае рассчитывать фазовую характеристику?
- Бахурин Сергей
- Администратор
- Сообщения: 1114
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Расчет КИХ фильтра методом частотной выборки
Для фильтра с конечной импульсной характеристикой колебания будут все равно вы лишь можете регулировать их но устранить не можете никогда.eiyawii писал(а): 1. А есть ли способы как-то по другому устранять колебания Гиббса? После применения окна в полосе пропускания всё-таки незначительные колебания остаются.
это такое свойство. Его можно доказать математически, но смысл в том что уровень амплитуды 0.5 остается на месте при сглаживании фронта АЧХeiyawii писал(а): 2. И еще такой вопрос: в статье написано, что "Важно отметить, что точкой пересечения АЧХ при использовании оконного сглаживания и без него является точка по уровню -6 дБ" - почему так?
ну я это делал руками расчитывая спектр окна и брал отношение его ширины по нулям к прямоугольному окнуeiyawii писал(а): 3. Как рассчитать коэффициент расширения у оконной функции?
да конечно можно. Фазовую характеристику можно рассчитывать абсолютно такжеeiyawii писал(а): 4. Можно ли методом частотной выборки синтезировать ПФ, ФВЧ ? и как в этом случае рассчитывать фазовую характеристику?
Re: Расчет КИХ фильтра методом частотной выборки
А если их сделать меньше машинной точности?Для фильтра с конечной импульсной характеристикой колебания будут все равно вы лишь можете регулировать их но устранить не можете никогда.
- Бахурин Сергей
- Администратор
- Сообщения: 1114
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Расчет КИХ фильтра методом частотной выборки
Для этого потребуется очень длинный фильтр на практике очень сложно будет такой использовать. Вы можете сделать эти колебания не более заданного уровня (скажем менее 0.1 дБ) тогда на практике такой фильтр будет вносить пренебрежимо малые искажения и в подавляющем большинстве случаев такой фильтр можно считать "ровным".Pavia писал(а): А если их сделать меньше машинной точности?