Основы цифровой обработки сигналов
Синтез цифровых фильтров
КИХ-фильтры
КИХ фильтр – это фильтр с конечной импульсной характеристикой (или FIR – finite impulse response).
Его основные особенности:
- Этот фильтр нерекурсивный, т.е. для вычисления значений на выходе используются только текущие и задержанные значения входа:
- В разностном уравнении есть только коэффициенты при .
- Передаточная функция в знаменателе имеет константу, часто единицу.
- Схема фильтра не имеет обратных связей.
- Отсчеты импульсной характеристики КИХ-фильтра – это и есть вектор коэффициентов .
Преимущества КИХ-фильтров
- Они могут обладать линейной фазой;
- Они всегда устойчивы;
- Имея достаточный порядок фильтра, мы можем сформировать "произвольные" АЧХ и ФЧХ.
Недостатки КИХ-фильтров
- Они дороже в реализации, чем БИХ-фильтры со схожей АЧХ;
- Они обладают большими задержками.
Синтез КИХ-фильтров
Под синтезом фильтра мы понимаем процесс получения его коэффициентов. Т.к. коэффициенты КИХ-фильтра – это его импульсная характеристика, то мы можем нарисовать идеальную форму АЧХ и с помощью обратного БПФ получить соответствующую ей идеальную бесконечную импульсную характеристику. Затем мы умножаем эту импульсную характеристику на оконную функцию конечной длительности, т.е. формируем конечную импульсную характеристику. С помощью БПФ мы получаем АЧХ КИХ-фильтра. Форма АЧХ отклоняется от идеальной, на ней появляются пульсации и переходные полосы.
БИХ-фильтры
БИХ-фильтр – это фильтр с бесконечной импульсной характеристикой (или IIR – infinite impulse response). Его основные особенности:
- БИХ-фильтры могут быть как аналоговыми, так и цифровыми, в отличие от КИХ-фильтров, которые могут быть только цифровыми.
- Этот фильтр рекурсивный. Для вычисления значений на выходе фильтра используются как значения входа, так и задержанные значения выхода:
- Передаточная функция имеет дробно-рациональный вид.
- Схема фильтра содержит обратные связи.
Преимущества БИХ-фильтров
- Относительная простота реализации. Они требуют меньше ресурсов (сумматоров, умножителей, линий задержки), чем КИХ-фильтры;
- Они имеют аналоговые прототипы.
Недостатки БИХ-фильтров
- Они не всегда устойчивы;
- Они не могут обладать линейной фазой;
- АЧХ выбирается из "стандартных" откликов.
Синтез БИХ-фильтров
Они синтезируются путем преобразования непрерывной передаточной характеристики аналогового прототипа в дискретную передаточную характеристику цифрового фильтра.
Пример синтеза цифрового фильтра в Engee
Сформируем в Engee сигнал, представляющий собой сумму четырех синусоид на частотах 500, 1200, 3000 и 4500 Гц. Спроектируем цифровой полосно-заграждающий фильтр, который должен будет подавить средние частоты.
Полоса заграждения будет лежать в пределах от 1000 до 4000 Гц. Для этого создадим объект со спецификацией фильтра с помощью функции digitalfilter, содержащейся в библиотеке DSP. В качестве аргументов выступает тип фильтра – в данном случае заграждающий (Bandstop) с указанием частот среза (1000 и 4000 Гц) и частоты дискретизации fs.
Процедура фильтрации сигнала выполняется с помощью функции filtfilt. Ее аргументами являются объект со спецификацией фильтра, метод проектирования фильтра (в данном случае выбран фильтр Баттерворта 4-го порядка) и входной сигнал x. Затем построим графики спектров исходного и отфильтрованного сигналов.
using Plots, DSP;
fc = [500 1200 3000 4500]';
fs = 10000;
dt = 1/fs;
t = [0:dt:0.1;];
x = cos.(2*pi*fc[1]*t) + cos.(2*pi*fc[2]*t) + cos.(2*pi*fc[3]*t)+cos.(2*pi*fc[4]*t);
x_filt = filtfilt(digitalfilter(Bandstop(1000, 4000; fs), Butterworth(4)), x);
p1 = DSP.periodogram(x);
plot(freq(p1), power(p1), xlabel="частота, Гц", ylabel="спектральная плотность мощности", label="исходный сигнал")
p2 = DSP.periodogram(x_filt);
plot!(freq(p2), power(p2), label="отфильтрованный сигнал")
Как видно из графиков, спектральные составляющие сигнала на частотах 1200 и 3000 Гц оказались подавленными.
Перечислим типы фильтров, которые можно синтезировать в Engee:
- Фильтр нижних частот – функция
Lowpass(Wn; Fs), гдеWn– частота среза,Fs– частота дискретизации; - Фильтр верхних частот – функция
Highpass(Wn; Fs)с аналогичными аргументами; - Полосно-пропускающий фильтр – функция
Bandpass(Wn1, Wn2; Fs), гдеWn1иWn2– границы полосы пропускания,Fs– частота дискретизации; - Полосно-заграждающий фильтр – функция
Bandstop(Wn1, Wn2; Fs), гдеWn1иWn2– границы полосы заграждения,Fs– частота дискретизации.
✏️Задание 1
Создайте в Engee фильтр нижних частот с частотой среза, равной 4000 Гц, и с его помощью отфильтруйте сигнал из предыдущего примера. Постройте графики спектров исходного и отфильтрованного сигналов.
Решение
using Plots, DSP;
fc = [500 1200 3000 4500]';
fs = 10000;
dt = 1/fs;
t = [0:dt:0.1;];
x = cos.(2*pi*fc[1]*t) + cos.(2*pi*fc[2]*t) + cos.(2*pi*fc[3]*t)+cos.(2*pi*fc[4]*t);
x_filt = filtfilt(digitalfilter(Lowpass(4000; fs), Butterworth(4)), x);
p1 = DSP.periodogram(x);
plot(freq(p1), power(p1), xlabel="частота, Гц", ylabel="спектральная плотность мощности", label="исходный сигнал")
p2 = DSP.periodogram(x_filt);
plot!(freq(p2), power(p2), label="отфильтрованный сигнал")
✏️Задание 2
Создайте в Engee полосно-пропускающий фильтр с границами полосы пропускания, равными 800 Гц и 3500 Гц, и с его помощью отфильтруйте сигнал из предыдущего примера. Постройте графики спектров исходного и отфильтрованного сигналов.
Решение
using Plots, DSP;
fc = [500 1200 3000 4500]';
fs = 10000;
dt = 1/fs;
t = [0:dt:0.1;];
x = cos.(2*pi*fc[1]*t) + cos.(2*pi*fc[2]*t) + cos.(2*pi*fc[3]*t)+cos.(2*pi*fc[4]*t);
x_filt = filtfilt(digitalfilter(Bandpass(800, 3500; fs), Butterworth(4)), x);
p1 = DSP.periodogram(x);
plot(freq(p1), power(p1), xlabel="частота, Гц", ylabel="спектральная плотность мощности", label="исходный сигнал")
p2 = DSP.periodogram(x_filt);
plot!(freq(p2), power(p2), label="отфильтрованный сигнал")