Полуполоса
The dsp.FIRHalfbandInterpolator
Система object™ выполняет эффективную полифазную интерполяцию входного сигнала с использованием коэффициента повышающей дискретизации двух. Можно использовать dsp.FIRHalfbandInterpolator
для реализации фрагмента синтеза двухдиапазонной группы фильтров для синтеза сигнала от поддиапазонов lowpass и highpass. dsp.FIRHalfbandInterpolator
использует конечную импульсную характеристику equiripple проекта для создания полуполосы фильтров и полифазы реализацию для фильтрации входа.
Чтобы повысить и интерполировать свои данные:
Создайте dsp.FIRHalfbandInterpolator
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
возвращает конечную импульсную характеристику полуполосы фильтр интерполяции, firhalfbandinterp
= dsp.FIRHalfbandInterpolatorfirhalfbandinterp
, с настройками по умолчанию. В настройках по умолчанию системный объект обновляет и интерполирует входные данные с помощью полуполосной частоты 11025
Гц, ширина перехода 4.1
кГц и затухание в полосе задерживания 80
дБ.
возвращает полуполосу с дополнительными свойствами, заданными одним или несколькими firhalfbandinterp
= dsp.FIRHalfbandInterpolator(Name,Value
)Name,Value
аргументы в виде пар.
firhalfbandinterp = dsp.FIRHalfbandInterpolator('Specification','Filter order and stopband attenuation')
создает объект полуполосы конечной импульсной характеристики с порядком фильтра 52 и затуханием в полосе задерживания 80 дБ.Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release
функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в 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'
- Порядок фильтра и ширина перехода являются расчётными параметрами.
Фильтр разработан с использованием оптимального метода создания фильтра равновесия.
Когда вы задаете 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
- коэффициенты полуполоса фильтра2*firhalfband('minorder',0.407,1e-4)
(по умолчанию) | вектор-строкаКонечная импульсная характеристика полуполосы фильтрация коэффициентов, заданная как вектор-строка. Коэффициенты должны соответствовать конечной импульсной характеристике полуполосному формату импульсной характеристики. Для получения дополнительной информации об этом формате, смотрите Halfband Filters и Конечную Импульсную Характеристику 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
является группой синтезирующих фильтров, и алгоритм принимает два входов, lowpass и highpass поддиапазоны для синтеза.
CoefficientsDataType
- Длина слова и дроби коэффициентовnumerictype(1,16)
(по умолчанию) | numerictype
объектДлина слова и дроби коэффициентов, заданная как numerictype
со знаком или без знака объект. Значение по умолчанию,
numerictype(1,16)
соответствует объекту числового типа со знаком с 16-битными коэффициентами и длиной дроби, определенной на основе значений коэффициентов, чтобы получить максимально возможную точность.
Это свойство не настраивается.
Размер слова на выходе совпадает с размером слова на входе. Длина дроби выхода вычисляется таким образом, чтобы вся динамическая область значений выхода могла быть представлен без переполнения. Для получения дополнительной информации о том, как вычисляется длина дроби выхода, смотрите Правила точности по фиксированной точке для предотвращения переполнения в конечную импульсную характеристику фильтрах.
RoundingMethod
- Метод округления для выходных операций с фиксированной точкой'Floor'
(по умолчанию) | 'Ceiling'
| 'Convergent'
| 'Nearest'
| 'Round'
| 'Simplest'
| 'Zero'
Метод округления для выходных операций с фиксированной точкой, заданный как вектор символов. Для получения дополнительной информации о режимах округления см. Раздел «Точность и область значений».
реализует группу фильтров синтеза полуполос для входов y
= firhalfbandinterp(x1
,x2
)x1
и x2
. x1
- lowpass выхода банка фильтров анализа полуполосы и x2
- высокочастотный выход банка фильтров полуполосного анализа. dsp.FIRHalfbandInterpolator
реализует банк синтезирующих фильтров только тогда, когда 'FilterBankInputPort'
для свойства задано значение true
.
x1
- Вход данныхДанные входы к конечной импульсной характеристике полуполосы интерполятору, заданные как вектор-столбец или матрица. Этот сигнал является lowpass выхода группы фильтров анализа полуполосы. Если входной сигнал является матрицей, каждый столбец матрицы рассматривается как независимый канал.
Типы данных: 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
Поддержка комплексного числа: Да
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj
, используйте следующий синтаксис:
release(obj)
dsp.FIRHalfbandInterpolator
freqz | Частотная характеристика фильтра в дискретном времени Системного объекта |
fvtool | Визуализация частотной характеристики фильтров DSP |
info | Информация о фильтре Системный объект |
cost | Оценка стоимости реализации фильтра Системный объект |
coeffs | Возвращает фильтрация коэффициентов системного объекта в структуре |
polyphase | Полифаза разложение многоскоростного фильтра |
Создайте lowpass halfband интерполяционный фильтр для данных повышающей дискретизации до 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)
.
Примечание: The 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 выборок. Фильтрация речевого сигнала в поддиапазоны lowpass и highpass с частотой полуполосой 5512,5 Гц. Восстановите lowpass приближение речевого сигнала путем интерполяции lowpass поддиапазона. Воспроизведение отфильтрованного выхода.
while ~isDone(afr) audioframe = afr(); xlo = firhalfbanddecim(audioframe); ylow = firhalfbandinterp(xlo); adw(ylow); end
Подождите, пока аудиофайл не будет воспроизведен до конца, затем закройте файл входа и отпустите ресурс аудиофайла выхода.
release(afr); release(adw);
Используйте полуполосный дециматор и интерполятор, чтобы реализовать двухканальный банк фильтров. Этот пример использует файл аудио входа и показывает, что степень спектр выхода банка фильтров не значительно отличается от входа.
Примечание.Если вы используете R2016a или более ранний релиз, замените каждый вызов объекта эквивалентным синтаксисом шага. Например, obj (x) становится шагом (obj, x).
Примечание: The audioDeviceWriter
Системная object™ не поддерживается в MATLAB Online.
Настройте устройство чтения аудио файла и средства записи устройства. Создайте конечную импульсную характеристику полуполосы дециматор и интерполятор. Наконец, установите анализатор спектра, чтобы отобразить степень спектры входа и выхода банка фильтров.
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 выборки за раз. Фильтрация входов для получения 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 halfband фильтр задается как
Идеальный фильтр не реализуем, потому что импульсная характеристика некаузальна и не абсолютно суммируема. Однако импульсная характеристика идеального lowpass обладает некоторыми важными свойствами, которые требуются для реализовываемого приближения. В частности, идеальная импульсная характеристика lowpass полуполосы фильтра:
равно 0 для всех четных индексированных выборок
равен 1/2 при n = 0. Вы можете увидеть это с помощью правила L'Hopital на непрерывном эквиваленте импульсной характеристики в дискретном времени.
Идеальный фильтр highpass halfband задается как
Оценка предыдущего интеграла дает следующую импульсную характеристику
Идеальная полуполоса filter:
Равно 0 для всех четных индексированных выборок
Равно 1/2 при n = 0.
dsp.FIRHalfbandInterpolator
использует причинно- конечную импульсную характеристику приближение к идеальной полуполосе реакции, которое основано на минимизации норма ошибки (минимакс). Смотрите Алгоритмы для получения дополнительной информации.
dsp.FIRHalfbandInterpolator
использует минимаксный проект конечной импульсной характеристики для разработки полнополосного линейного фазового фильтра с желаемыми спецификациями. Полнодиапазонный фильтр усиливается так, что четные индексированные выборки фильтра заменяются нулями. Усиление дискретизации фильтра создает полуполосу фильтр. Наконец, отгиб фильтра, соответствующий групповой задержке фильтра в выборках, устанавливается равным 1/2. Это приводит к причинно-следственному КИХ-фильтру линейной фазы, приближению к идеальной полуполосе фильтру, заданному в Полуполосу Filters. Описание этого метода создания фильтра с помощью алгоритма обмена Remez см. в разделе [1].
Коэффициенты полуполосы интерполяционного фильтра масштабируются коэффициентом интерполяции, два, чтобы сохранить выход степени сигнала.
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)
Один из полифазных компонентов имеет один ненулевой коэффициент, указывающий, что это простая задержка. Чтобы сохранить выход степени сигнала, коэффициенты масштабируются коэффициентом интерполяции, двумя. Чтобы увидеть это масштабирование, сравните полифазные компоненты полуполосного интерполятора с коэффициентами полуполосного дециматора.
hfirinterp = dsp.FIRHalfbandInterpolator; hfirdecim = dsp.FIRHalfbandDecimator; polyphase(hfirdecim) polyphase(hfirinterp)
Результирующие dsp.FIRHalfbandInterpolator
Фильтрует вход перед повышением дискретизации с помощью четных и нечетных полифазных компонентов фильтра.
Использует тот факт, что один фильтр полифазы компонент является простой задержкой для полуполосы фильтра.
[1] Harris, F.J. Multirate Signal Processing for Communication Systems, Prentice Hall, 2004, pp. 208-209.
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
Этот объект поддерживает генерацию кода для ARM® Кора®Процессоры -M и ARM Cortex-A. Для получения дополнительной информации о генерации кода ARM Cortex смотрите Code Generation для процессоров 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.