Полупериодный интерполятор
dsp.FIRHalfbandInterpolator Система object™ выполняет эффективную многофазную интерполяцию входного сигнала с использованием коэффициента повышающей дискретизации, равного двум. Вы можете использовать dsp.FIRHalfbandInterpolator реализовать синтезирующую часть двухдиапазонного набора фильтров для синтеза сигнала из низкочастотных и высокочастотных поддиапазонов. dsp.FIRHalfbandInterpolator использует equiripple-конструкцию FIR для построения полуполосных фильтров и полифазную реализацию для фильтрации входных данных.
Чтобы увеличить выборку и интерполяцию данных, выполните следующие действия.
Создать dsp.FIRHalfbandInterpolator и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
возвращает фильтр полуполосной интерполяции FIR, firhalfbandinterp = dsp.FIRHalfbandInterpolatorfirhalfbandinterp, с настройками по умолчанию. В настройках по умолчанию объект System увеличивает выборку и интерполирует входные данные, используя частоту половины полосы частот 11025 Гц, ширина перехода 4.1 кГц и затухание полосы останова 80 дБ.
возвращает полуполосный интерполятор с дополнительными свойствами, заданными одним или несколькими firhalfbandinterp = dsp.FIRHalfbandInterpolator(Name,Value)Name,Value аргументы пары.
firhalfbandinterp = dsp.FIRHalfbandInterpolator('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 - Коэффициенты полуполосного фильтра FIR2*firhalfband('minorder',0.407,1e-4) (по умолчанию) | вектор строкиКоэффициенты полуполосного фильтра FIR, заданные как вектор строки. Коэффициенты должны соответствовать формату импульсной характеристики полуполосы FIR. Дополнительные сведения об этом формате см. в разделах Halfband Filters и FIR Halfband Filter Design. Если половинный порядок фильтра, (length(Numerator) - 1)/2 является четным, каждый другой коэффициент, начинающийся с первого коэффициента, должен быть нулем, за исключением центрального коэффициента, который должен быть равен 1,0. Если половина порядка фильтра нечётная, последовательность чередующихся нулей с 1,0 в центре начинается со второго коэффициента.
Это свойство применяется при установке Specification кому 'Coefficients'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
SampleRate - Частота входных выборок44100 (по умолчанию) | положительный вещественный скалярЧастота входных выборок в Гц, заданная как положительный действительный скаляр. Частота входных выборок по умолчанию составляет 44100 Гц. Если в качестве одного из параметров конструкции фильтра указана ширина перехода, она не может превышать 1/2 входной частоты дискретизации.
Типы данных: single | double
FilterBankInputPort - Набор фильтров синтезаfalse (по умолчанию) | trueБанк фильтров синтеза, указанный как false или true. Если это свойство false, dsp.FIRHalfbandInterpolator является интерполяционным фильтром для одного входного значения вектора или матрицы при вызове алгоритма. Если это свойство true, dsp.FIRHalfbandInterpolator является банком фильтров синтеза, и алгоритм принимает два входных сигнала, низкочастотный и высокочастотный поддиапазоны для синтеза.
CoefficientsDataType - Длина коэффициентов в словах и дробяхnumerictype(1,16) (по умолчанию) | numerictype объектДлины коэффициентов в словах и дробях, указанные как подписанные или неподписанные numerictype объект. Значение по умолчанию, numerictype(1,16) соответствует знаковому объекту числового типа с 16-битовыми коэффициентами и длиной дроби, определяемой на основе значений коэффициентов, для обеспечения наилучшей возможной точности.
Это свойство невозможно настроить.
Длина слова на выходе равна длине слова на входе. Длина доли выходного сигнала вычисляется таким образом, что весь динамический диапазон выходного сигнала может быть представлен без переполнения. Дополнительные сведения о том, как вычисляется длина фракции вывода, см. в разделе Правила точности с фиксированной точкой для предотвращения переполнения в фильтрах FIR.
RoundingMethod - Метод округления для выходных операций с фиксированной точкой'Floor' (по умолчанию) | 'Ceiling' | 'Convergent' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'Метод округления для выходных операций с фиксированной точкой, заданный как символьный вектор. Дополнительные сведения о режимах округления см. в разделах Точность и диапазон.
реализует набор полуполосных синтезирующих фильтров для входов y = firhalfbandinterp(x1,x2)x1 и x2. x1 - низкочастотный выходной сигнал блока фильтров анализа в полуполосах и x2 - это верхний выходной сигнал набора фильтров для анализа в полуполосах. dsp.FIRHalfbandInterpolator реализует банк фильтров синтеза только тогда, когда 'FilterBankInputPort' свойство имеет значение true.
x1 - Ввод данныхВвод данных в полуполосовой интерполятор FIR, заданный как вектор столбца или матрица. Этот сигнал является низкочастотным выходом блока фильтров анализа полуполосы. Если входной сигнал является матрицей, каждый столбец матрицы обрабатывается как независимый канал.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да
x2 - Второй ввод данныхВторой ввод данных в набор фильтров синтеза, указанный как вектор столбца или матрица. Этот сигнал является высоким выходным сигналом набора фильтров для анализа в полуполосах. Если входной сигнал является матрицей, каждый столбец матрицы обрабатывается как независимый канал.
Размер, тип данных и сложность обоих входов должны быть одинаковыми.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да
y - Выход интерполятораВывод интерполятора, возвращаемый в виде вектора столбца или матрицы. Количество строк на выходе интерполятора в два раза превышает число строк во входном сигнале.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
dsp.FIRHalfbandInterpolatorfreqz | Частотная характеристика объекта системы дискретно-временного фильтра |
fvtool | Визуализация частотной характеристики фильтров DSP |
info | Сведения об объекте filter System |
cost | Оценка затрат на внедрение фильтра Объект системы |
coeffs | Возвращает коэффициенты объекта System фильтра в структуре |
polyphase | Многофазное разложение многоскоростного фильтра |
Создайте двухполосный фильтр интерполяции нижних частот для повышающей дискретизации данных до 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);
Постройте график импульсной характеристики. Коэффициент 0-го порядка задерживается на 26 выборок, что равно групповой задержке фильтра. Это дает причинный полуполосный фильтр.
fvtool(firhalfbandinterp,'Analysis','Impulse');

Постройте график величины и фазовой характеристики.
fvtool(firhalfbandinterp,'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 кГц. Порядок фильтрации составляет 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);
Идеальный полуполосной фильтр нижних частот задается
¼ 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.FIRHalfbandInterpolator использует причинную FIR-аппроксимацию к идеальному полуполосному отклику, которая основана на минимизации нормы ошибки (minimax). Дополнительные сведения см. в разделе Алгоритмы.
dsp.FIRHalfbandInterpolator использует минимальную конструкцию FIR для проектирования полнополосного линейного фазового фильтра с требуемыми спецификациями. Полнополосный фильтр усиливается так, что четно-индексированные выборки фильтра заменяются нулями. Повышающая дискретизация фильтра создает фильтр половинной полосы частот. Наконец, отвод фильтра, соответствующий групповой задержке фильтра в выборках, устанавливается равным 1/2. Это дает приближение каузального линейно-фазового КИХ-фильтра к идеальному полуполосному фильтру, определенному в Полполосных фильтрах (Halfband Filters). Описание этого метода проектирования фильтра с использованием алгоритма обмена Remez см. в [1].
Коэффициенты полуполосного интерполяционного фильтра масштабируются коэффициентом интерполяции, равным двум, для сохранения выходной мощности сигнала.
dsp.FIRHalfbandInterpolator использует эффективную многофазную реализацию для полуполосных фильтров при фильтрации входного сигнала. Для перемещения операции повышения дискретизации после фильтрации можно использовать многофазную реализацию. Это позволяет фильтровать с меньшей частотой выборки.
Разделение импульсной характеристики фильтра h (n) на две многофазные компоненты приводит к четной многофазной составляющей с z-преобразованием
z − n.
и нечетный полифазный компонент с z-преобразованием
) z − n.
Z-преобразование фильтра может быть записано в терминах четных и нечетных полифазных компонентов как
1H1 (z2).
Графически можно представить повышающую выборку на две с последующей фильтрацией со следующим рисунком

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

Для полуполосного фильтра единственным ненулевым коэффициентом в четной полифазной составляющей является коэффициент, соответствующий 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)
Один из многофазных компонентов имеет единственный ненулевой коэффициент, указывающий, что это простая задержка. Для сохранения выходной мощности сигнала коэффициенты масштабируются коэффициентом интерполяции, равным двум. Чтобы увидеть это масштабирование, сравните полифазные компоненты полуполосного интерполятора с коэффициентами полуполосного прореживателя.
hfirinterp = dsp.FIRHalfbandInterpolator; hfirdecim = dsp.FIRHalfbandDecimator; polyphase(hfirdecim) polyphase(hfirinterp)
Подводя итоги, dsp.FIRHalfbandInterpolator
Фильтрация входных данных перед повышающей дискретизацией четными и нечетными полифазными компонентами фильтра.
Использует тот факт, что один полифазный компонент фильтра является простой задержкой для полуполосного фильтра.
[1] Харрис, F.J. Multirate Signal Processing for Communication Systems, Prentice Hall, 2004, pp. 208-209.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Этот объект поддерживает создание кода для процессоров ARM ® Cortex ® -M и ARM Cortex-A. Дополнительные сведения о создании кода ARM Cortex см. в разделе Создание кода для процессоров ARM Cortex-M и ARM Cortex-A.
Этот объект также поддерживает создание кода SIMD с использованием технологии Intel AVX2, если входной сигнал имеет тип данных single или double.
Технология SIMD значительно повышает производительность генерируемого кода.
dsp.ChannelSynthesizer | dsp.DyadicSynthesisFilterBank | dsp.FIRHalfbandDecimator | dsp.IIRHalfbandInterpolatorИмеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.