exponenta event banner

dsp. IIRHalfbandDecimator

Прорежьте в два раза с помощью полифазного БИХ

Описание

dsp.IIRHalfbandDecimator Система object™ выполняет эффективное многофазное прореживание входного сигнала в два раза. Для проектирования полуполосного фильтра можно указать объект для использования эллиптической конструкции или квазилинейной фазовой конструкции. Объект использует эти методы проектирования для вычисления коэффициентов фильтра. Для фильтрации входных данных объект использует многофазную структуру. Фильтры allpass в многофазной структуре имеют форму минимального множителя.

Эллиптическая конструкция вводит нелинейную фазу и создает фильтр, используя меньшее количество коэффициентов, чем квазилинейная конструкция. Квазилинейная фазовая схема преодолевает фазовую нелинейность за счет дополнительных коэффициентов.

Кроме того, вместо проектирования полуполосного фильтра с использованием метода конструирования можно задать коэффициенты фильтра напрямую. При выборе этой опции фильтры allpass в двух ветвях полифазной реализации могут быть в форме минимального множителя или в форме цифровой волны.

Вы также можете использовать dsp.IIRHalfbandDecimator задача состоит в том, чтобы реализовать аналитическую часть двухдиапазонного набора фильтров для фильтрации сигнала на низкочастотные и высокочастотные поддиапазоны.

Чтобы отфильтровать и понизить выборку данных, выполните следующие действия.

  1. Создать dsp.IIRHalfbandDecimator и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

iirhalfbanddecim = dsp.IIRHalfbandDecimator возвращает полуполосный прореживатель, iirhalfbanddecim, с настройками по умолчанию. В настройках по умолчанию объект System фильтрует и понижает выборку входных данных с полуполосной частотой 22050 Гц, ширина перехода 4100 Гц и затухание полосы останова 80 дБ.

пример

iirhalfbanddecim = dsp.IIRHalfbandDecimator(Name,Value) возвращает полуполосный прореживатель IIR с дополнительными свойствами, заданными одним или несколькими Name,Value аргументы пары.

Пример: iirhalfbanddecim = dsp.IIRHalfbandDecimator('Specification','Filter order and stopband attenuation') создает объект полуполосного прореживателя IIR с порядком фильтра, равным 9 и значение затухания полосы останова 80 дБ.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Параметры конструкции фильтра, заданные как символьный вектор. При установке Specification для одного из вариантов конструкции фильтра можно задать параметры конструкции фильтра с помощью соответствующего FilterOrder, StopbandAttenuation, и TransitionWidth свойства. Кроме того, можно задать метод проектирования с помощью DesignMethod. При установке Specification кому 'Coefficients', можно указать коэффициенты непосредственно.

Порядок полуполосного фильтра IIR, заданного как положительное скалярное целое число. Если установить DesignMethod кому 'Elliptic', то FilterOrder должно быть нечетным целым числом, большим единицы. Если установить DesignMethod кому 'Quasi-linear phase', то FilterOrder должно быть кратно четырем.

Зависимости

Это свойство применяется при установке Specification кому 'Filter order and stopband attenuation' или 'Filter order and transition width'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Минимальное затухание, необходимое в полосе останова полуполосного фильтра БИХ, определяемое как положительный действительный скаляр. Единицы измерения находятся в дБ.

Зависимости

Это свойство применяется только при установке Specification кому 'Filter order and stopband attenuation' или 'Transition width and stopband attenuation'.

Типы данных: single | double

Ширина перехода полуполосного фильтра БИХ, заданная как положительный действительный скаляр. Единицы измерения в Гц. Значение ширины перехода должно быть меньше половины входной частоты дискретизации.

Зависимости

Это свойство применяется только при установке Specification кому 'Transition width and stopband attenuation' или 'Filter order and transition width'.

Типы данных: single | double

Метод проектирования полуполосного фильтра БИХ, указанный как 'Elliptic' или 'Quasi-linear phase'. Если свойство имеет значение 'Quasi-linear phase'первая ветвь полифазной структуры является чистой задержкой, которая приводит к приблизительно линейному фазовому отклику.

Зависимости

Это свойство применяется только при установке Specification к любому принятому значению, за исключением 'Coefficients'.

Входная частота дискретизации, заданная как положительный действительный скаляр. Единицы измерения в Гц.

Зависимости

Это свойство применяется только при установке Specification к любому принятому значению, за исключением 'Coefficients'.

Типы данных: single | double

Внутренняя структура реализации фильтра allpass, указанная как 'Minimum multiplier' или 'Wave Digital Filter'.

Это свойство невозможно настроить.

Зависимости

Это свойство применяется только при установке 'Specification' кому 'Coefficients'. Каждая структура использует свой набор коэффициентов, независимо хранящийся в соответствующем свойстве объекта.

Коэффициенты полиномиального фильтра Allpass первой ветви, заданные как N-by-1 или N-by-2 матрица. N - количество секций allpass первого или второго порядка.

Настраиваемый: Да

Зависимости

Это свойство применяется только при установке Specification кому 'Coefficients' и Structure кому 'Minimum multiplier'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Коэффициенты полиномиального фильтра Allpass второй ветви, заданные как N-by-1 или N-by-2 матрица. N - количество секций allpass первого или второго порядка.

Настраиваемый: Да

Зависимости

Это свойство применяется только при установке Specification кому 'Coefficients' и Structure кому 'Minimum multiplier'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Коэффициенты фильтра Allpass первой ветви в форме Wave Digital Filter, указанные как N-by-1 или N-by-2 матрица. N - количество секций allpass первого или второго порядка. Каждый элемент должен иметь абсолютное значение, меньшее или равное 1.

Это свойство невозможно настроить.

Зависимости

Это свойство применяется только при установке Specification кому 'Coefficients' и Structure кому 'Wave Digital Filter'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Коэффициенты фильтра Allpass второй ветви в форме Wave Digital Filter, указанные как разделенная запятыми пара, состоящая из 'WDFCoefficients2' и N-by-1 или N-by-2 матрица. N - количество секций allpass первого или второго порядка. Каждый элемент должен иметь абсолютное значение, меньшее или равное 1.

Это свойство невозможно настроить.

Зависимости

Это свойство применяется только при установке 'Specification' кому 'Coefficients' и 'Structure' кому 'Wave Digital Filter'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Флаг, делающий первую ветвь allpass задержкой, заданной как логический скаляр. Если это свойство имеет значение true, первая ветвь рассматривается как чистая задержка и свойства AllpassCoefficients1 и WDFCoefficients1 не применяются.

Это свойство невозможно настроить.

Зависимости

Это свойство применяется только при установке Specification кому 'Coefficients'.

Длина задержки первой ветви, заданная как конечный положительный скаляр. Значение этого свойства указывает количество отсчетов, на которое можно задержать ввод в первую ветвь.

Это свойство невозможно настроить.

Зависимости

Это свойство применяется только при установке Specification кому 'Coefficients' и HasPureDelayBranch на 1.

Типы данных: single | double

Опция для обработки последнего раздела второй ветви как первого порядка, заданного как логический скаляр. Когда это свойство равно 1 и коэффициенты второй ветви находятся в N-by-2 матрице, объект игнорирует второй элемент последней строки матрицы. Последняя секция второй ветви становится секцией первого порядка. Если для этого свойства установлено значение 0, последняя секция второй ветви является секцией второго порядка. Когда коэффициенты второй ветви находятся в матрице N-by-1, это свойство игнорируется.

Это свойство невозможно настроить.

Зависимости

Это свойство применяется только при установке Specification кому 'Coefficients'.

Использование

Описание

пример

ylow = iirhalfbanddecim(x) фильтрует входной сигнал, x, с помощью полубандового фильтра IIR, iirhalfbanddecimи понижает выходной сигнал в 2 раза.

пример

[ylow,yhigh] = iirhalfbanddecim(x) вычисляет ylow и yhigh, банка фильтров анализа, iirhalfbanddecim для ввода x. Входная матрица Ki-by-N обрабатывается как N независимых каналов. Объект System генерирует два комплементарных мощности выходных сигнала путем сложения и вычитания двух выходных сигналов многофазной ветви соответственно. ylow и yhigh имеют одинаковый размер (Ko-by-N) и тип данных. Ko = Ki/2, где 2 - коэффициент прореживания.

Входные аргументы

развернуть все

Ввод данных, заданный как вектор столбца или матрица. Число строк во входном сигнале должно быть ровным, так как коэффициент прореживания всегда равен 2 для этого объекта. Если вход является матрицей, каждый столбец обрабатывается как независимый канал.

Типы данных: single | double
Поддержка комплексного номера: Да

Выходные аргументы

развернуть все

Поддиапазон нижних частот выхода прореживателя, возвращаемый в виде вектора столбца или матрицы. Выходные данные, ylow является низкочастотной полуполосной отфильтрованной и понижающей дискретизацией версией входного сигнала x. Из-за половинного характера фильтра коэффициент понижающей дискретизации всегда равен 2.

Типы данных: single | double
Поддержка комплексного номера: Да

Верхний поддиапазон выхода прореживателя, возвращаемый в виде вектора столбца или матрицы. Выходные данные, yhigh является полнополосной отфильтрованной и понижающей дискретизацией версией входного сигнала x. Из-за половинного характера фильтра коэффициент понижающей дискретизации всегда равен 2.

Типы данных: single | double
Поддержка комплексного номера: Да

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

freqzЧастотная характеристика объекта системы дискретно-временного фильтра
fvtoolВизуализация частотной характеристики фильтров DSP
infoСведения об объекте filter System
costОценка затрат на внедрение фильтра Объект системы
polyphaseМногофазное разложение многоскоростного фильтра
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Создайте полуполосный децимационный фильтр нижних частот минимального порядка для данных, дискретизированных на частоте 44,1 кГц. Фильтр имеет ширину перехода 4,1 кГц и затухание полосы останова 80 дБ.

IIRHalfbandDecim = dsp.IIRHalfbandDecimator(...
                        'DesignMethod', 'Quasi-linear phase');

Получите коэффициенты фильтра.

c = coeffs(IIRHalfbandDecim);

Постройте график величины и фазовой характеристики.

fvtool(IIRHalfbandDecim,'Analysis','freq')

Figure Filter Visualization Tool - Magnitude Response (dB) and Phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) and Phase Response contains an object of type line.

Для извлечения низкочастотного поддиапазона из речевого сигнала используйте набор фильтров анализа полуполосы и фильтр интерполяции.

Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).

Примечание: audioDeviceWriter Системная object™ не поддерживается в MATLAB Online.

Настройте устройство чтения аудиофайлов, банк фильтров анализа, устройство записи аудиоустройств и фильтр интерполяции. Частота дискретизации аудиоданных составляет 22050 Гц. Полуполосный фильтр имеет порядок 21 и ширину перехода 2 кГц.

afr = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024);

filterspec = 'Filter order and transition width';
Order = 21;
TW = 2000;

IIRHalfbandDecim = dsp.IIRHalfbandDecimator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',afr.SampleRate);

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',afr.SampleRate/2);

ap = audioDeviceWriter('SampleRate',afr.SampleRate);

Просмотрите амплитудную характеристику полубандового фильтра.

fvtool(IIRHalfbandDecim)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

Считайте речевой сигнал из аудиофайла в кадрах из 1024 выборок. Фильтрация речевого сигнала на низкочастотные и высокочастотные поддиапазоны с частотой полуполосы 5512,5 Гц. Восстановление аппроксимации нижних частот речевого сигнала путем интерполяции поддиапазона нижних частот. Воспроизвести отфильтрованные выходные данные.

while ~isDone(afr)
  audioframe = afr();
  xlo = IIRHalfbandDecim(audioframe);
  ylow = IIRHalfbandInterp(xlo);
  ap(ylow);
end

Дождитесь окончания аудиофайла, а затем закройте входной файл и освободите аудиоресурс.

release(afr);           
release(ap);

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

Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта синтаксисом эквивалентного шага. Например, obj (x) становится шагом (obj, x).

Примечание: audioDeviceWriter Системная object™ не поддерживается в MATLAB Online.

Настройте модуль чтения аудиофайлов и модуль записи аудиоустройств. Создайте полуполосный прореживатель и интерполятор БИХ. Наконец, настройте анализатор спектра для отображения спектров мощности входа и выхода блока фильтров.

AF = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024);
AP = audioDeviceWriter('SampleRate',AF.SampleRate);

filterspec = 'Filter order and transition width';
Order = 51;
TW = 2000;

IIRHalfbandDecim = dsp.IIRHalfbandDecimator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',AF.SampleRate);

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',AF.SampleRate/2,...
    'FilterBankInputPort',true);

SpecAna = dsp.SpectrumAnalyzer('SampleRate',AF.SampleRate,...
    'PlotAsTwoSidedSpectrum',false,'ReducePlotRate',false,...
    'ShowLegend',true,...
    'ChannelNames',{'Input signal','Filtered output signal'});

Считывайте одновременно отсчеты звука 1024. Фильтрация входного сигнала для получения низкочастотных и высокочастотных поддиапазонов, прореженных в два раза. Это банк фильтров анализа. В качестве набора фильтров синтеза используйте полупозиционный интерполятор. Отображение спектра рабочей мощности входного аудиосигнала и выходного сигнала блока фильтров синтеза. Воспроизведение выходных данных.

while ~isDone(AF)
    audioInput = AF();
    [xlo,xhigh] = IIRHalfbandDecim(audioInput);
    audioOutput = IIRHalfbandInterp(xlo,xhigh);
    spectrumInput = [audioInput audioOutput];
    SpecAna(spectrumInput);
    AP(audioOutput);
end

release(AF);
release(AP);
release(SpecAna);

Примечание.Этот пример выполняется только в R2016b или более поздних версиях. При использовании более ранней версии замените каждый вызов функции эквивалентным step синтаксис. Например, myObject (x) становится шагом (myObject, x).

Создайте полуполосный прореживатель для данных, дискретизированных на частоте 44,1 кГц. Используйте конструкцию минимального порядка с шириной перехода 2 кГц и затуханием полосы останова 60 дБ.

IIRHalfbanddecim = dsp.IIRHalfbandDecimator(...
    'Specification','Transition width and stopband attenuation',...
    'TransitionWidth',2000,'StopbandAttenuation',60,'SampleRate',44.1e3);

Фильтрация двухканального входа в поддиапазоны нижних и верхних частот.

x = randn(1024,2);
[ylow,yhigh] = IIRHalfbanddecim(x);

Алгоритмы

развернуть все

Ссылки

[1] Lang, M. Allpass Filter Design and Applications. Транзакции IEEE при обработке сигналов. том 46, № 9, сентябрь 1998 года, стр. 2505-2514.

[2] Харрис, F.J. Многоскоростная обработка сигналов для систем связи. Прентис Холл. 2004, стр 208–209.

[3] Регалии, Филлип А., Санджит К. Митра и П. П. Вайдянатхан. «Цифровой всепроходный фильтр: универсальный строительный блок обработки сигналов». Процедуры IEEE. Том 76, номер 1, 1988, стр. 19-37.

Расширенные возможности

.
Представлен в R2015b