dsp.FrequencyDomainFIRFilter

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

Описание

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

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

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

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

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

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

Создание

Описание

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 Используя Системные объекты.

Метод фильтра частотного диапазона в виде любого '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 должна быть матрица 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) фильтрует входной сигнал и выводит отфильтрованный сигнал. Объект фильтрует каждый канал входного сигнала независимо в зависимости от времени в частотном диапазоне.

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

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

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

Пример: 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 кГц, соответственно. Создайте 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$, который равен 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 кГц, соответственно. Создайте 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 выход задержкой КИХ-фильтра частотного диапазона.

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

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

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

Алгоритмы

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

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

Ссылки

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

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

Введенный в R2017b