fir1

Функция расчета КИХ-фильтра оконным методом.

Синтаксис:

fir1(num, n, fc, ftype, wtype, scaleFlag);  fc - число.
fir1(num, n, fc, ftype, wtype, scaleFlag);  fc - двухэлементный вектор.
fir1(num, n, fc, ftype, wtype, scaleFlag, winParam);  fc - число.
fir1(num, n, fc, ftype, wtype, scaleFlag, winParam);  fc - двухэлементный вектор.

Аргументы:

Имя Тип данных Описание
num array Выходной массив коэффициентов импульсной характеристики фильтра
n integer Порядок фильтра
fc double/array Частота среза фильтра (для НЧ и ВЧ фильтров) либо массив частот среза фильтра - для полосовых и режекторных фильтров. Должна иметь значение в пределах от 0 до 1, где 1 соответствует половине частоты дискретизации фильтра
ftype string Тип фильтра, задается строкой в 4-х вариантах: "low", "high", "pass", "stop"
wtype string Тип оконной функции, задается строкой в 7 вариантах: "rectwin", "triang", "hamming", "hann", "blackman", "chebwin", "kaiser"
scaleFlag string Флаг масштабирования коэффициентов фильтра, задается строкой в двух вариантах: "noscale", "scale"
winParam double Дополнительный параметр оконной функции, определяет уровень подавления боковых лепестков для окна Чебышева и ширину главного лепестка и степень подавления боковых для окна Кайзера)

Описание:

fir1(num, n, fc, ftype, wtype, scaleFlag) – функция рассчитывает цифровой фильтр с конечной импульсной характеристикой. Расчет ведется оконным методом, вид оконной функции определяется параметром wtype, как описано выше. Если частота среза fc задается одним числом, тип фильтра может быть выбран либо как "low" (НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета записывается в массив num, размерность которого должна быть не менее n + 1;

fir1(num, n, fc, ftype, wtype, scaleFlag) – функция рассчитывает цифровой фильтр с конечной импульсной характеристикой. Расчет ведется оконным методом, вид оконной функции определяется параметром wtype. Если частота среза fc задается вектором из двух элементов, тип фильтра может быть выбран либо как "pass" (полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета записывается в массив num, размерность которого должна быть не менее n + 1;

fir1(num, n, fc, type, wtype, scaleFlag, winParam) – функция рассчитывает цифровой фильтр с конечной импульсной характеристикой. Расчет ведется оконным методом, вид оконной функции определяется параметром winType и дополнительным параметром winParam. winParam определяет уровень подавления боковых лепестков (дБ) для оконной функции Чебышева и ширину главного лепестка и степень подавления боковых для окна Кайзера. Важно. Функция с подобным набором параметров может быть вызвана только для оконных функций Чебышева и Кайзера. Если частота среза fc задается одним числом, тип фильтра может быть выбран либо как "low" (НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета записывается в массив num, размерность которого должна быть не менее n + 1;

fir1(num, n, fc, type, wtype, scaleFlag, winParam) – функция рассчитывает цифровой фильтр с конечной импульсной характеристикой. Расчет ведется оконным методом, вид оконной функции определяется параметром wtype и дополнительным параметром winParam. winParam определяет уровень подавления боковых лепестков (дБ) для оконной функции Чебышева и ширину главного лепестка и степень подавления боковых для окна Кайзера. Важно. Функция с подобным набором параметров может быть вызвана только для оконных функций Чебышева и Кайзера. Если частота среза fc задается вектором из двух элементов, тип фильтра может быть выбран либо как "pass" (полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета записывается в массив num, размерность которого должна быть не менее n + 1;

Для всех вариантов вызова функции расчета КИХ-фильтра оконным методом частоты среза задаются в виде величины, нормированной к половине частоты дискретизации фильтра. Например, для НЧ-фильтра с частотой дискретизации 100 Гц и частотой среза 25 Гц необходимо задать параметр fc равным 0.5.

Алгоритм расчета состоит из следующих ключевых операций:

  1. Расчет низкочастотного прототипа КИХ-фильтра;
  2. Расчет заданной оконной функции и взвешивание прототипа фильтра;
  3. Преобразование взвешенного прототипа к заданному типу фильтра (НЧ, ВЧ, ПФ, РФ) с учетом заданных частот среза;

Подробное описание алгоритма расчета представлено в [1].

Результат:

Имя Тип данных Описание
num array Выходной массив коэффициентов импульсной характеристики фильтра

Пример 1:

var   Order: integer, // Порядок фильтра
   Type: string, // Тип фильтра   
   Cutoff: double, // Частота среза фильтра
   WinType: string, // Вид оконной функции
   ScalingFLag: string, // Флаг масштабирования   
   Num: array = 11#0; // Массив коэффициентов импульсной характеристики фильтра
Order = 10;
Cutoff = 0.3;
Type = "low";
WinType = "blackman";
ScalingFlag = "scale";
fir1(Num, Order, Cutoff, Type, WinType, ScalingFlag);

В результате в массиве Num будут записаны коэффициенты импульсной характеристики цифрового НЧ-фильтра 10-го порядка с нормированной частотой среза 0.3, рассчитанного с использованием оконной функции Блэкмана с использованием масштабирования.

Результат выполнения функции:

num = [9.8043687E-19, -0.0020873, 0.0073051, 0.085631, 0.2426902, 0.3329204, 0.2426902, 0.085631, 0.0073051, -0.0020873, 9.043687E-19];

Пример 2:

var   Order: integer, // Порядок фильтра
   Type: string, // Тип фильтра   
   Cutoff: array = 2#0, // Частоты среза фильтра
   WinType: string, // Вид оконной функции
   ScalingFLag: string, // Флаг масштабирования   
   WinParam: double,  // Параметр оконной функции Чебышева 
   Num: Array = 11#0; // Массив коэффициентов импульсной характеристики фильтра
Order = 10;
Cutoff[1] = 0.3;
Cutoff[2] = 0.5;
Type = "pass";
WinType = "chebwin";
ScalingFlag = "noscale";
WinParam = 100;
fir1(Num, Order, Cutoff, Type, WinType, ScalingFlag, WinParam);

В результате в массиве Num будут записаны коэффициенты импульсной характеристики цифрового полосового фильтра 10-го порядка с нормированными частотами среза 0.3 и 0.5, рассчитанного с использованием оконной функции Чебышева (с подавлением боковых лепестков на уровне 100 дБ) без масштабирования коэффициентов.

Результат выполнения функции:

num = [0.0012834, 0.003325, -0.034251, -0.083072, 0.052478, 0.2, 0.052478, -0.083072, -0.034251, 0.003325, 0.0012834];

Дополнительные материалы

  1. Айфичер Э., Джервис Б. Цифровая обработка сигналов. Практический подход. - Москва: Вильямс, 2004, 992 с.