Интерполятор полуполосы
dsp.FIRHalfbandInterpolator
Система object™ выполняет эффективную многофазную интерполяцию входного сигнала с помощью фактора повышающей дискретизации два. Можно использовать dsp.FIRHalfbandInterpolator
реализовывать фрагмент синтеза банка 2D ленточного фильтра, чтобы синтезировать сигнал от lowpass и highpass поддиапазонов. dsp.FIRHalfbandInterpolator
использует КИХ equiripple проект, чтобы создать полуленточные фильтры и многофазную реализацию, чтобы отфильтровать вход.
Сверхдискретизировать и интерполировать ваши данные:
Создайте dsp.FIRHalfbandInterpolator
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
возвращает фильтр интерполяции полуполосы FIR, firhalfbandinterp
= dsp.FIRHalfbandInterpolatorfirhalfbandinterp
, с настройками по умолчанию. При настройках по умолчанию Системный объект сверхдискретизировал и интерполирует входные данные с помощью частоты полуполосы 11025
Гц, ширина перехода 4.1
kHz и затухание в полосе задерживания 80
дБ.
возвращает интерполятор полуполосы, с дополнительными свойствами, заданными одним или несколькими firhalfbandinterp
= dsp.FIRHalfbandInterpolator(Name,Value
)Name,Value
парные аргументы.
firhalfbandinterp = dsp.FIRHalfbandInterpolator('Specification','Filter order and stopband attenuation')
создает объект интерполятора полуполосы FIR с набором порядка фильтра к 52 и набором затухания в полосе задерживания к 80 дБ.Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).
Specification
— Параметры создания фильтра'Transition width and stopband attenuation'
(значение по умолчанию) | 'Filter order and stopband attenuation'
| 'Filter order and transition width'
| 'Coefficients'
Параметры создания фильтра в виде вектора символов. Когда вы устанавливаете Specification
к одному из следующих вы выбираете два из трех доступных расчетных параметров, чтобы спроектировать КИХ-Полуленточный фильтр.
'Transition width and stopband attenuation'
– Ширина перехода и затухание в полосе задерживания являются расчетными параметрами.
'Filter order and stopband attenuation'
– Порядок фильтра и затухание в полосе задерживания являются расчетными параметрами.
'Filter order and transition width'
– Порядок фильтра и ширина перехода являются расчетными параметрами.
Фильтр является созданным с использованием оптимальным equiripple методом создания фильтра.
Когда вы устанавливаете Specification
к 'Coefficients'
, вы задаете коэффициенты полуленточного фильтра непосредственно через Numerator
свойство.
FilterOrder
— Порядок фильтра
(значение по умолчанию) | даже положительное целое числоПорядок фильтра в виде ровного положительного целого числа.
Это свойство применяется, когда вы устанавливаете Specification
к любому 'Filter order and stopband attenuation'
или 'Filter order and transition width'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
StopbandAttenuation
— Затухание в полосе задерживания
(значение по умолчанию) | положительный действительный скалярЗатухание в полосе задерживания в дБ в виде положительного действительного скаляра.
Это свойство применяется, когда вы устанавливаете Specification
к любому 'Filter order and stopband attenuation'
или 'Transition width and stopband attenuation'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
TransitionWidth
— Ширина перехода
(значение по умолчанию) | положительный действительный скалярШирина перехода в Гц в виде положительного действительного скаляра. Значение ширины перехода в Гц должно быть меньше 1/2 входная частота дискретизации.
Это свойство применяется, когда вы устанавливаете Specification
к любому 'Transition width and stopband attenuation'
или 'Filter order and transition width'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Numerator
— КИХ-коэффициенты полуленточного фильтра2*firhalfband('minorder',0.407,1e-4)
(значение по умолчанию) | вектор-строкаКИХ-коэффициенты полуленточного фильтра в виде вектора-строки. Коэффициенты должны выполнить формат импульсной характеристики полуполосы FIR. Для получения дополнительной информации на этом формате, смотрите Полуленточные фильтры и КИХ-Проект Полуленточного фильтра. Если половина порядка фильтра, (length(Numerator) - 1)/2
является четным, любой коэффициент, начинающий с первого коэффициента, должен быть нулем за исключением центрального коэффициента, который должен быть 1.0. Если половина порядка фильтра является нечетной, последовательность переменных нулей с 1.0 в центре запускается во втором коэффициенте.
Это свойство применяется, когда вы устанавливаете Specification
к 'Coefficients'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SampleRate
— Введите частоту дискретизации
(значение по умолчанию) | положительный действительный скалярВведите частоту дискретизации в Гц в виде положительного действительного скаляра. Входные значения по умолчанию частоты дискретизации к 44 100 Гц. Если вы задаете ширину перехода как один из ваших параметров создания фильтра, ширина перехода не может превысить 1/2 входная частота дискретизации.
Типы данных: single
| double
FilterBankInputPort
— Набор фильтров синтезаfalse
(значение по умолчанию) | true
Набор фильтров синтеза в виде любого false
или true
. Если этим свойством является false
, dsp.FIRHalfbandInterpolator
фильтр интерполяции для одного вектора - или вход с матричным знаком, когда вы вызываете алгоритм. Если этим свойством является true
, dsp.FIRHalfbandInterpolator
набор фильтров синтеза, и алгоритм принимает, что два входных параметров, lowpass и highpass поддиапазоны синтезируют.
CoefficientsDataType
— Word и дробные длины коэффициентовnumerictype(1,16)
(значение по умолчанию) | numerictype
объектWord и дробные длины коэффициентов в виде numerictype
без знака или со знаком объект. Значение по умолчанию,
numerictype(1,16)
соответствует числовому текстовому объекту со знаком с 16-битными коэффициентами и дробной длиной, определенной на основе содействующих значений, чтобы дать самую лучшую точность.
Это свойство не является настраиваемым.
Размер слова выхода - то же самое как размер слова входа. Дробная продолжительность выхода вычисляется таким образом, что целый динамический диапазон выхода может быть представлен без переполнения. Для получения дополнительной информации о том, как дробная продолжительность выхода вычисляется, см. Правила Точности Фиксированной точки для Предотвращения Переполнения в КИХ-Фильтрах.
RoundingMethod
— Округление метода для выходных операций фиксированной точки'Floor'
(значение по умолчанию) | 'Ceiling'
| 'Convergent'
| 'Nearest'
| 'Round'
| 'Simplest'
| 'Zero'
Округление метода для выходных операций фиксированной точки в виде вектора символов. Для получения дополнительной информации об округляющихся режимах смотрите Точность и Область значений.
реализует набор фильтров синтеза полуполосы для входных параметров y
= firhalfbandinterp(x1
,x2
)x1
и x2
x1
выход lowpass аналитического набора фильтров полуполосы и x2
highpass выход аналитического набора фильтров полуполосы. dsp.FIRHalfbandInterpolator
реализует набор фильтров синтеза только когда 'FilterBankInputPort'
свойство установлено в true
.
x1
— Ввод данныхВвод данных к интерполятору полуполосы FIR в виде вектор-столбца или матрицы. Этим сигналом является выход lowpass аналитического набора фильтров полуполосы. Если входной сигнал является матрицей, каждый столбец матрицы обработан как независимый канал.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
Поддержка комплексного числа: Да
x2
— Второй ввод данныхВторой ввод данных к набору фильтров синтеза в виде вектор-столбца или матрицы. Этим сигналом является highpass выход аналитического набора фильтров полуполосы. Если входной сигнал является матрицей, каждый столбец матрицы обработан как независимый канал.
Размер, тип данных и сложность обоих входные параметры должны быть тем же самым.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
Поддержка комплексного числа: Да
y
— Выход интерполятораВыход интерполятора, возвращенного как вектор-столбец или матрица. Количество строк в интерполяторе выход является дважды количеством строк во входном сигнале.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
Поддержка комплексного числа: Да
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj
, используйте этот синтаксис:
release(obj)
dsp.FIRHalfbandInterpolator
Создайте фильтр интерполяции полуполосы lowpass для повышающей дискретизации данных к 44,1 кГц. Задайте порядка фильтра 52 и ширину перехода 4,1 кГц.
Fs = 44.1e3; InputSampleRate = Fs/2; Order = 52; TW = 4.1e3; filterspec = 'Filter order and transition width'; firhalfbandinterp = dsp.FIRHalfbandInterpolator(... 'Specification',filterspec,'FilterOrder',Order,... 'TransitionWidth',TW,'SampleRate',InputSampleRate);
Постройте импульсную характеристику. Коэффициент порядка 0th задерживается 26 выборок, который равен групповой задержке фильтра. Это дает к причинному полуленточному фильтру.
fvtool(firhalfbandinterp,'Analysis','Impulse');
Постройте величину и фазовый отклик.
fvtool(firhalfbandinterp,'Analysis','freq');
Используйте аналитический набор фильтров полуполосы и фильтр интерполяции, чтобы извлечь низкочастотный поддиапазон из речевого сигнала.
Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным step
синтаксис. Например, obj(x)
становится step(obj,x)
.
Примечание: dsp.AudioFileReader
и audioDeviceWriter
Системные объекты не поддержаны в MATLAB Online.
Настройте читателя звукового файла, аналитический набор фильтров, средство записи аудио устройства и фильтр интерполяции. Уровень выборки аудиоданных составляет 22 050 Гц. Порядок полуленточного фильтра равняется 52 с шириной перехода 2 кГц.
afr = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024); filterspec = 'Filter order and transition width'; Order = 52; TW = 2000; firhalfbanddecim = dsp.FIRHalfbandDecimator(... 'Specification',filterspec,'FilterOrder',Order,... 'TransitionWidth',TW,'SampleRate',afr.SampleRate); firhalfbandinterp = dsp.FIRHalfbandInterpolator(... 'Specification',filterspec,'FilterOrder',Order,... 'TransitionWidth',TW,'SampleRate',afr.SampleRate/2); adw = audioDeviceWriter('SampleRate',afr.SampleRate);
Просмотрите ответ величины полуленточного фильтра.
fvtool(firhalfbanddecim)
Считайте речевой сигнал из звукового файла в системах координат 1 024 выборок. Отфильтруйте речевой сигнал в lowpass и highpass поддиапазоны с частотой полуполосы 5 512,5 Гц. Восстановите приближение lowpass речевого сигнала путем интерполяции поддиапазона lowpass. Проигрывайте отфильтрованный выход.
while ~isDone(afr) audioframe = afr(); xlo = firhalfbanddecim(audioframe); ylow = firhalfbandinterp(xlo); adw(ylow); end
Ожидайте, пока звуковой файл не проигрывается в конец, затем закройте входной файл и выпустите ресурс аудиовыхода.
release(afr); release(adw);
Используйте полуполосу decimator и интерполятор, чтобы реализовать двухканальный набор фильтров. Этот пример использует вход звукового файла и показывает, что спектр мощности набора фильтров выход значительно не отличается от входа.
Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj (x) становится шагом (obj, x).
Примечание: dsp.AudioFileReader
и audioDeviceWriter
Системные объекты не поддержаны в MATLAB Online.
Настройте средство записи средства чтения и устройства звукового файла. Создайте полуполосу FIR decimator и интерполятор. Наконец, настройте спектр анализатор, чтобы отобразить спектры мощности ввода и вывода набора фильтров.
AF = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024); AP = audioDeviceWriter('SampleRate',AF.SampleRate); filterspec = 'Filter order and transition width'; Order = 52; TW = 2000; firhalfbanddecim = dsp.FIRHalfbandDecimator(... 'Specification',filterspec,'FilterOrder',Order,... 'TransitionWidth',TW,'SampleRate',AF.SampleRate); firhalfbandinterp = dsp.FIRHalfbandInterpolator(... 'Specification',filterspec,'FilterOrder',Order,... 'TransitionWidth',TW,'SampleRate',AF.SampleRate/2,... 'FilterBankInputPort',true); SpecAna = dsp.SpectrumAnalyzer('SampleRate',AF.SampleRate,... 'PlotAsTwoSidedSpectrum',false,'ReducePlotRate',false,... 'ShowLegend',true,... 'ChannelNames',{'Input signal','Filtered output signal'});
Считайте аудио 1 024 выборки за один раз. Отфильтруйте вход, чтобы получить lowpass и highpass сигналы поддиапазона, подкошенные фактором два. Это - аналитический набор фильтров. Используйте интерполятор полуполосы в качестве набора фильтров синтеза. Отобразите рабочий спектр мощности аудиовхода и выход набора фильтров синтеза. Проигрывайте выход.
while ~isDone(AF) audioInput = AF(); [xlo,xhigh] = firhalfbanddecim(audioInput); audioOutput = firhalfbandinterp(xlo,xhigh); spectrumInput = [audioInput audioOutput]; SpecAna(spectrumInput); AP(audioOutput); end release(AF); release(AP); release(SpecAna);
Создайте фильтр интерполяции полуполосы для данных, произведенных на уровне 44,1 кГц. Порядок фильтра 52 с шириной перехода 4,1 кГц. Используйте фильтр, чтобы сверхдискретизировать и интерполировать многоканальный вход.
Fs = 44.1e3; filterspec = 'Filter order and transition width'; Order = 52; TW = 4.1e3; firhalfbandinterp = dsp.FIRHalfbandInterpolator(... 'Specification',filterspec,... 'FilterOrder',Order,... 'TransitionWidth',TW,... 'SampleRate',Fs); x = randn(1024,4); y = step(firhalfbandinterp,x);
Идеальным полуленточным фильтром lowpass дают
Идеальный фильтр не осуществим, потому что импульсная характеристика является непричинной и не абсолютно суммируемой. Однако импульсная характеристика идеального фильтра lowpass обладает некоторыми важными свойствами, которые требуются осуществимого приближения. А именно, идеальная импульсная характеристика полуленточного фильтра lowpass:
равняйтесь 0 для всех даже индексированных выборок
равняйтесь 1/2 в n=0. Вы видите это при помощи правила Лопиталя об эквиваленте с непрерывным знаком импульсной характеристики дискретного времени.
Идеалом highpass полуленточный фильтр дают
Оценка предыдущего интеграла дает следующую импульсную характеристику
Идеал highpass импульс полуленточного фильтра:
Равный 0 для всех даже индексированных выборок
Равный 1/2 в n=0.
dsp.FIRHalfbandInterpolator
использует причинное КИХ-приближение для идеального ответа полуполосы, который основан на минимизации норма ошибки (минимакс). Дополнительную информацию см. в Алгоритмах.
dsp.FIRHalfbandInterpolator
использует минимаксный КИХ-проект, чтобы спроектировать fullband линейный фильтр фазы с желаемыми техническими требованиями. Фильтр fullband сверхдискретизирован так, чтобы даже индексированные выборки фильтра были заменены нулями. Повышающая дискретизация фильтра производит фильтр полуполосы. Наконец, касание фильтра, соответствующее групповой задержке фильтра в выборках, установлено равное 1/2. Это дает к причинному приближению КИХ-фильтра линейной фазы идеальному полуленточному фильтру, заданному в Полуленточных фильтрах. См. [1] для описания этого метода создания фильтра с помощью алгоритма обмена Remez.
Коэффициенты фильтра интерполяции полуполосы масштабируются коэффициентом интерполяции, два, чтобы сохранить выходную мощность сигнала.
dsp.FIRHalfbandInterpolator
использует эффективную многофазную реализацию в полуленточных фильтрах, когда вы фильтруете входной сигнал. Можно использовать многофазную реализацию, чтобы переместить операцию повышающей дискретизации после фильтрации. Это позволяет вам фильтровать на более низком уровне выборки.
Разделение импульсной характеристики фильтра, h(n), в два многофазных результата компонентов в ровном многофазном компоненте с z - преобразовывает
и нечетный многофазный компонент с z - преобразовывает
z - преобразование фильтра может быть записано в терминах четных и нечетных многофазных компонентов как
Графически, можно представлять повышающую дискретизацию двумя сопровождаемыми путем фильтрации со следующей фигурой
Используя многоскоростную благородную идентичность для повышающей дискретизации, можно переместить операцию повышающей дискретизации после фильтрации. Это позволяет вам отфильтровать на более низком уровне.
Для полуленточного фильтра единственный ненулевой коэффициент в ровном многофазном компоненте является коэффициентом, соответствующим z0. При реализации полуленточного фильтра, когда причинный КИХ-фильтр переключает ненулевой коэффициент приблизительно к z-N/4, где N является количеством касаний фильтра. Этот процесс показывают в следующем рисунке.
Главный график показывает полуленточный фильтр порядка 52. Нижний график показывает ровный многофазный компонент. Оба из этих фильтров являются непричинными. Задержка ровного многофазного компонента 13 выборками создает причинный КИХ-фильтр.
Эффективно реализовывать интерполятор полуполосы, dsp.FIRHalfbandInterpolator
заменяет оператор повышающей дискретизации, блок задержки и сумматор с переключателем коммутатора. Это показывают в следующем рисунке, где один многофазный компонент заменяется задержкой.
Переключатель коммутатора берет входные выборки из двух ветвей поочередно, одну выборку за один раз. Это удваивает уровень выборки входного сигнала. Многофазный компонент, который уменьшает до простой задержки, зависит от того, является ли половина порядка фильтра четной или нечетная. Это вызвано тем, что задержка, требуемая сделать ровный многофазный компонент причинным, может быть нечетной или даже, в зависимости от фильтра половина порядка. Для примера этого поведения смотрите многофазные компоненты следующих фильтров.
filterspec = 'Filter order and stopband attenuation'; halfOrderEven = dsp.FIRHalfbandInterpolator('Specification',filterspec,... 'FilterOrder',64,'StopbandAttenuation',80); halfOrderOdd = dsp.FIRHalfbandInterpolator('Specification',filterspec,... 'FilterOrder', 54,'StopbandAttenuation',80); polyphase(halfOrderEven) polyphase(halfOrderOdd)
Один из многофазных компонентов имеет один ненулевой коэффициент, указывающий, что это - простая задержка. Чтобы сохранить выходную мощность сигнала, коэффициенты масштабируются коэффициентом интерполяции, два. Чтобы видеть это масштабирование, сравните многофазные компоненты интерполятора полуполосы с коэффициентами полуполосы decimator.
hfirinterp = dsp.FIRHalfbandInterpolator; hfirdecim = dsp.FIRHalfbandDecimator; polyphase(hfirdecim) polyphase(hfirinterp)
Подводя итоги, dsp.FIRHalfbandInterpolator
Фильтрует вход прежде, чем сверхдискретизировать с четными и нечетными многофазными компонентами фильтра.
Использует то, что один фильтр многофазный компонент является простой задержкой полуленточного фильтра.
[1] Харрис, Обработка сигналов Ф.Дж. Малтирэйта для Систем связи, Prentice Hall, 2004, стр 208–209.
Указания и ограничения по применению:
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
Эта генерация кода поддержки объектов для ARM® Cortex®-M и процессоров ARM Cortex-A.
dsp.ChannelSynthesizer
| dsp.DyadicSynthesisFilterBank
| dsp.FIRHalfbandDecimator
| dsp.IIRHalfbandInterpolator
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.