dsp.FIRDecimator

Многофазный КИХ decimator

Описание

dsp.FIRDecimator Система object™ передискретизирует входные параметры вектора или матрицы по первому измерению. КИХ decimator (как показано в схематическом) концептуально состоит из сглаживающегося КИХ-фильтра, сопровождаемого downsampler.

КИХ-фильтр фильтрует данные в каждом канале входа с помощью КИХ-фильтра прямой формы. КИХ-коэффициенты фильтра могут быть заданы через Numerator свойство, или может быть автоматически спроектирован объектом с помощью designMultirateFIR функция. designMultirateFIR функционируйте проектирует сглаживающийся КИХ-фильтр. downsampler, который следует за КИХ-фильтром, прореживает каждый канал отфильтрованных данных путем взятия каждого M-th выборка и отбрасывания M – 1 выборка, которые следуют. M является значением фактора децимации, который вы задаете. Получившийся сигнал дискретного времени имеет частоту дискретизации, которая является 1/M раз от исходной частоты дискретизации.

FIR decimator contains an anti-aliasing FIR filter followed by a downsampler.

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

Передискретизировать входные параметры вектора или матрицы по первому измерению:

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

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

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

При особых условиях этот Системный объект также поддерживает генерацию кода SIMD. Для получения дополнительной информации смотрите Генерацию кода.

Создание

Описание

пример

firdecim = dsp.FIRDecimator возвращает КИХ decimator объект с фактором децимации 2. Объект проектирует КИХ-коэффициенты фильтра с помощью designMultirateFIR(1,2) функция.

firdecim = dsp.FIRDecimator(M) возвращает КИХ decimator с DecimationFactor с целочисленным знаком набор свойств к M. Объект проектирует свои коэффициенты фильтра на основе фактора децимации M то, что вы задаете при создании объекта, использовании designMultirateFIR(1,M) функция. Спроектированный фильтр соответствует lowpass с сокращением в π/M в радиальных единицах частоты.

firdecim = dsp.FIRDecimator(M,'Auto') возвращает КИХ decimator с NumeratorSource набор свойств к 'Auto'. В этом режиме каждый раз существует обновление в факторе децимации, объект перепроектирует использование фильтра designMultirateFIR(1,M).

firdecim = dsp.FIRDecimator(M,num) возвращает КИХ decimator с DecimationFactor набор свойств к M и Numerator набор свойств к num.

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

firdecim = dsp.FIRDecimator(M,'legacy') возвращает КИХ decimator, где коэффициенты фильтра созданы с использованием fir1(35,0.4). Спроектированный фильтр имеет частоту среза 0.4π радианы/выборка.

Свойства

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

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

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

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

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

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

КИХ-содействующий источник фильтра в виде одного из следующего:

  • 'Property' – Коэффициенты числителя заданы через Numerator свойство.

  • 'Input port' – Коэффициенты числителя заданы как вход к объектному алгоритму.

  • 'Auto' – Коэффициенты числителя спроектированы автоматически с помощью designMultirateFIR(1,M) функция.

Коэффициенты числителя КИХ фильтруют в виде вектора-строки в степенях z–1. Следующее уравнение задает системную функцию для фильтра длины N +1:

H(z)=l=0Nblzl

Вектор b = [b0, b1, …, миллиард] представляет вектор из коэффициентов фильтра.

Чтобы предотвратить искажение в результате субдискретизации, передаточная функция фильтра должна иметь нормированную частоту среза, не больше, чем 1/M. Чтобы спроектировать эффективный фильтр сглаживания, используйте designMultirateFIR функция. Для примера смотрите, Десятикратно уменьшают Сумму Sine wave.

Зависимости

Это свойство отображается только, когда вы устанавливаете NumeratorSource к 'Property'.

Когда NumeratorSource установлен в 'Auto', коэффициенты числителя автоматически перепроектированы с помощью designMultirateFIR(1,M). Чтобы получить доступ к коэффициентам фильтра в режиме автоматического проектирования, введите objName.Numerator в MATLAB® командная строка.

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

Задайте реализацию КИХ-фильтра как любой Direct form или Direct form transposed.

Свойства фиксированной точки

Отметьте, чтобы использовать правила полной точности для вычислений с фиксированной точкой в виде одного из следующего:

  • true – Объект вычисляет все внутренние типы арифметических и выходных данных, использующие правила полной точности. Эти правила обеспечивают самые точные численные данные фиксированной точки. В этом режиме не применяются другие свойства фиксированной точки. Никакое квантование не происходит в объекте. Биты добавляются, по мере необходимости, чтобы гарантировать, что никакое округление или переполнение не происходят.

  • false – Типами данных с фиксированной точкой управляют посредством отдельных настроек свойства фиксированной точки.

Для получения дополнительной информации смотрите Полную точность для Fixed-Point System Objects and Set System Object Fixed-Point Properties.

Округление метода для операций фиксированной точки. Для получения дополнительной информации смотрите округление режима.

Зависимости

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

  • FullPrecisionOverride установите на true.

  • FullPrecisionOverride установите на false, ProductDataType установите на 'Full precision', AccumulatorDataType установите на 'Full precision', и OutputDataType установите на 'Same as accumulator'.

При этих условиях объект действует в режиме максимальной точности.

Действие переполнения для операций фиксированной точки в виде одного из следующего:

  • 'Wrap' – Объект переносит результат своих операций фиксированной точки.

  • 'Saturate' – Объект насыщает результат своих операций фиксированной точки.

Для получения дополнительной информации о действиях переполнения смотрите режим переполнения для операций фиксированной точки.

Зависимости

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

  • FullPrecisionOverride установите на true.

  • FullPrecisionOverride установите на false, OutputDataType установите на 'Same as accumulator', ProductDataType установите на 'Full precision', и AccumulatorDataType установите на 'Full precision'

При этих условиях объект действует в режиме максимальной точности.

Тип данных КИХ фильтрует коэффициенты в виде:

  • Same word length as input – Размер слова коэффициентов совпадает с размером слова входа. Дробная длина вычисляется, чтобы дать самую лучшую точность.

  • Custom – Содействующий тип данных задан как пользовательский числовой тип через CustomCoefficientsDataType свойство.

Word и дробные длины содействующего типа данных в виде автосо знаком numerictype (Fixed-Point Designer) с размером слова 16 и дробной длиной 15.

Зависимости

Это свойство применяется, когда вы устанавливаете CoefficientsDataType свойство к Custom.

Тип данных продукта вывел в этом объекте в виде одного из следующего:

  • 'Full precision' – Тип выходных данных продукта имеет полную точность.

  • 'Same as input' – Объект задает тип выходных данных продукта, чтобы совпасть с тем из типа входных данных.

  • 'Custom' – Тип выходных данных продукта задан как пользовательский числовой тип через CustomProductDataType свойство.

Для получения дополнительной информации о типе выходных данных продукта смотрите Типы данных Умножения.

Зависимости

Это свойство применяется, когда вы устанавливаете FullPrecisionOverride к false.

Word и дробные длины типа данных продукта в виде числового типа автосо знаком с размером слова 32 и дробная длина 30.

Зависимости

Это свойство применяется только, когда вы устанавливаете FullPrecisionOverride к false и ProductDataType к 'Custom'.

Тип данных операции накопления в этом объекте в виде одного из следующего:

  • 'Full precision' – Операция накопления имеет полную точность.

  • 'Same as product' – Объект задает тип данных аккумулятора, чтобы совпасть с тем из типа выходных данных продукта.

  • 'Same as input' – Объект задает тип данных аккумулятора, чтобы совпасть с тем из типа входных данных.

  • 'Custom' – Тип данных аккумулятора задан как пользовательский числовой тип через CustomAccumulatorDataType свойство.

Зависимости

Это свойство применяется, когда вы устанавливаете FullPrecisionOverride к false.

Word и дробные длины типа данных аккумулятора в виде числового типа автосо знаком с размером слова 32 и дробная длина 30.

Зависимости

Это свойство применяется только, когда вы устанавливаете FullPrecisionOverride к false и AccumulatorDataType к 'Custom'.

Тип данных объектного выхода в виде одного из следующего:

  • 'Same as accumulator' – Тип выходных данных совпадает с типом типа выходных данных аккумулятора.

  • 'Same as input' – Тип выходных данных совпадает с типом типа входных данных.

  • 'Same as product' – Тип выходных данных совпадает с типом типа выходных данных продукта.

  • 'Custom' – Тип выходных данных задан как пользовательский числовой тип через CustomOutputDataType свойство.

Зависимости

Это свойство применяется, когда вы устанавливаете FullPrecisionOverride к false.

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

Зависимости

Это свойство применяется только, когда вы устанавливаете FullPrecisionOverride к false и OutputDataType к 'Custom'.

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

Описание

пример

y = firdecim(x) выводит отфильтрованные и прореженные значения, y, из входного сигнала, x.

y = firdecim(x,num) использует КИХ-фильтр, num, десятикратно уменьшать входной сигнал. Эта настройка допустима только когда 'NumeratorSource' свойство установлено в 'Input port'.

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

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

Ввод данных в виде вектор-столбца или матрицы размера P-by-Q. Количество входных строк, P, должно быть кратным DecimationFactor свойство. Входные столбцы представляют Q независимые каналы.

Этот вход переменного размера поддержки объектов и не поддерживает комплексные входные параметры фиксированной точки без знака.

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

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

Зависимости

Этот вход принят только когда 'NumeratorSource' свойство установлено в 'Input port'.

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

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

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

КИХ десятикратно уменьшил выходной параметр, возвращенный как вектор-столбец или матрица размера P/M-by-Q, где M является фактором децимации.

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

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

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

release(obj)

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

freqzЧастотная характеристика дискретного времени фильтрует Системный объект
fvtoolВизуализируйте частотную характеристику фильтров DSP
infoИнформация о Системном объекте фильтра
costОцените стоимость реализации Системного объекта фильтра
polyphaseМногофазное разложение многоскоростного фильтра
generatehdlСгенерируйте HDL-код для квантованного фильтра DSP (требует Filter Design HDL Coder),
impzИмпульсная характеристика дискретного времени фильтрует Системный объект
coeffsВозвращает коэффициенты Системного объекта фильтра в структуре
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Десятикратно уменьшите сумму синусоид на коэффициент 2 и на коэффициент 4.

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

Начните с волны косинуса, которая имеет угловую частоту π4 радианы/выборка.

x = cos(pi/4*(0:95)');

Спроектируйте фильтр по умолчанию

Создайте dsp.FIRDecimator объект. Чтобы предотвратить искажение, объект использует сглаживающийся фильтр lowpass перед субдискретизацией. По умолчанию сглаживающийся фильтр lowpass создан с использованием designMultirateFIR функция. Функция проектирует фильтр на основе фактора децимации, который вы задаете, и хранит коэффициенты в Numerator свойство. Для фактора децимации 2, объект проектирует коэффициенты с помощью designMultirateFIR(1,2).

firdecim = dsp.FIRDecimator(2)
firdecim = 
  dsp.FIRDecimator with properties:

    DecimationFactor: 2
     NumeratorSource: 'Property'
           Numerator: [0 -1.0054e-04 0 3.8704e-04 0 -0.0010 0 0.0022 0 ... ]
           Structure: 'Direct form'

  Show all properties

Визуализируйте ответ фильтра с помощью fvtool. Спроектированный фильтр соответствует идеальным ограничениям фильтра, которые отмечены красным. Частота среза является приблизительно половиной спектра.

fvtool(firdecim)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line.

Десятикратно уменьшите 2

Десятикратно уменьшите сигнал косинуса на коэффициент 2.

y = firdecim(x);

Постройте оригинал и подкошенные сигналы. Для того, чтобы построить два сигнала на том же графике, получите параметры аффинного преобразования времени. Используйте эти параметры, чтобы вычислить выходные шаги расчета. nth выходной шаг расчета равняется scale×n+delay.

scale = 1/firdecim.DecimationFactor;
delay = length(firdecim.Numerator)/(2*firdecim.DecimationFactor);

nx = (0:length(x)-1);
ty = ((0:length(y)-1)-delay)/scale;

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

stem(ty,y,'filled',MarkerSize=4); hold on;
stem(nx,x); hold off;
xlim([-10,22])
ylim([-2.5 2.5])
legend('Decimated by 2 (y)','Input signal (x)');

Figure contains an axes object. The axes object contains 2 objects of type stem. These objects represent Decimated by 2 (y), Input signal (x).

Добавьте высокочастотный компонент, чтобы ввести и десятикратно уменьшить

Добавьте другую частотную составляющую во входной сигнал, синус с угловой частотой 2π3 радианы/выборка. С тех пор ω=2π3 выше КИХ сокращение lowpass, π2, частота 2π3 радианы/выборка отфильтрованы от сигнала.

xhigh = x + 0.2*sin(2*pi/3*(0:95)');
release(firdecim)
yhigh = firdecim(xhigh);

Постройте входной сигнал, подкошенный сигнал и выход низкочастотного компонента. Подкошенный yhigh сигнала отфильтровали высокочастотный компонент. yhigh почти идентично выходу низкочастотного компонента y.

stem(ty,yhigh,'filled',MarkerSize=4); hold on;
stem(nx,xhigh); 
stem(ty,y,':m',MarkerSize=7); 
hold off;
xlim([-10,22])
ylim([-2.5 2.5])
legend('Decimated by 2 (yhigh)',...
    'Input signal with the high tone added (xhigh)',...
    'Decimated by 2 - low tone only (y)');

Figure contains an axes object. The axes object contains 3 objects of type stem. These objects represent Decimated by 2 (yhigh), Input signal with the high tone added (xhigh), Decimated by 2 - low tone only (y).

Десятикратно уменьшите 4 в автоматическом режиме создания фильтра

Теперь десятикратно уменьшите на коэффициент 4. Для создания фильтра, которое будет обновлено автоматически на основе нового фактора децимации, устанавливает NumeratorSource свойство к 'Auto'. Альтернативно, можно передать 'auto' как ключевое слово при создании объекта. Объект затем действует в автоматическом режиме создания фильтра. Каждый раз существует изменение в факторе децимации, обновления объекта создание фильтра.

release(firdecim)
firdecim.NumeratorSource = 'Auto';
firdecim.DecimationFactor = 4
firdecim = 
  dsp.FIRDecimator with properties:

    DecimationFactor: 4
     NumeratorSource: 'Auto'
           Structure: 'Direct form'

  Show all properties

Чтобы получить доступ к коэффициентам фильтра в автоматическом режиме, введите firdecim.Numerator в командной строке MATLAB.

Спроектированный фильтр занимает более узкую полосу пропускания, которая составляет приблизительно четверть спектра.

fvtool(firdecim)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line.

Десятикратно уменьшите сигнал косинуса на коэффициент 4. После короткого перехода выход сходится к косинусу частоты π как ожидалось, который является четыре раза более низкой частотной составляющей входного сигнала π4. На этот раз амплитуда выхода является половиной амплитуды входа начиная с усиления КИХ в ω=π4 точно 12. Высокочастотный компонент 2π3 уменьшается КИХ lowpass, частота среза которого π4.

yAuto = firdecim(xhigh);

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

scale = 1/firdecim.DecimationFactor;
delay = length(firdecim.Numerator)/(2*firdecim.DecimationFactor);
tyAuto = ((0:length(yAuto)-1)-delay)/scale;

stem(tyAuto,yAuto,'filled',MarkerSize=4); hold on;
stem(nx,xhigh);
stem(nx,x/2,'m:',MarkerSize=7); hold off;

xlim([-20,36])
ylim([-2.5 2.5])
legend('Decimated by 4 (yAuto)',...
    'Input signal with the high frequency component added (xhigh)',...
    'Low tone input scaled by 1/2');

Figure contains an axes object. The axes object contains 3 objects of type stem. These objects represent Decimated by 4 (yAuto), Input signal with the high frequency component added (xhigh), Low tone input scaled by 1/2.

Уменьшайте частоту дискретизации звукового сигнала на коэффициент 2 и проигрывайте подкошенный сигнал с помощью audioDeviceWriter объект.

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

Примечание: audioDeviceWriter Система object™ не поддерживается в MATLAB Online.

Создайте dsp.AudioFileReader объект. Звуковой файл по умолчанию, считанный объектом, имеет частоту дискретизации 22 050 Гц.

afr = dsp.AudioFileReader('OutputDataType',...
  'single');

Создайте dsp.FIRDecimator возразите и задайте фактор децимации, чтобы быть 2. Объект проектирует фильтр с помощью designMultirateFIR(1,2) и хранит коэффициенты в Numerator свойство объекта.

firdecim = dsp.FIRDecimator(2)
firdecim = 
  dsp.FIRDecimator with properties:

    DecimationFactor: 2
     NumeratorSource: 'Property'
           Numerator: [0 -1.0054e-04 0 3.8704e-04 0 -0.0010 0 0.0022 0 ... ]
           Structure: 'Direct form'

  Show all properties

Создайте audioDeviceWriter объект. Задайте частоту дискретизации, чтобы быть 22050/2.

adw = audioDeviceWriter(22050/2)
adw = 
  audioDeviceWriter with properties:

        Device: 'Default'
    SampleRate: 11025

  Show all properties

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

while ~isDone(afr)
     frame = afr();
     y = firdecim(frame);
     adw(y);
end

release(afr); 
pause(0.5);
release(adw);

Больше о

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

Алгоритмы

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

Чтобы вывести многофазную структуру, начните с передаточной функции КИХ-фильтра:

H(z)=b0+b1z1+...+bNzN

N +1 является длиной КИХ-фильтра.

Можно перестроить это уравнение можно следующим образом:

H(z)=(b0+bMzM+b2Mz2M+..+bNM+1z(NM+1))+z1(b1+bM+1zM+b2M+1z2M+..+bNM+2z(NM+1))+z(M1)(bM1+b2M1zM+b3M1z2M+..+bNz(NM+1))

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

Можно записать это уравнение как:

H(z)=E0(zM)+z1E1(zM)+...+z(M1)EM1(zM)

E0 (zM), E1 (zM)..., EM-1 (zM) многофазные компоненты КИХ-фильтра H (z).

Концептуально, КИХ-децимирующий фильтр содержит КИХ-фильтр lowpass, сопровождаемый downsampler.

Замените H (z) на его многофазное представление.

Вот многоскоростная благородная идентичность для децимации.

Применение благородной идентичности для децимации перемещает операцию субдискретизации в перед операцией фильтрации. Это перемещение позволяет вам отфильтровать сигнал на более низком уровне.

Можно заменить задержки и фактор децимации во входе с переключателем коммутатора. Переключатель запускается на первой ветви 0 и перемещается в направление против часовой стрелки как показано в этой схеме. Аккумулятор при выходе получает обработанные входные выборки от каждой ветви многофазной структуры и накапливает эти обработанные выборки, пока переключатель не переходит к ветви 0. Когда переключатель переходит к ветви 0, аккумулятор выводит накопленное значение.

Когда первая входная выборка поставляется, переключатель кормит этим входом ветвь 0, и decimator вычисляет первое выходное значение. Когда более входные выборки входят, переключатель приближается против часовой стрелки направление посредством ветвей M −1, M −2, и полностью переходить 0, поставляя одну выборку за один раз каждой ветви. Когда переключатель приходит к ветви 0, decimator выходным параметрам следующий набор выходных значений. Этот процесс продолжается, когда данные удерживают прибытие. Каждый раз переключатель приходит к ветви 0, decimator выходным параметрам y[m]. decimator эффективно выводит одну выборку для каждого M выборки, которые это получает. Следовательно частотой дискретизации при выходе КИХ-децимирующего фильтра является fs/M.

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

Преобразование фиксированной точки
Спроектируйте и симулируйте системы фиксированной точки с помощью Fixed-Point Designer™.

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