dsp.CoupledAllpassFilter

Связанный Allpass БИХ фильтр

Описание

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

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

  1. Создайте dsp.CoupledAllpassFilter Объекту и установите его свойства.

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

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

Создание

Описание

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

пример

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

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

caf = dsp.CoupledAllpassFilter(Name,Value) возвращает Связанный allpass фильтр Системного объекта, caf, с каждым набором свойств на заданное значение.

Свойства

расширить все

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

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

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

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

Зависимости

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

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

Задайте коэффициенты цифрового фильтра волны для первой ветви 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

Задайте коэффициенты цифрового фильтра волны для второй ветви 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
Поддержка комплексного числа: Да

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

расширить все

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

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

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

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

Реализуйте lowpass Butterworth порядка 3. Используйте связанную структуру альпаса с внутренней структурой минимального множителя.

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

Создайте lowpass Butterworth порядка 3. Используйте связанную структуру альпаса с внутренней структурой минимального множителя.

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, можно визуализировать выход, степени комплементарный highpass фильтр выходной, или оба используя fvtool.

Чтобы просмотреть выход lowpass, установите '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] Regalia, Philip A., Mitra, Sanjit K., and P.P Vaidyanathan «The Digital All-Pass Filter: A Versatile Signal Processing Building Block». Материалы IEEE 1988, том 76, № 1, стр. 19-37.

[2] Mitra, Sanjit K., and James F. Kaiser, «Handbook for Digital Signal Processing» New York: John Wiley & Sons, 1993.

Введенный в R2013b