exponenta event banner

dsp. IIRHalfbandInterpolator

Интерполяция в два раза с использованием полифазной БИХ

Описание

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

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

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

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

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

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

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

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

Создание

Описание

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

пример

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

Пример: iirhalfbandinterp = dsp.IIRHalfbandInterpolator('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

Параметр для использования объекта в качестве банка фильтров синтеза, заданного как логическое значение. Если это свойство false, dsp.IIRHalfbandInterpolator действует как интерполятор. Если это свойство true, то dsp.IIRHalfbandInterpolator действует как банк фильтров синтеза и алгоритм принимает два входных сигнала: поддиапазоны нижних и верхних частот.

Зависимости

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

Внутренняя структура реализации фильтра 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, указанные как 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'.

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

Описание

пример

y = iirhalfbandinterp(x1) увеличивает выборку на два и интерполирует входной сигнал x1 с помощью полуполосного интерполятора БИХ, iirhalfbandinterp.

пример

y = iirhalfbandinterp(x1,x2) реализует набор полуполосных синтезирующих фильтров для входов x1 и x2. x1 - низкочастотный выходной сигнал блока фильтров анализа в полуполосах и x2 - это верхний выходной сигнал набора фильтров для анализа в полуполосах. dsp.IIRHalfbandInterpolator реализует банк фильтров синтеза только тогда, когда FilterBankInputPort свойство - true.

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

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

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

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

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

Размер, тип данных и сложность обоих входов должны быть одинаковыми.

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

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

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

Вывод интерполятора, возвращаемый в виде вектора столбца или матрицы. Количество строк на выходе интерполятора в два раза превышает число строк во входном сигнале.

Типы данных: 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 дБ.

IIRHalfbandInterp = dsp.IIRHalfbandInterpolator(...
                        'DesignMethod', 'Quasi-linear phase');

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

c = coeffs(IIRHalfbandInterp);

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

fvtool(IIRHalfbandInterp,'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 кГц. Порядок фильтрации составляет 51 с шириной перехода 4,1 кГц. Используйте фильтр для увеличения выборки и интерполяции многоканального входа.

Fs = 44.1e3; 
filterspec = 'Filter order and transition width';
Order = 51;
TW = 4.1e3;  
iirhalfbandinterp = dsp.IIRHalfbandInterpolator(...
                                               'Specification',filterspec,...
                                               'FilterOrder',Order,...
                                               'TransitionWidth',TW,...
                                                'SampleRate',Fs);

x = randn(1024,4);
y = iirhalfbandinterp(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