exponenta event banner

dsp. FrequencyDomainAdaptiveFilter

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

Описание

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

Для фильтрации сигнала с помощью частотно-доменного FIR-адаптивного фильтра:

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

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

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

Создание

Описание

пример

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

пример

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

пример

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

Пример: 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, объект System реализует адаптивный алгоритм утечки. Если значение равно 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 - Коэффициенты фильтра не обновляются, и их значения остаются на текущем уровне.

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

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

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

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

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

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

Синтаксис

Описание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

Передача сигнала квадратурной фазовой манипуляции (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. The axes 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. The axes 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. The axes 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. The axes 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. The axes with title Equalized Signal Scatter Plot contains an object of type line.

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

Примечание.Этот пример выполняется только в R2018a или более поздних версиях.

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

Создайте длинную импульсную характеристику FIR из 8192 выборок и назначьте импульсную характеристику 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 функция. Размер кадра на входе соответствует длине блока адаптивного фильтра. Требуемый сигнал представляет собой сумму выходного сигнала КИХ-фильтра (помещения) и сигнала белого гауссова шума. Передайте входной сигнал и требуемый сигнал в адаптивный фильтр. Вычислите выходной сигнал адаптивного фильтра и ошибку между выходным сигналом и требуемым сигналом.

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

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

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

Алгоритмы

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

Адаптивная фильтрация в частотной области состоит из трех этапов - фильтрация, оценка ошибок и адаптация веса отводов. Этот алгоритм реализует фильтрацию FIR в частотной области с использованием метода overlap-save или overlap-add. Дополнительные сведения о реализации этих двух методов см. в разделе Алгоритмы в dsp.FrequencyDomainFIRFilter страница объекта. Оценка ошибок и адаптация веса отводов реализуются с использованием алгоритма быстрого блочного LMS (FBLMS).

Ссылки

[1] Shynk, J.J. «Частотно-доменная и многоскоростная адаптивная фильтрация». Журнал обработки сигналов IEEE. Том 9, номер 1, 1992, стр. 14-37.

[2] Фарханг-Боруджени, Б., Адаптивные фильтры: теория и применение, Чичестер, Англия, Уайли, 1998.

[3] Штокам, Т. Г., младший «Высокоскоростное свертывание и корреляция». Материалы Весенней совместной компьютерной конференции 1966 года, AFIPS, том 28, 1966 год, стр. 229-233.

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

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