Полуполосный прореживатель
dsp.FIRHalfbandDecimator Система object™ выполняет эффективное многофазное прореживание входного сигнала в два раза. Вы можете использовать dsp.FIRHalfbandDecimator реализовать аналитическую часть двухдиапазонного набора фильтров для фильтрации сигнала на низкочастотные и высокочастотные поддиапазоны. dsp.FIRHalfbandDecimator использует equiripple-конструкцию FIR для построения полуполосных фильтров и полифазную реализацию для фильтрации входных данных.
Чтобы отфильтровать и понизить выборку данных, выполните следующие действия.
Создать dsp.FIRHalfbandDecimator и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
возвращает полуполосный прореживатель, firhalfbanddecim = dsp.FIRHalfbandDecimatorfirhalfbanddecim, с настройками по умолчанию. В настройках по умолчанию объект System фильтрует и понижает выборку входных данных с полуполосной частотой 11025 Гц, ширина перехода 4.1 кГц и затухание полосы останова 80 дБ.
возвращает полуполосный прореживатель с дополнительными свойствами, заданными одним или несколькими firhalfbanddecim = dsp.FIRHalfbandDecimator(Name,Value)Name,Value аргументы пары.
firhalfbanddecim = dsp.FIRHalfbandDecimator('Specification','Filter order and stopband attenuation') создает объект полуполосного прореживателя FIR с порядком фильтрации 52 и затуханием стоп-полосы 80 дБ.Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
Specification - Расчетные параметры фильтра'Transition width and stopband attenuation' (по умолчанию) | 'Filter order and stopband attenuation' | 'Filter order and transition width' | 'Coefficients'Параметры конструкции фильтра, заданные как символьный вектор. При установке Specification В одном из следующих вариантов можно выбрать два из трех доступных параметров конструкции для проектирования фильтра FIR Halfband.
'Transition width and stopband attenuation' - Ширина перехода и затухание полосы останова являются расчетными параметрами.
'Filter order and stopband attenuation' - Порядок фильтрации и затухание полосы останова являются расчетными параметрами.
'Filter order and transition width' - Порядок фильтрации и ширина перехода являются параметрами проектирования.
Фильтр сконструирован с использованием оптимального метода проектирования эквириптного фильтра.
При установке Specification кому 'Coefficients', коэффициенты полуполосного фильтра задаются непосредственно через Numerator собственность.
FilterOrder - Порядок фильтрации52 (по умолчанию) | даже положительное целое числоПорядок фильтра, заданный как четное положительное целое число.
Это свойство применяется при установке Specification к также 'Filter order and stopband attenuation' или 'Filter order and transition width'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
StopbandAttenuation - Затухание полосы останова80 (по умолчанию) | положительный вещественный скалярЗатухание стоп-полосы в дБ, указанное как положительный действительный скаляр.
Это свойство применяется при установке Specification к также 'Filter order and stopband attenuation' или 'Transition width and stopband attenuation'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
TransitionWidth - Ширина перехода4100 (по умолчанию) | положительный вещественный скалярШирина перехода в Гц, заданная как положительный вещественный скаляр. Значение ширины перехода в Гц должно быть меньше 1/2 входной частоты дискретизации.
Это свойство применяется при установке Specification к также 'Transition width and stopband attenuation' или 'Filter order and transition width'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Numerator - Коэффициенты полуполосного фильтра FIRfirhalfband('minorder',0.407,1e-4) (по умолчанию) | вектор строкиКоэффициенты полуполосного фильтра FIR, заданные как вектор строки. Коэффициенты должны соответствовать формату импульсной характеристики полуполосы FIR. Дополнительные сведения об этом формате см. в разделах Halfband Filters и FIR Halfband Filter Design. Если половинный порядок фильтра, (length(Numerator) - 1)/2, является четным, каждый другой коэффициент, начинающийся с первого коэффициента, должен быть равен нулю, за исключением центрального коэффициента, который должен быть равен 0,5. Если половина порядка фильтра нечётная, последовательность чередующихся нулей с 0,5 в центре начинается со второго коэффициента.
Это свойство применяется при установке Specification кому 'Coefficients'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
SampleRate - Частота входных выборок44100 (по умолчанию) | положительный вещественный скалярЧастота входных выборок в Гц, заданная как положительный действительный скаляр. Частота входных выборок по умолчанию составляет 44100 Гц. Если в качестве одного из параметров конструкции фильтра указана ширина перехода, она не может превышать 1/2 входной частоты дискретизации.
Типы данных: single | double
CoefficientsDataType - Длина коэффициентов в словах и дробяхnumerictype(1,16) (по умолчанию) | numerictype объектДлины коэффициентов в словах и дробях, указанные как подписанные или неподписанные numerictype объект. Значение по умолчанию, numerictype(1,16) соответствует знаковому объекту числового типа с 16-битовыми коэффициентами и длиной дроби, определяемой на основе значений коэффициентов, для обеспечения наилучшей возможной точности.
Это свойство невозможно настроить.
Длина слова на выходе равна длине слова на входе. Длина доли выходного сигнала вычисляется таким образом, что весь динамический диапазон выходного сигнала может быть представлен без переполнения. Дополнительные сведения о том, как вычисляется длина фракции вывода, см. в разделе Правила точности с фиксированной точкой для предотвращения переполнения в фильтрах FIR.
RoundingMethod - Метод округления для выходных операций с фиксированной точкой'Floor' (по умолчанию) | 'Ceiling' | 'Convergent' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'Метод округления для выходных операций с фиксированной точкой, заданный как символьный вектор. Дополнительные сведения о режимах округления см. в разделах Точность и диапазон.
[ вычисляет ylow,yhigh] = firhalfbanddecim(x)ylow и yhigh, банка фильтров анализа, firhalfbanddecim для ввода x. Входная матрица Ki-by-N обрабатывается как N независимых каналов. Объект System генерирует два комплементарных мощности выходных сигнала путем сложения и вычитания двух выходных сигналов многофазной ветви соответственно. ylow и yhigh имеют одинаковый размер (Ko-by-N) и тип данных. Ko = Ki/2, где 2 - коэффициент прореживания.
x - Ввод данныхВвод данных, заданный как вектор столбца или матрица. Если входной сигнал является матрицей, каждый столбец матрицы обрабатывается как независимый канал. Число строк во входном сигнале должно быть кратным 2.
Этот объект поддерживает входной сигнал переменного размера.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да
ylow - Поддиапазон нижних частот выхода прореживателяПоддиапазон нижних частот выхода прореживателя, возвращаемый в виде вектора столбца или матрицы. Выходные данные, ylow является низкочастотной полуполосной отфильтрованной и понижающей дискретизацией версией входного сигнала x. Из-за половинного характера фильтра коэффициент понижающей дискретизации всегда равен 2.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да
yhigh - Верхний поддиапазон выхода прореживателяВерхний поддиапазон выхода прореживателя, возвращаемый в виде вектора столбца или матрицы. Выходные данные, yhigh является полнополосной отфильтрованной и понижающей дискретизацией версией входного сигнала x. Из-за половинного характера фильтра коэффициент понижающей дискретизации всегда равен 2.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
dsp.FIRHalfbandDecimatorfreqz | Частотная характеристика объекта системы дискретно-временного фильтра |
fvtool | Визуализация частотной характеристики фильтров DSP |
info | Сведения об объекте filter System |
cost | Оценка затрат на внедрение фильтра Объект системы |
coeffs | Возвращает коэффициенты объекта System фильтра в структуре |
polyphase | Многофазное разложение многоскоростного фильтра |
Создайте фильтр полуполосного прореживания нижних частот для данных, дискретизированных на частоте 44,1 кГц. Выходная скорость передачи данных равна 1/2 входной частоты дискретизации, или 22,05 кГц. Укажите порядок фильтрации 52 с шириной перехода 4,1 кГц.
Fs = 44.1e3; filterspec = 'Filter order and transition width'; Order = 52; TW = 4.1e3; firhalfbanddecim =dsp.FIRHalfbandDecimator('Specification',filterspec, ... 'FilterOrder',Order, ... 'TransitionWidth',TW, ... 'SampleRate',Fs);
Постройте график импульсной характеристики. Коэффициент нулевого порядка задерживается на 26 выборок, что равно групповой задержке фильтра. Это дает причинный полуполосный фильтр.
fvtool(firhalfbanddecim,'Analysis','impulse')

Постройте график величины и фазовой характеристики.
fvtool(firhalfbanddecim,'Analysis','freq')

Для извлечения низкочастотного поддиапазона из речевого сигнала используйте набор фильтров анализа полуполосы и фильтр интерполяции.
Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).
Примечание: audioDeviceWriter Системная object™ не поддерживается в MATLAB Online.
Настройте устройство чтения аудиофайлов, банк фильтров анализа, устройство записи аудиоустройств и фильтр интерполяции. Частота дискретизации аудиоданных составляет 22050 Гц. Порядок полуполосного фильтра составляет 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)

Считайте речевой сигнал из аудиофайла в кадрах из 1024 выборок. Фильтрация речевого сигнала на низкочастотные и высокочастотные поддиапазоны с частотой полуполосы 5512,5 Гц. Восстановление аппроксимации нижних частот речевого сигнала путем интерполяции поддиапазона нижних частот. Воспроизвести отфильтрованные выходные данные.
while ~isDone(afr) audioframe = afr(); xlo = firhalfbanddecim(audioframe); ylow = firhalfbandinterp(xlo); adw(ylow); end
Дождитесь завершения воспроизведения аудиофайла, затем закройте входной файл и освободите аудиоресурс.
release(afr); release(adw);
Используйте полуполосный прореживатель и интерполятор для реализации двухканального набора фильтров. В этом примере используется входной аудиофайл и показано, что спектр мощности выходного сигнала блока фильтров существенно не отличается от входного сигнала.
Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта синтаксисом эквивалентного шага. Например, obj (x) становится шагом (obj, x).
Примечание: audioDeviceWriter Системная object™ не поддерживается в MATLAB Online.
Настройте устройство чтения аудиофайлов и устройство записи. Создайте полуполосный прореживатель и интерполятор FIR. Наконец, настройте анализатор спектра для отображения спектров мощности входа и выхода блока фильтров.
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'});
Считывайте одновременно отсчеты звука 1024. Фильтрация входного сигнала для получения низкочастотных и высокочастотных поддиапазонов, прореженных в два раза. Это банк фильтров анализа. В качестве набора фильтров синтеза используйте полупозиционный интерполятор. Отображение спектра рабочей мощности входного аудиосигнала и выходного сигнала блока фильтров синтеза. Воспроизведение выходных данных.
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 кГц. Используйте конструкцию минимального порядка с шириной перехода 2 кГц и затуханием полосы останова 60 дБ.
hfirhalfbanddecim = dsp.FIRHalfbandDecimator(... 'Specification','Transition width and stopband attenuation',... 'TransitionWidth',2000,'StopbandAttenuation',60,'SampleRate',44.1e3);
Фильтрация двухканального входа в низкочастотные и высокоскоростные поддиапазоны
x = randn(1024,2); [ylow,yhigh] = step(hfirhalfbanddecim,x);
Идеальный полуполосной фильтр нижних частот задается
¼ n.
Идеальный фильтр не может быть реализован, поскольку импульсная характеристика не является каузальной и не является абсолютно суммируемой. Однако импульсная характеристика идеального фильтра нижних частот обладает некоторыми важными свойствами, которые требуются для реализуемого приближения. В частности, идеальная импульсная характеристика низкочастотного полуполосного фильтра:
равно 0 для всех четно-индексированных выборок
равно 1/2 при n = 0. Это можно увидеть, используя правило L'Hopital на непрерывном эквиваленте дискретной временной импульсной характеристики.
Идеальный high pass half-полосный фильтр задается
=12π∫−π−π/2ejωndω+12π∫π/2πejωndω.
Оценка предыдущего интеграла дает следующий импульсный отклик
(¼ 2n) ¼ n.
Идеальным импульсом high pass half-полосного фильтра является:
равно 0 для всех четно-индексированных выборок
равно 1/2 при n = 0.
dsp.FIRHalfbandDecimator использует причинную FIR-аппроксимацию к идеальному полуполосному отклику, которая основана на минимизации нормы ошибки (minimax). Дополнительные сведения см. в разделе Алгоритмы.
dsp.FIRHalfbandDecimator использует минимальную конструкцию FIR для проектирования полнополосного линейного фазового фильтра с требуемыми спецификациями. Полнополосный фильтр усиливается так, что четно-индексированные выборки фильтра заменяются нулями. Повышающая дискретизация фильтра создает фильтр половинной полосы частот. Наконец, отвод фильтра, соответствующий групповой задержке фильтра в выборках, устанавливается равным 1/2. Это дает приближение каузального линейно-фазового КИХ-фильтра к идеальному полуполосному фильтру, определенному в Полполосных фильтрах (Halfband Filters). Описание этого метода проектирования фильтра с использованием алгоритма обмена Remez см. в [1].
dsp.FIRHalfbandDecimator использует эффективную многофазную реализацию для полуполосных фильтров при фильтрации входного сигнала. Главное преимущество полифазной реализации состоит в том, что перед фильтрацией можно уменьшить выборку сигнала. Это позволяет фильтровать с меньшей частотой выборки.
Разделение импульсной характеристики фильтра h (n) на две многофазные компоненты приводит к четной многофазной составляющей с z-преобразованием
z − n.
и нечетный полифазный компонент с z-преобразованием
) z − n.
Z-преобразование фильтра может быть записано в терминах четных и нечетных полифазных компонентов как
1H1 (z2).
Графически можно представить фильтрацию и входные данные с последующим понижением дискретизации на два со следующим рисунком

Используя многоскоростной благородный идентификатор для понижающей дискретизации, можно переместить операцию понижающей дискретизации перед фильтрацией. Это позволяет фильтровать с меньшей скоростью.

Для полуполосного фильтра единственным ненулевым коэффициентом в четной полифазной составляющей является коэффициент, соответствующий z0. Реализация полуполосного фильтра в качестве каузального КИХ-фильтра сдвигает ненулевой коэффициент приблизительно на z-N/4, где N - количество отводов фильтра. Этот процесс проиллюстрирован на следующем рисунке.

На верхнем графике показан полуполосный фильтр порядка 52. На нижнем графике показан четный полифазный компонент. Оба этих фильтра некаузальны. Задержка четного полифазного компонента на 13 образцов создает причинный КИХ-фильтр.
Для эффективной реализации полуполосного прореживателя dsp.FIRHalfbandDecimator заменяет блок задержки и оператора понижающей дискретизации коммутатором. Это показано на следующем рисунке, где одна полифазная составляющая заменена усилением и задержкой.

Коммутатор берет входные выборки из одной ветви и подает каждую другую выборку в один из двух многофазных компонентов для фильтрации. Это вдвое уменьшает частоту дискретизации входного сигнала. Какой полифазный компонент уменьшается до простой задержки, зависит от того, является ли половина порядка фильтра четной или нечетной. Это происходит потому, что задержка, необходимая для того, чтобы сделать четный полифазный компонент причинным, может быть нечетной или даже зависящей от половинного порядка фильтра. Это можно увидеть, проверив многофазные компоненты следующих фильтров.
filterspec = 'Filter order and stopband attenuation' ; halfOrderEven = dsp.FIRHalfbandDecimator('Specification',filterspec,... 'FilterOrder',64,'StopbandAttenuation',80); halfOrderOdd = dsp.FIRHalfbandDecimator('Specification',filterspec,... 'FilterOrder', 54,'StopbandAttenuation',80); polyphase(halfOrderEven) polyphase(halfOrderOdd)
Подводя итоги, dsp.FIRHalfbandDecimator
прореживает вход перед фильтрацией и фильтрует четные и нечетные многофазные компоненты входа отдельно с четными и нечетными многофазными компонентами фильтра.
использует тот факт, что один полифазный компонент фильтра является простой задержкой для полуполосного фильтра.
[1] Харрис, F.J. Multirate Signal Processing for Communication Systems, Prentice Hall, 2004, pp. 208-209.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Этот объект поддерживает создание кода для процессоров ARM ® Cortex ® -M и ARM Cortex-A.
dsp.Channelizer | dsp.DyadicAnalysisFilterBank | dsp.FIRHalfbandInterpolator | dsp.IIRHalfbandDecimatorИмеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.