dsp.FrequencyDomainFIRFilter

Фильтрация входного сигнала в частотном диапазоне

Описание

The dsp.FrequencyDomainFIRFilter Система object™ реализует фильтр на основе частотного диапазона, быстрого преобразования Фурье (FFT), чтобы фильтровать потоковый входной сигнал. Во временном интервале операция фильтрации включает свертку между входом и импульсной характеристикой фильтра с конечной импульсной характеристикой (КИХ). В частотный диапазон операция фильтрации включает умножение преобразования Фурье входа и преобразования Фурье импульсной характеристики. Фильтрация частотного диапазона эффективна, когда импульсная характеристика очень длинная. Можно задать коэффициенты фильтра непосредственно в частотный диапазон путем установки NumeratorDomain на 'Frequency'.

Этот объект использует overlap-save и методы перекрытия-суммы, чтобы выполнить фильтрацию частотного диапазона. Для фильтров с длинной длиной импульсной характеристики задержка, присущая этим двум методам, может быть значительной. Чтобы уменьшить эту задержку, dsp.FrequencyDomainFIRFilter объект разбивает импульсную характеристику на более короткие блоки и реализует наложение-сохранение и методы перекрытия-суммы на этих более коротких блоках. Чтобы разбить импульсную характеристику, задайте значение свойства PartitionForReducedLatency true. Для получения дополнительной информации об этих двух методах и об уменьшении задержки через разбиение импульсной характеристики, см. Алгоритмы.

Для фильтрации входного сигнала в частотный диапазон:

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

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

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

Создание

Описание

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

пример

fdf = dsp.FrequencyDomainFIRFilter(num) создает объект частотного диапазона конечной импульсной характеристики фильтра с набором свойств Numerator для num.

Пример: dsp.FrequencyDomainFIRFilter(fir1(400,2 * 2000 / 8000));

пример

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

Пример: dsp.FrequencyDomainFIRFilter('Method','Overlap-add');

Свойства

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

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

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

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

Метод фильтра частотного диапазона, заданный как 'Overlap-save' или 'Overlap-add'. Для получения дополнительной информации об этих двух методах см. Алгоритмы.

Область коэффициентов фильтра, заданная как один из следующих:

  • 'Time' -- Укажите числитель фильтра во временной области в Numerator свойство.

  • 'Frequency' -- Задайте частотную характеристику фильтра в FrequencyResponse свойство.

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

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

Зависимости

Это свойство применяется при NumeratorDomain установлено в 'Time'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Поддержка комплексного числа: Да

Частотная характеристика фильтра, заданная как вектор-строка или матрица. Когда PartitionForReducedLatency является false, FrequencyResponse должен быть вектор-строка. Длина БПФ равна длине FrequencyResponse вектор. Когда PartitionForReducedLatency является true, FrequencyResponse должна быть 2 P -by- N матрицей, где P - размер раздела, а N - количество разделов.

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

Зависимости

Это свойство применяется при NumeratorDomain установлено в 'Frequency'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Поддержка комплексного числа: Да

Длина числителя временной области, заданная как положительный целочисленный скаляр.

Зависимости

Это свойство применяется при NumeratorDomain установлено в 'Frequency' и PartitionForReducedLatency установлено в false.

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

Флаг, чтобы указать, все ли коэффициенты фильтра действительны, задается как true или false.

Зависимости

Это свойство применяется при NumeratorDomain установлено в 'Frequency'.

Флаг числителю разделов для уменьшения задержки, заданный как одно из следующего:

  • false - Фильтр использует традиционные функции сохранения или метода перекрытия-суммы перекрытия. Задержка в этом случае является FFTLength - length (Numerator) + 1.

  • true -- В этом режиме объект разбивает числитель на сегменты длины, заданные свойством PartitionLength. Фильтр выполняет наложение-сохранение или перекрытие-добавление для каждого раздела и объединяет частичные результаты, чтобы сформировать общий выход. Теперь задержка уменьшается до длины разбиения.

Длина БПФ, заданная как положительное целое число. Значение по умолчанию этого свойства, [], указывает, что длина БПФ равна удвоенной длине числителя. Длина БПФ должна быть больше или равной длине числителя.

Пример: 64

Зависимости

Это свойство применяется при установке NumeratorDomain свойство к 'Time' и свойство PartitionForReducedLatency в false.

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

Длина раздела числителя, заданная как положительное целое число, меньше или равное длине числителя.

Пример: 40

Пример: 60

Зависимости

Это свойство применяется, когда вы устанавливаете NumeratorDomain свойство к 'Time' и свойство PartitionForReducedLatency в true.

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

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

Задержка фильтрации в выборках, возвращенная как целое число, больше 0. Когда PartitionForReducedLatency false, задержка равна FFTLength - длина (числитель) + 1. Когда PartitionForReducedLatency является true, задержка равна длине разбиения.

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

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

Синтаксис

Описание

пример

fdfOut = fdf(input) фильтрует входной сигнал и выводит отфильтрованный сигнал. Объект фильтрует каждый канал входного сигнала независимо друг от друга во времени в частотный диапазон.

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

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

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

Пример: randn(164,4)

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

Пропустите входной сигнал с помощью методов наложения-добавления и сохранения перекрытия и сравните выходы с выходным сигналом конечной импульсной характеристики.

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

Спроектируйте коэффициенты lowpass конечной импульсной характеристики- fir1 функция. Частота дискретизации составляет 8 кГц, а частота отключения фильтра - 2 кГц. Импульсная характеристика имеет длину 400.

impL    = 400;
Fs      = 8000;
Fcutoff = 2000;
imp     = fir1(impL,2*Fcutoff/Fs);

Создайте два dsp.FrequencyDomainFIRFilter объекты и dsp.FIRFilter объект. Установите числитель всех трех фильтров равным imp. Задержка вывода конечной импульсной характеристики по задержке частотного диапазона фильтра.

fdfOA = dsp.FrequencyDomainFIRFilter(imp,'Method','overlap-add');
fdfOS = dsp.FrequencyDomainFIRFilter(imp,'Method','overlap-save');
fir = dsp.FIRFilter('Numerator',imp);
dly = dsp.Delay('Length',fdfOA.Latency);

Создайте два dsp.SineWave объекты. Сгенерированные синусоиды имеют частоту дискретизации 8000 Гц, формат кадра 256 и частоты 100 Гц и 3 кГц, соответственно. Создайте timescope объект для просмотра отфильтрованных выходов.

frameLen  = 256;

sin_100Hz = dsp.SineWave('Frequency',100,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
sin_3KHz  = dsp.SineWave('Frequency',3e3,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
ts = timescope('TimeSpanOverrunAction','Scroll',...
    'ShowGrid',true,'TimeSpanSource','Property','TimeSpan',5 * frameLen/Fs,...
    'YLimits',[-1.1 1.1],...
    'ShowLegend',true,...
    'SampleRate',Fs,...
    'ChannelNames',{'Overlap-add','Overlap-save','Direct-form FIR'});

Вытекание

Поток 1e4 систем координат зашумленных входных данных. Передайте эти данные через фильтры частотного диапазона и конечной импульсной характеристики фильтр. Просмотрите отфильтрованные выходы во временных возможностях.

numFrames = 1e4;
for idx = 1:numFrames
    x = sin_100Hz() + sin_3KHz() + 0.01*randn(frameLen,1);
    yOA = fdfOA(x);
    yOS = fdfOS(x);
    yFIR = fir(dly(x));
    ts([yOA,yOS,yFIR]);
end

Выходные выходы всех трех фильтров точно совпадают.

Разделите длину импульсной характеристики конечной импульсной характеристики частотного диапазона. Сравните выходы секционированного фильтра и исходного фильтра.

Спроектируйте коэффициенты lowpass конечной импульсной характеристики- fir1 функция. Частота дискретизации составляет 8 кГц, и частота отключения фильтра составляет 2 кГц. Импульсная характеристика имеет длину 4000.

impL    = 4000;
Fs      = 8000;
Fcutoff = 2000;
imp     = fir1(impL,2 * Fcutoff / Fs);

Создайте dsp.FrequencyDomainFIRFilter с коэффициентами, установленными в imp вектор. Задержка этого фильтра задается $FFT Length - Length(Numerator) + 1$равной 4002. По умолчанию длина БПФ равна удвоенной длине числителя. Это делает задержку пропорциональной длине импульсной характеристики.

fdfOS  = dsp.FrequencyDomainFIRFilter(imp,'Method','overlap-save');
fprintf('Frequency domain filter latency is %d samples\n',fdfOS.Latency);
Frequency domain filter latency is 4002 samples

Разделите импульсную характеристику на блоки длины 256. Задержка после разбиения пропорциональна длине блока.

fdfRL  = dsp.FrequencyDomainFIRFilter(imp,'Method','overlap-save',...
    'PartitionForReducedLatency',true,...
    'PartitionLength',256);
fprintf('Frequency domain filter latency is %d samples\n',fdfRL.Latency);
Frequency domain filter latency is 256 samples

Сравните выходы двух фильтров частотного диапазона. Задержка fdfOS равен 4002, и задержка fdfRL - 256. Чтобы сравнить два выхода, задержите вход до fdfRL по 4002 - 256 выборки.

dly = dsp.Delay('Length',(fdfOS.Latency-fdfRL.Latency));

Создайте два dsp.SineWave объекты. Синусоиды имеют частоту дискретизации 8000 Гц, формат кадра 256 и частоты 100 Гц и 3 кГц, соответственно. Создайте timescope объект для просмотра отфильтрованных выходов.

frameLen  = 256;
sin_100Hz = dsp.SineWave('Frequency',100,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
sin_3KHz  = dsp.SineWave('Frequency',3e3,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
ts = timescope('TimeSpanOverrunAction','Scroll','ShowGrid',true,...
    'TimeSpanSource','Property','TimeSpan',5 * frameLen/Fs,...
    'YLimits',[-1.1 1.1],...
    'ShowLegend',true,...
    'SampleRate',Fs,...
    'ChannelNames',{'Overlap-save With Partition','Overlap-save Without Partition'});

Поток 1e4 систем координат зашумленных входных данных. Передайте эти данные через два фильтра частотного диапазона. Просмотрите отфильтрованные выходы во временных возможностях.

numFrames = 1e4;
for idx = 1:numFrames
    x = sin_100Hz() + sin_3KHz() + .1 * randn(frameLen,1);
    yRL = fdfRL(dly(x));
    yOS = fdfOS(x);
    ts([yRL,yOS]);
end

Выходы точно совпадают.

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

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

Спроектируйте коэффициенты lowpass конечной импульсной характеристики- fir1 функция. Частота дискретизации составляет 8 кГц, а частота отключения фильтра - 2 кГц. Импульсная характеристика во временной области имеет длину 400. Вычислите БПФ этой импульсной характеристики и задайте эту характеристику как частотную характеристику конечной импульсной характеристики частотного диапазона. Установите длину числителя во временной области, заданную как NumeratorLength свойство, к количеству элементов во временной импульсной характеристики.

impL    = 400;
Fs      = 8000;
Fcutoff = 2000;
imp     = fir1(impL,2 * Fcutoff / Fs);
H   = fft(imp , 2 * numel(imp));
oa  = dsp.FrequencyDomainFIRFilter('NumeratorDomain','Frequency',...
    'FrequencyResponse', H,...
    'NumeratorLength',numel(imp),...
    'Method','overlap-add');
fprintf('Frequency domain filter latency is %d samples\n',oa.Latency);
Frequency domain filter latency is 402 samples

Создайте dsp.FIRFilter Системный объект? и задайте числитель как коэффициенты временной области, вычисленные с помощью fir1 функция, imp. Задержка конечной импульсной характеристики на выходе задержкой фильтра конечной импульсной характеристики частотной области.

fir = dsp.FIRFilter('Numerator',imp);
dly = dsp.Delay('Length',oa.Latency);

Создайте два dsp.SineWave объекты. Сгенерированные синусоиды имеют частоту дискретизации 8000 Гц, формат кадра 256 и частоты 100 Гц и 3 кГц, соответственно. Создайте timescope объект для просмотра отфильтрованных выходов.

frameLen  = 256;

sin_100Hz = dsp.SineWave('Frequency',100,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
sin_3KHz  = dsp.SineWave('Frequency',3e3,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);

ts = timescope('TimeSpanOverrunAction','Scroll',...
    'ShowGrid',true,'YLimits',[-1.1 1.1],...
    'TimeSpanSource','Property','TimeSpan',5 * frameLen/Fs,...
    'ShowLegend',true,...
    'SampleRate',Fs,...
    'ChannelNames',{'Overlap-add','Direct-form FIR'});

Вытекание

Поток 1e4 систем координат зашумленных входных данных. Передайте эти данные через фильтр частотного диапазона конечной импульсной характеристики и фильтр конечной импульсной характеристики во временной области. Просмотрите отфильтрованные выходы во временных возможностях.

numFrames = 1e4;
for idx = 1:numFrames
    x = sin_100Hz() + sin_3KHz() + 0.01 * randn(frameLen,1);
    y1 = oa(x);
    y2 = fir(dly(x));
    ts([y1,y2]);
end

Выходные выходы обоих фильтров точно совпадают.

Алгоритмы

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

Overlap-save и overlap-add являются двумя методами фильтрации на основе FFT частотного диапазона, которые использует этот алгоритм.

Ссылки

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

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

.
Введенный в R2017b
Для просмотра документации необходимо авторизоваться на сайте