dsp.FrequencyDomainAdaptiveFilter

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

Описание

dsp.FrequencyDomainAdaptiveFilter Система object™ реализует адаптивную конечную импульсную характеристику (FIR), просачиваются частотный диапазон с помощью быстрого алгоритма наименьшее количество средних квадратичных (LMS) блока. Длина и свойства BlockLength задают длину фильтра, и длина блока оценивает использование алгоритма. Свойство FFTCoefficients содержит дискретное преобразование Фурье текущих коэффициентов фильтра. Объект предлагает ограниченные и неограниченные версии алгоритма с разделенными и нережимами разделения. Для получения дополнительной информации см. Алгоритмы.

Отфильтровать сигнал с помощью КИХ частотного диапазона адаптивный фильтр:

  1. Создайте dsp.FrequencyDomainAdaptiveFilter объект и набор его свойства.

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?

Создание

Описание

пример

fdaf = dsp.FrequencyDomainAdaptiveFilter возвращает КИХ частотного диапазона адаптивный Системный объект фильтра, fdaf. Этот Системный объект используется для расчета отфильтрованный выход и ошибка фильтра для данного входа и желал сигнала.

пример

fdaf = dsp.FrequencyDomainAdaptiveFilter(len) возвращает КИХ частотного диапазона адаптивный объект фильтра с Length набор свойств к len.

пример

fdaf = dsp.FrequencyDomainAdaptiveFilter(___,Name,Value) возвращает КИХ частотного диапазона адаптивный объект фильтра с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в кавычки. Можно использовать этот синтаксис с любыми предыдущими комбинациями входных аргументов.

Пример: fdaf = dsp.FrequencyDomainAdaptiveFilter('Length',32,'StepSize',0.1) моделирует частотный диапазон адаптивный фильтр с длиной 32 касаний и размером шага 0,1.

Свойства

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

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

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

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

Метод раньше вычислял коэффициенты фильтра в виде:

  • 'Constrained FDAF' – Налагает ограничение градиента на веса касания фильтра.

  • 'Unconstrained FDAF' – Никакое ограничение градиента не наложено на веса касания фильтра.

  • 'Partitioned constrained FDAF' – Делит импульсную характеристику фильтра, чтобы уменьшать задержку.

  • 'Partitioned unconstrained FDAF' – Делит импульсную характеристику фильтра, чтобы уменьшать задержку. Никакое ограничение градиента не наложено на веса касания фильтра.

Для получения дополнительной информации см. Алгоритмы.

Длина КИХ фильтрует содействующий вектор в виде положительного, скаляра с целочисленным знаком.

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

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

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

Фактор размера шага адаптации в виде действительного скаляра в области значений (0,1]. Используя небольшой шаг размер гарантирует небольшую установившуюся ошибку. Однако размер небольшого шага уменьшает получившуюся быстроту сходимости адаптивного фильтра. Увеличение размера шага улучшает быстроту сходимости, за счет увеличенной установившейся среднеквадратической ошибки. Когда значением размера шага является 1, алгоритм обеспечивает оптимальный компромисс между быстротой сходимости и установившейся среднеквадратической ошибкой.

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

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

Фактор утечки, используемый при реализовании текучего адаптивного фильтра в виде скалярного числового значения в области значений [0,1]. Когда значение меньше 1, Системный объект реализует текучий адаптивный алгоритм. Когда значение равняется 1, объект не обеспечивает утечки в методе адаптации.

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

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

Усреднение фактора использовалось для расчета экспоненциально оконных степеней входного сигнала БПФ в содействующих обновлениях в виде действительного скаляра в области значений (0,1].

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

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

Возместите для терминов нормализации в содействующих обновлениях в виде неотрицательного действительного скалярного значения. Это значение свойства используется, чтобы избежать деления на нуль или деления очень небольшими числами, если какая-либо из степеней входного сигнала БПФ становится очень маленькой.

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

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

Начальное общее значение всех степеней входного сигнала БПФ в виде положительного числового скаляра.

Если вы изменяете это значение, если объект заблокирован, изменение вступает в силу только после того, как вы сбрасываете объект.

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

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

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

Если вы изменяете это значение, если объект заблокирован, изменение вступает в силу только после того, как вы сбрасываете объект.

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

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

Заблокированное состояние коэффициента обновляется в виде:

  • false – Объект постоянно обновляет коэффициенты фильтра.

  • true – Коэффициенты фильтра не становятся обновленными, и их значения остаются в текущем значении.

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

Типы данных: логический

Это свойство доступно только для чтения.

Текущее дискретное преобразование Фурье коэффициентов фильтра, возвращенных как вектор-строка. Для 'Constrained FDAF' и 'Unconstrained FDAF' алгоритмы, длина этого вектора равна сумме Length значение и BlockLength значение. Это свойство инициализируется к значениям БПФ InitialCoefficients свойство. Чтобы получить дискретное преобразование Фурье коэффициентов фильтра, вызовите объект и получите доступ к FFTCoefficients свойство объекта.

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

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

Синтаксис

Описание

[y,err] = fdaf(x,d) фильтрует входной сигнал, x, использование d как желаемый сигнал, и возвращает отфильтрованный выходной параметр в y и ошибка фильтра в err. Системный объект оценивает, что веса фильтра должны были минимизировать ошибку между выходным сигналом и желаемым сигналом. БПФ этих весов фильтра может быть получен путем доступа к FFTCoefficients свойство после вызова объектного алгоритма.

Входные параметры

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

Сигнал, который будет отфильтрован КИХ частотного диапазона адаптивный фильтр. Вход, x, и желаемый сигнал, d, должен иметь тот же размер и тип данных. Длина входного вектора должна быть делимой значением свойства BlockLength.

Вход, x, может быть сигнал переменного размера, пока длина системы координат является кратной BlockLength. Можно изменить число элементов в вектор-столбце, даже когда объект заблокирован. Системный объект блокирует, когда вы вызываете объект запустить его алгоритм.

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

Частотный диапазон адаптивный фильтр адаптирует свои веса фильтра, чтобы минимизировать ошибку, err, и сходитесь входной сигнал, x, к желаемому сигналу, d, максимально тесно.

Входной сигнал и желаемый сигнал должны иметь тот же размер и тип данных. Длина желаемого сигнального вектора должна быть делимой BlockLength значение свойства.

Входной сигнал может быть сигналом переменного размера, пока длина системы координат является кратной BlockLength. Можно изменить число элементов в вектор-столбце, даже когда объект заблокирован. Системный объект блокирует, когда вы вызываете объект запустить его алгоритм.

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

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

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

Фильтрованный выходной параметр, возвращенный как вектор-столбец. Объект адаптирует свои веса фильтра, чтобы сходиться входной сигнал, x, совпадать с желаемым сигналом, d. Фильтр выводит сходившийся сигнал.

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

Различие между выходным сигналом и желаемым сигналом, возвращенным как вектор-столбец. Цель адаптивного фильтра состоит в том, чтобы минимизировать эту ошибку. Объект адаптирует свои веса, чтобы сходиться к оптимальным весам фильтра, которые производят выходной сигнал, который совпадает с желаемым сигналом максимально тесно. Для получения дополнительной информации о как err вычисляется, см. [2].

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

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

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

release(obj)

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

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Передайте сигнал квадратурного манипулирования сдвига фазы (QPSK) через шумный канал передачи. Минимизируйте шум в полученном сигнале с помощью частотного диапазона адаптивный фильтр.

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

Сигнал QPSK, s, передается через шумный канал. Числитель и коэффициенты знаменателя канала содержатся в векторах b и a, соответственно. Полученный сигнал, r, полученный в конце канала передачи содержит переданный сигнал QPSK и шум, добавленный к каналу, n. Адаптивный фильтр используется, чтобы извлечь сигнал QPSK из полученного шумного входа. Желаемый сигнал, d, является задержанной версией сигнала QPSK.

D = 16;
b  = exp(1i*pi/4)*[-0.7 1];
a  = [1 -0.7];
ntr = 1024;
s  = sign(randn(1,ntr+D)) + 1i*sign(randn(1,ntr+D));
n  = 0.1*(randn(1,ntr+D) + 1i*randn(1,ntr+D));
r  = filter(b,a,s) + n;
x  = r(1+D:ntr+D);
d  = s(1:ntr);

Создайте dsp.FrequencyDomainAdaptiveFilter возразите, чтобы смоделировать частотный диапазон адаптивный фильтр длины 32 касания и размер шага 0,1. Адаптивный фильтр принимает задержанную версию полученного сигнала и желаемого сигнала как входные параметры. Выход адаптивного фильтра сравнивается с желаемым сигналом. Ошибка между двумя сигналами представляет шум, добавленный к каналу передачи. Адаптивный фильтр обновляет свои коэффициенты, пока эта ошибка не становится минимальной. Чтобы получить дискретное преобразование Фурье коэффициентов фильтра, вызовите fdaf объект и доступ свойство FFTCoefficients этого объекта.

mu  = 0.1;
fdaf = dsp.FrequencyDomainAdaptiveFilter('Length',32,'StepSize',mu);
[y,e] = fdaf(x,d);
fftCoeffs = fdaf.FFTCoefficients
fftCoeffs = 1×64 complex

   0.6802 - 0.6847i  -0.2485 - 0.9427i  -0.9675 - 0.2123i  -0.5605 + 0.8002i   0.5748 + 0.7593i   0.8541 - 0.3917i  -0.2526 - 0.9022i  -0.9298 + 0.1255i   0.0181 + 0.9366i   0.9207 + 0.0511i   0.1063 - 0.8972i  -0.8919 - 0.1829i  -0.2668 + 0.9113i   0.9215 + 0.3186i   0.3417 - 0.8859i  -0.8285 - 0.3760i  -0.4317 + 0.8200i   0.8741 + 0.4765i   0.4874 - 0.9075i  -0.8517 - 0.4774i  -0.4709 + 0.7632i   0.7468 + 0.4833i   0.5193 - 0.7995i  -0.8218 - 0.5649i  -0.5908 + 0.7768i   0.7316 + 0.5866i   0.5806 - 0.7270i  -0.7148 - 0.5998i  -0.6287 + 0.6702i   0.6575 + 0.6379i   0.6332 - 0.7153i  -0.7659 - 0.6424i  -0.6678 + 0.7294i   0.6536 + 0.6891i   0.7006 - 0.6333i  -0.6594 - 0.7117i  -0.7207 + 0.6517i   0.6031 + 0.7239i   0.7362 - 0.5776i  -0.5869 - 0.7682i  -0.7975 + 0.5789i   0.5449 + 0.7992i   0.7909 - 0.5343i  -0.5512 - 0.8070i  -0.8392 + 0.5338i   0.4605 + 0.8493i   0.8358 - 0.3921i  -0.3751 - 0.8388i  -0.8739 + 0.3785i   0.3625 + 0.9048i

Постройте Синфазное и Квадратурные компоненты желаемого, выведите, и сигналы ошибки.

plot(1:ntr,real([d;y;e]))
legend('Desired','Output','Error')
title('In-Phase Components')
xlabel('Time Index'); ylabel('signal value')

Figure contains an axes object. The axes object with title In-Phase Components contains 3 objects of type line. These objects represent Desired, Output, Error.

plot(1:ntr,imag([d;y;e]))
legend('Desired','Output','Error')
title('Quadrature Components')
xlabel('Time Index')
ylabel('signal value')

Figure contains an axes object. The axes object with title Quadrature Components contains 3 objects of type line. These objects represent Desired, Output, Error.

Создайте графики рассеивания полученного сигнала и желаемого сигнала.

plot(x(ntr-100:ntr),'.')
axis([-3 3 -3 3])
title('Received Signal Scatter Plot')
axis('square')
xlabel('Real[x]')
ylabel('Imag[x]') 
grid on

Figure contains an axes object. The axes object with title Received Signal Scatter Plot contains an object of type line.

plot(d(ntr-100:ntr),'.')
axis([-3 3 -3 3])
title('Desired Signal Scatter Plot')
axis('square')
xlabel('Real[y]')
ylabel('Imag[y]')
grid on

Figure contains an axes object. The axes object with title Desired Signal Scatter Plot contains an object of type line.

Адаптивный фильтр компенсирует полученный сигнал устранить шум. Постройте график рассеивания компенсируемого сигнала.

plot(y(ntr-100:ntr),'.')
axis([-3 3 -3 3])
title('Equalized Signal Scatter Plot')
axis('square')
xlabel('Real[y]')
ylabel('Imag[y]')
grid on

Figure contains an axes object. The axes object with title Equalized Signal Scatter Plot contains an object of type line.

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

Примечание: Этот пример запускается только в R2018a или позже.

Инициализация

Сгенерируйте длинную КИХ-импульсную характеристику 8 192 выборок и присвойте импульсную характеристику dsp.FIRFilter объект, room. Это объектные модели импульсная характеристика комнаты. Создайте dsp.FrequencyDomainAdaptiveFilter фильтр, lmsfilt, в разделенном ограниченном режиме. Установите длину фильтра к одной четверти длина импульсной характеристики комнаты. Установите длину блока фильтра к 128 выборкам. Установите размер шага на 0,025, начальную степень к 0,01, насчитав фактор к 0,98, возместите к 1, и фактор утечки к 1. Инициализируйте dsp.ArrayPlot возразите, чтобы просмотреть коэффициенты фильтра. Инициализируйте timescope возразите, чтобы показать среднеквадратическую ошибку между фильтром выход и желаемым сигналом.

fs = 16e3;
m = 8192;
[b,a] = cheby2(4,20,[0.1 0.7]);
impulseResponseGenerator = dsp.IIRFilter(...
    'Numerator', [zeros(1,6) b], ...
    'Denominator', a);
roomImpulseResponse = impulseResponseGenerator( ...
    (log(0.99*rand(1,m)+0.01).*sign(randn(1,m)).*exp(-0.002*(1:m)))');
roomImpulseResponse = roomImpulseResponse/norm(roomImpulseResponse);
room = dsp.FIRFilter('Numerator',roomImpulseResponse');

lmsfilt = dsp.FrequencyDomainAdaptiveFilter(...
    'Method','Partitioned constrained FDAF',...
    'Length',m/4, ...
    'BlockLength',128,...
    'StepSize',0.025, ...
    'InitialPower',0.01, ...
    'AveragingFactor',0.98,...
    'Offset',1,...
    'LeakageFactor',1);

FrameSize = lmsfilt.BlockLength; NIter = 2000;

AP = dsp.ArrayPlot('YLimits',[-0.2 .2],'ShowLegend',true, ...
    'Position',[0 0 560 420],'ChannelNames', ...
    {'Actual Coefficients','Estimated Coefficients'});

TS = timescope('SampleRate',fs,'TimeSpanSource','property',...
    'TimeSpan',FrameSize*NIter/fs,...
    'TimeUnits','Seconds',...
    'YLimits',[-50 0],'Title','Learning curve',...
    'YLabel','dB', ...
    'BufferLength',FrameSize*NIter,...
    'ShowGrid',true);

signalmean = dsp.MovingAverage('SpecifyWindowLength',false);

Потоковая передача

Сгенерируйте случайный входной сигнал с помощью randn функция. Формат кадра входа совпадает с длиной блока адаптивного фильтра. Желаемый сигнал является суммой выхода КИХ-фильтра (комната) и сигнал белого Гауссова шума. Передайте входной сигнал и желаемый сигнал к адаптивному фильтру. Вычислите адаптивный фильтр выход и ошибка между выходом и желаемым сигналом.

Оцените коэффициенты временного интервала адаптивного фильтра путем взятия ОБПФ содействующего вектора частотного диапазона, возвращенного lmsfilt.FFTCoefficients свойство. Сравните предполагаемые коэффициенты с фактическими коэффициентами, присвоенными КИХ-фильтру (комната). Если адаптивный фильтр сходился свой выход к желаемому сигналу и минимизировал сигнал ошибки, предполагаемое содействующее соответствие тесно с фактическими коэффициентами. Это означает, что адаптивный фильтр успешно адаптировал себя, чтобы смоделировать импульсную характеристику КИХ-фильтра (комната).

for k = 1:NIter
    x = randn(FrameSize,1);
    d = room(x) + 0.01*randn(FrameSize,1);
    [y,e] = lmsfilt(x,d);
    FFTCoeffs = lmsfilt.FFTCoefficients;
    w = ifft(FFTCoeffs,[],2,'symmetric');
    w = w(:,1:FrameSize) + w(:,FrameSize+1:end);
    w = reshape(w.',1,m/4);
    AP([roomImpulseResponse(1:m/4),w.']);
    TS(10*log10(signalmean(abs(e).^2)));
end

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

Алгоритмы

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

Частотный диапазон адаптивная фильтрация состоит из трех шагов - фильтрация, оценка погрешности и адаптация веса касания. Этот алгоритм реализует КИХ, просачивающегося частотный диапазон с помощью сохранения перекрытие или метода перекрытия-суммы. Для получения дополнительной информации реализации этих двух методов смотрите раздел Algorithms в dsp.FrequencyDomainFIRFilter объектная страница. Оценка погрешности и адаптация веса касания реализованы с помощью быстрого LMS-алгоритма блока (FBLMS).

Ссылки

[1] Shynk, J.J. "Частотный диапазон и Многоскоростная Адаптивная Фильтрация". Журнал Обработки сигналов IEEE. Издание 9, Номер 1, 1992, стр 14–37.

[2] Farhang-Boroujeny, B., адаптивные фильтры: теория и приложения, Чичестер, Англия, Вайли, 1998.

[3] Stockham, T. G. "Скоростная Свертка младшая и Корреляция". Продолжения 1 966 Компьютерных Конференций по Соединению Spring, AFIPS, Издания 28, 1966, стр 229–233.

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

Введенный в R2013b