dsp. FrequencyDomainFIRFilter

Отфильтруйте входной сигнал в частотном диапазоне

Описание

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

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

Отфильтровать входной сигнал в частотном диапазоне:

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

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

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

Создание

Синтаксис

fdf = dsp.FrequencyDomainFIRFilter
fdf = dsp.FrequencyDomainFIRFilter(num)
fdf = dsp.FrequencyDomainFIRFilter(Name,Value)

Описание

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

пример

fdf = dsp.FrequencyDomainFIRFilter(num) создает КИХ-объект фильтра частотного диапазона с набором свойств Числителя к num.

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

пример

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

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

Свойства

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

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

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

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

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

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

  • Время Задайте числитель фильтра временного интервала в свойстве Numerator.

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

КИХ-коэффициенты фильтра, заданные как вектор - строка.

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

Зависимости

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

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

Частотная характеристика фильтра, заданного как вектор - строка или матрица. Когда PartitionForReducedLatency является false, FrequencyResponse должен быть вектором - строкой. Длина БПФ равна длине вектора FrequencyResponse. Когда PartitionForReducedLatency является true, FrequencyResponse должен быть матрицей 2P-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 – длина (Числитель) + 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)

Описание

пример

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. Задержите FIR вывод задержкой фильтра частотного диапазона.

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. Сгенерированные синусоиды имеют частоту дискретизации 8 000 Гц, формат кадра 256 и частоты 100 Гц и 3 кГц, соответственно. Создайте объект dsp.TimeScope просмотреть отфильтрованные выходные параметры.

frameLen  = 256;

sin_100Hz = dsp.SineWave('Frequency',100,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
sin_3KHz  = dsp.SineWave('Frequency',3e3,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
ts = dsp.TimeScope('TimeSpanOverrunAction','Scroll',...
    'ShowGrid',true,'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. Задержкой этого фильтра дают, который равен 4 002. По умолчанию длина БПФ равна дважды длине числителя. Это делает задержку пропорциональной импульсной продолжительности ответа.

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 4 002 - 256 выборок.

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

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

frameLen  = 256;
sin_100Hz = dsp.SineWave('Frequency',100,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
sin_3KHz  = dsp.SineWave('Frequency',3e3,'SampleRate',Fs,...
    'SamplesPerFrame',frameLen);
ts = dsp.TimeScope('TimeSpanOverrunAction','Scroll',...
    'ShowGrid',true,'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 вывод задержкой КИХ-фильтра частотного диапазона.

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

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

frameLen  = 256;

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

ts = dsp.TimeScope('TimeSpanOverrunAction','Scroll',...
    'ShowGrid',true,'TimeSpan',5 * frameLen/Fs,...
    'YLimits',[-1.1 1.1],...
    '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

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

Алгоритмы

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

Сохраните перекрытие и наложитесь - добавляют, два частотных диапазона основанные на БПФ методы фильтрации этот алгоритм использование.

Ссылки

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

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

Введенный в R2017b