exponenta event banner

dsp. CoupledAllpassFilter

Фильтр IIR с подключением allpass

Описание

dsp.CoupledAllpassFilter объект реализует связанную структуру фильтра allpass, состоящую из двух фильтров allpass, соединенных параллельно. Каждая ветвь allpass может содержать несколько разделов. Общий выходной сигнал фильтра вычисляется путем сложения выходного сигнала двух соответствующих ветвей. Также может быть возвращен дополнительный второй выход, который является мощностью, комплементарной первому. Например, с точки зрения частотной области, если первый выход реализует фильтр нижних частот, то второй выход реализует дополнительный фильтр верхних частот. Для реальных сигналов комплементарный выходной сигнал мощности вычисляется путем вычитания выходного сигнала второй ветви из первой. dsp.CoupledAllpassFilter поддерживает плавающую точку с двойной и одинарной точностью и позволяет выбирать между различными структурами реализации. Этот системный object™ также поддерживает комплексные коэффициенты, многоканальный ввод переменной длины и настраиваемые значения коэффициентов фильтра.

Для фильтрации каждого канала входа:

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

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

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

Создание

Описание

caf = dsp.CoupledAllpassFilter возвращает связанный объект System фильтра allpass, caf, который фильтрует каждый канал входного сигнала независимо. Связанный фильтр allpass использует внутренние структуры и коэффициенты по умолчанию.

пример

caf = dsp.CoupledAllpassFilter(AllpassCoeffs1,AllpassCoeffs2) возвращает связанный объект System фильтра allpass, caf, с Structure установить в значение 'Minimum multiplier', AllpassCoefficients1 установить в значение AllpassCoeffs1, и AllpassCoefficients2 установить в значение AllpassCoeffs2.

caf = dsp.CoupledAllpassFilter(struc,AllpassCoeffs1,AllpassCoeffs2) возвращает связанный объект System фильтра allpass, caf, с Structure установить в значение struc и соответствующие коэффициенты, установленные в AllpassCoeffs1 и AllpassCoeffs2. struc может быть 'Minimum multiplier' | 'Wave Digital Filter' | 'Lattice'.

caf = dsp.CoupledAllpassFilter(Name,Value) возвращает системный объект Connected allpass filter, caf, каждое свойство имеет заданное значение.

Свойства

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

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

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

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

Укажите внутреннюю структуру ветвей allpass как одну из 'Minimum multiplier', 'Wave Digital Filter', или 'Lattice'. Каждая структура использует различную пару значений коэффициентов, независимо хранящихся в соответствующем свойстве объекта.

Задайте коэффициенты полиномиального фильтра для первой ветви allpass. Это свойство может принимать значения либо в виде вектора строки (односекционная конфигурация), либо в виде массива ячеек с таким количеством ячеек, как секции фильтра.

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

Зависимости

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

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

Задайте коэффициенты Wave Digital Filter для первой ветви allpass. Это свойство может принимать значения либо в виде вектора строки (односекционная конфигурация), либо в виде массива ячеек с таким количеством ячеек, как секции фильтра.

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

Зависимости

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

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

Задайте коэффициенты решетки allpass для первой ветви allpass. Это свойство может принимать значения либо в виде вектора строки (односекционная конфигурация), либо в виде массива ячеек с таким количеством ячеек, как секции фильтра.

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

Зависимости

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

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

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

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

Зависимости

Это свойство применимо только при установке PureDelayBranch свойство для true.

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

Gain1 - коэффициент усиления фазы отдельной ветви. Это свойство может принимать только значения, равные '1', '–1', '0+i', или '0–i'. Это свойство не настраивается.

Типы данных: char

Задайте коэффициенты полиномиального фильтра для второй ветви allpass. Это свойство может принимать значения либо в виде вектора строки (односекционная конфигурация), либо в виде массива ячеек с таким количеством ячеек, как секции фильтра.

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

Зависимости

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

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

Задайте коэффициенты Wave Digital Filter для второй ветви allpass. Это свойство может принимать значения либо в виде вектора строки (односекционная конфигурация), либо в виде массива ячеек с таким количеством ячеек, как секции фильтра.

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

Зависимости

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

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

Задайте коэффициенты решетки allpass для второй ветви allpass. Это свойство может принимать значения либо в виде вектора строки (односекционная конфигурация), либо в виде массива ячеек с таким количеством ячеек, как секции фильтра.

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

Зависимости

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

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

Укажите значение независимого коэффициента усиления фазы, применяемого к ветви 2. Это свойство может принимать только значения, равные '1', '–1', '0+i', или '0–i'. Это свойство не настраивается.

Типы данных: char

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

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

Зависимости

Это свойство применимо только в том случае, если выбрано Structure свойство поддерживает комплексные коэффициенты.

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

Если установить PureDelayBranch кому trueсвойство, содержащее коэффициенты для первой ветви allpass, отключено, и функция Delay становится активной. Это свойство можно использовать для повышения производительности, если известно, что одна из двух ветвей allpass представляет собой чистую задержку (например, для конструкций полупериодных фильтров).

Типы данных: logical

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

Зависимости

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

Типы данных: logical

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

Синтаксис

Описание

пример

y = caf(x) фильтрация входного сигнала x для получения выходных данных y. Когда x является матрицей, каждый столбец фильтруется независимо как отдельный канал с течением времени.

[y,ypc] = caf(x) также возвращает ypc, комплементарный сигнал мощности к первичному выходу y.

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

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

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

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

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

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

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

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

Мощность комплементарного выхода с фильтрацией верхних частот, возвращаемая в виде вектора или матрицы. Размер и тип данных выходного сигнала совпадают с размером входного сигнала.

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

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

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

release(obj)

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

fvtoolВизуализация частотной характеристики подключенного фильтра allpass
getBranchesВозврат внутренних ветвей allpass
freqzЧастотная характеристика объекта системы дискретно-временного фильтра
impzИмпульсная характеристика объекта системы дискретно-временного фильтра
infoСведения об объекте filter System
coeffsВозвращает коэффициенты объекта System фильтра в структуре
costОценка затрат на внедрение фильтра Объект системы
grpdelayОтвет групповой задержки объекта System дискретно-временного фильтра
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

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

Реализуйте фильтр нижних частот Баттерворта порядка 3. Используйте связанную структуру allpass с внутренней структурой минимального множителя.

Fs = 48000;    % in Hz
Fc = 12000;    % in Hz
frameLength = 1024;
[b, a] = butter(3,2*Fc/Fs);
AExp = [freqz(b,a,frameLength/2); NaN];
[c1, c2] = tf2ca(b,a);
caf = dsp.CoupledAllpassFilter(c1(2:end),c2(2:end));
tfe = dsp.TransferFunctionEstimator('FrequencyRange', 'onesided',...
    'SpectralAverages', 2);
aplot = dsp.ArrayPlot('PlotType', 'Line',...
    'YLimits', [-40 5],...
    'YLabel', 'Magnitude (dB)',...
    'SampleIncrement', Fs/frameLength,...
    'XLabel', 'Frequency (Hz)',...
    'Title', 'Magnitude Response',...
    'ShowLegend', true,'ChannelNames',{'Actual','Expected'});
Niter = 200;
for k = 1:Niter
    in = randn(frameLength,1);
    out = caf(in);
    A = tfe(in,out);
    aplot(db([A,AExp]));
end

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

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

Инициализировать

Fs = 1000;
f1 = 50; f2 = 100;
Fpass = 70; Apass = 1;
Fstop = 60; Astop = 80;
filtSpecs = fdesign.highpass(Fstop,Fpass,Astop,Apass,Fs);
hpSpec = design(filtSpecs,'ellip','FilterStructure','cascadeallpass',...
    'SystemObject',true);
frameLength = 1000;
nFrames = 100;
sine   = dsp.SineWave('Frequency',[f1,f2],'SampleRate',Fs,...
  'SamplesPerFrame',frameLength); % Input composed of two sinusoids.
sa = dsp.SpectrumAnalyzer('SampleRate',Fs,'YLimits',[-150 30],...
  'PlotAsTwoSidedSpectrum',false,'ShowLegend',true,...
  'FrequencyResolutionMethod', 'WindowLength','WindowLength',1000,...
  'FFTLengthSource', 'Property','FFTLength', 1000,...
  'Title','Original (Channel 1) Filtered (Channel 2)',...
  'ChannelNames',{'Original','Filtered'});

Моделировать

for k = 1:nFrames
  original = sum(sine(),2); % Add the two sinusoids together
  filtered = hpSpec(original);
  sa([original,filtered]);
end

Спроектируйте фильтр нижних частот Баттерворта порядка 3. Используйте связанную структуру allpass с внутренней структурой минимального множителя.

Fs = 48000;    % in Hz
Fc = 12000;    % in Hz
frameLength = 1024;
[b,a] = butter(3,2*Fc/Fs);
AExp = [freqz(b,a,frameLength/2); NaN];
[c1,c2] = tf2ca(b,a);
caf = dsp.CoupledAllpassFilter(c1(2:end),c2(2:end));

Использование 'SubbandView' вариант dsp.CoupledAllpassFilter, вы можете визуализировать выходной сигнал фильтра нижних частот, дополнительный выходной сигнал фильтра верхних частот или оба с помощью fvtool.

Для просмотра выходных данных фильтра нижних частот установите 'SubbandView' кому 1.

fvtool(caf,'SubbandView',1,'Fs',Fs)

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 an object of type line.

Для просмотра выходных данных фильтра верхних частот установите 'SubbandView' кому 2.

fvtool(caf,'SubbandView',2,'Fs',Fs)

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 an object of type line.

Для просмотра обоих выходов установите 'SubbandView' кому 'all', [1 2] или [1; 2].

fvtool(caf,'SubbandView','all','Fs',Fs);

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.

Алгоритмы

Следующие три цифры суммируют основные структуры, поддерживаемые dsp.CoupledAllpassFilter.

  • Минимальный множитель и WDF

  • Решетка

  • Решетка с комплексными сопряженными коэффициентами

Ссылки

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

[2] Митра, Санджит К. и Джеймс Ф. Кайзер, «Handbook for Digital Signal Processing» New York: John Wiley & Sons, 1993.

Представлен в R2013b