Компьютерное распознавание и порождение речи
Глава 2. Основы цифровой обработки звуковых сигналов.
2.5. Цифровая фильтрация.Цифровые фильтры используются, во-первых, для восстановления искаженных некоторым способом сигналов, во-вторых, для выделения в исходном сигнале составляющих, относящихся к определенному диапазону частот с подавлением частот, не относящихся к указанному диапазону. Эти проблемы решаются также при помощи аналоговых фильтров, но эффективность последних значительно более низкая.
Различают фильтры нижних частот, фильтры верхних частот, полосовые фильтры и полосо-заграждающие фильтры ( также называемые режекторными или фильтрами-пробками).
Фильтры нижних частот пропускают составляющие сигналов с частотой ниже некоторого значения, называемого частотой останова, и задерживает составляющий с частотой выше этого значения.
Фильтры верхних частот пропускают составляющие с частотой выше частоты останова значения и задерживают составляющие с частотой ниже частоты останова.
Полосовые и полосо-заграждающие фильтры соответственно пропускают или задерживают составляющие сигнала, находящиеся в некотором интервале (полосе) частот.
Итак, линейная цифровой фильтр - это некая линейная система, которая поэтому может характеризоваться, во-первых, таким понятием как импульсная характеристика, которая применительно к фильтрам также часто называется ядром фильтра. Отфильтрованный сигнал, таким образом, может быть получен сверткой исходного сигнала с ядром фильтра.
Другой способ фильтрации сигналов, рекурсивный, будет рассмотрен позднее.
Важными характеристиками фильтра являются реакция на скачок и частотная характеристика. Так же как импульсная характеристика – выход системы(фильтра) при подаче на ее вход единичного импульса, реакция на скачок – это выход системы (фильтра) при подаче на ее вход ступенчатой функции с единичной амплитудой, то есть такой функции, для которой все значения до нулевого отсчета равны нулю, а все значения, начиная с нулевого отсчета, равны единице. Частотной характеристикой фильтра называют функцию, полученную преобразованием Фурье из импульсной характеристики.
Качество фильтра характеризуют следующие показатели:
1) время нарастания – определяется по реакции на скачок посредством подсчета числа отсчетов, находящихся на интервале, в котором амплитуда увеличивается с 0.1 до 0.9.
2) отсутствие перерегулирования – то есть явления, при котором сигнал в реакции на скачок принимает значения ниже 0 или выше 1.
3) ширина полосы останова – то есть участка частотной характеристики, на котором значение амплитуды вырастает (для фильтра верхних частот) или убывает (для фильтра нижних частот) на 0.707 своего значения (то есть на 3 дБ). Хороший фильтр характеризуется узкой полосой останова.
4) отсутствие неравномерности полосы пропускания (неравномерности пульсации, ряби).
Чтобы разрабатывать фильтры верхних частот, полосовые или режекторные фильтры, необходимо уметь
1) разрабатывать фильтры нижних частот.
2) уметь из фильтров нижних частот получать фильтры верхних частот, а из тех и других – полосовые и режекторные фильтры.
О том как разработать цифровой фильтр нижних частот речь пойдет ниже. Сейчас же внесем пояснения по второму пункту.
Существуют два способа преобразования фильтра нижних частот в фильтр верхних частот с той же частотой останова.
Первый способ, так называемая спектральная инверсия.
Предположим входной сигнал x[n] разлагается на высокочастотный сигнал x1[n] и низкочастотный x2[n]:
Пусть для получения низкочастотного сигнала использовался фильтр с ядром h2[n], то есть
Мы знаем также следующее свойство свертки:
То есть ядро фильтра высоких частот
Таким образом, метод спектральной инверсии заключается в получении ядра фильтра высоких частот из ядра фильтра низких частот с той же частотой останова путем прибавления к дельта-функции инвертированного (взятого со знаком минус) ядра низкочастотного фильтра.
где M- число точек в среднем. Частотные характеристики фильтра скользящего среднего просто ужасные и он используется только для сглаживания сигналов.
Как раз sinc-фильтры являются идеальными в смысле частотной характеристики.
Если взять частотную характеристику со стопроцентным завалом, то есть ширина полосы останова которой равна нулю, затем взять от нее обратное преобразование Фурье, то мы получим ядро идеального фильтра нижних частот. Это будет кривая функции называемой sinc-функцией и равной в общем случае отношению sin(x)/x. В нашем случае ядро идеального фильтра нижних частот с частотой останова f имеет следующий вид:
К сожалению, это идеальное ядро имеет бесконечную длину, поэтому нам придется использовать некоторые приближенные функции, дающие ядро конечной длины. Для начала «обрежем» sinc-функцию (которая симметрична вокруг точки с максимальной амплитудой) с обеих сторон на оси на одинаковом расстоянии от точки c максимальной амплитудой. Значения справа и слева от оставшегося куска ядра приравняем нулю. Если пропустить сигнал через получившийся фильтр, мы обнаружим сильную рябь в полосе пропускания и плохое ослабление вне этой полосы. Чтобы избавиться от этого, полученное ядро умножают на некую «оконную» функцию, которая приводит к сглаживанию частотной характеристики. В качестве «оконной» функции используют так называемое окно Блэкмана или окно Хэмминга. Окно Блэкмана имеет формулу
где M – число точек ядра фильтра. Окно Хэмминга имеет формулу
Значение M на практике вычисляется как округленный до целого результат деления 4 на желаемую ширину полосы задержки (значение между 0 и 0.5). Приводим функцию на языке Си для функции вычисления фильтра с применением окна Блэкмана и фильтрации входящего сигнала.
// Применение sinc-фильтра нижних частот. Возвращает фильтрованный сигнал // nF – частота фильтрации, значение из промежутка от 0 до 0.5 // N – число элементов массива исходного сигнала // x – массив значений исходного сигнала // BW – ширина промежуточной полосы, значение из промежутка от 0 до 0.5 double* FilterLF(double nF, int N, double *x, double BW) < int M=4/BW-fmod(4,BW); double* Kernel=(double*)malloc(M*sizeof(double));
Функция для окна Хэмминга строится по аналогии.
Теперь несколько слов о рекурсивных фильтрах. Механизм рекурсивной фильтрации не требует построения ядра фильтра с тем, чтобы потом свертывать с ним исходный сигнал. В данном случае используется некоторое выражение, которое позволяет вычислить значение амплитуды любого отсчета фильтрованного сигнала по значениям амплитуд отдельных отсчетов в исходном сигнале и значениям амплитуд отдельных уже вычисленных отсчетов фильтрованного сигнала. То есть решением обычно ищется в виде:
На практике полином ограничивают лишь несколькими членами. В частности для однополюсного рекурсивного фильтра верхних частот выражение будет иметь вид:
Вводится понятие количества затухания между отсчетами
где d – число отсчетов, которое нужно фильтру нижних частот, чтобы затухнуть до 0.368 минимального значения амплитуды. Количество затухания может быть получено из частоты останова f ( между 0 и 0.5) по формуле
Тогда коэффициенты для рекурсивного фильтра нижних частот можно получить по формулам:
Kоэффициенты для рекурсивного фильтра верхних частот можно получить по формулам:
Для полосовых и режекторных фильтров вводят вспомогательные переменные:
где B – ширина полосы пропускания (задержки) фильтра, f – на сей раз частота середины полосы пропускания( задержки) – значение между 0 и 0.5.