Полифазный блок фильтров БПФ анализа
The dsp.Channelizer
Система object™ разделяет широкополосный входной сигнал на несколько узких поддиапазонов с помощью банка фильтров на основе быстрого преобразования Фурье (FFT). Банк фильтров использует прототип lowpass фильтра и реализован с помощью структуры полифазы. Можно задать коэффициенты фильтра непосредственно или через расчётные параметры.
Чтобы разделить широкополосный сигнал на несколько узких поддиапазонов:
Создайте dsp.Channelizer
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
создает банк фильтров полифазы БПФ анализа Системный объект, который разделяет широкополосный входной сигнал на несколько узкополосные выходы сигналов. Этот объект реализует обратную операцию channelizer
= dsp.Channelizerdsp.ChannelSynthesizer
Системный объект.
создает M-диапазонный полифазный банк фильтров анализа БПФ с установленным на M свойством NumFrequencyBands .channelizer
= dsp.Channelizer(M)
создает полифазу банк фильтров анализа БПФ с каждым заданным набором свойств до заданного значения. Заключайте каждое имя свойства в одинарные кавычки.channelizer
= dsp.Channelizer(Name,Value
)
Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release
функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
NumFrequencyBands
- Количество диапазонов частот8
(по умолчанию) | положительное целое число, больше 1Количество полос частот M на которые объект разделяет входной широкополосный сигнал, заданное как положительное целое число, больше 1. Это свойство соответствует количеству полифазы ветвей и длине БПФ, используемой в банке фильтров.
Пример: 16
Пример: 64
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DecimationFactor
- Коэффициент десятикратного уменьшения8
(по умолчанию) | положительное целое числоКоэффициент десятикратного уменьшения D задан как положительное целое число, меньше или равное количеству < reservedrangesplaceholder0 > полос частот. Значение по умолчанию этого свойства равняется количеству заданных полос частот.
Если D коэффициента десятикратного уменьшения равен количеству частот полос M, то отношение M/ D равняется 1, и канализатор известен как максимально децимируемый канализатор.
Если отношение M/ D больше 1
скорость выхода выборки отличается от расстояния между каналами, и канализатор известен как не максимально децимируемый канализатор. Если отношение является целым числом, канализатор известен как канализатор с избыточной дискретизацией целочисленных чисел. Если отношение не является целым числом, например, 4/3, канализатор известен как рационально избыточно дискретизированный канализатор. Для получения дополнительной информации см. Алгоритм.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Specification
- Создание фильтра параметров или коэффициентов'Number of taps per band and stopband attenuation'
(по умолчанию) | 'Coefficients'
Создания фильтра или коэффициенты фильтра, заданные как один из следующих опций:
'Number of taps per band and stopband attenuation'
- Задайте параметры создания фильтра через NumTapsPerBand
и свойства затухания в полосе задерживания (дБ).
'Coefficients'
- Задайте коэффициенты фильтра непосредственно с помощью свойства LowpassCoefficients.
NumTapsPerBand
- Количество коэффициентов фильтра на полосу12
(по умолчанию) | положительное целое числоКоличество коэффициентов фильтра, используемых каждой полифазной ветвью, заданное в виде положительного целого числа. Количество полифазы ветвей совпадает с количеством частотных полос. Общее количество коэффициентов фильтра для lowpass прототипа определяется NumFrequencyBands
× NumTapsPerBand
. При данном затухании в полосе задерживания увеличение количества отводов на полосу сужает ширину перехода фильтра. В результате существует более полезная полоса пропускания для каждого диапазона частот за счет увеличения расчетов.
Пример: 8
Пример: 16
Это свойство применяется при установке Specification
на 'Number of taps per band and stopband attenuation'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
StopbandAttenuation
- Затухание в полосе задерживания80
(по умолчанию) | положительный действительный скалярЗатухание в полосе задерживания lowpass фильтра, заданный как положительный действительный скаляр в дБ. Это значение управляет максимальной величиной сглаживания от одной полосы частот к следующему. Когда затухание в полосе задерживания увеличивается, неравномерность в полосе пропускания уменьшается. При данном затухании в полосе задерживания увеличение количества отводов на полосу сужает ширину перехода фильтра. В результате существует более полезная полоса пропускания для каждого диапазона частот за счет увеличения расчетов.
Пример: 80
Это свойство применяется при установке Specification
на 'Number of taps per band and stopband attenuation'
.
Типы данных: single
| double
LowpassCoefficients
- Коэффициенты lowpass прототипа[1×49 double]
(по умолчанию) | вектор-строкаКоэффициенты прототипа lowpass фильтра, заданные как вектор-строка. Вектор коэффициентов по умолчанию получен с помощью rcosdesign(0.25,6,8,'sqrt')
. Должен быть по крайней мере один коэффициент на полосу частот. Если длина lowpass меньше, чем количество полос, объект заполняет коэффициенты нули.
Если вы задаете комплексные коэффициенты, объект проектирует фильтр прототипа, который центрируется на ненулевой частоте, также известной как полосно-пропускающий фильтр. Модулированные версии полосно-пропускающего фильтра прототипа появляются относительно фильтра прототипа и обернуты вокруг частотной области значений [− F s F s]. Для получения примера смотрите Channelizer with Complex Coefficients.
Настраиваемый: Да
Это свойство применяется при установке Specification
на 'Coefficients'
.
Типы данных: single
| double
Поддержка комплексного числа: Да
input
- Вход данныхВход данных, заданный как вектор или матрица. Количество строк в входном сигнале должно быть кратным количеству полос частот группы фильтров. Каждый столбец входа соответствует отдельному каналу. Если M количество частотных полос, а вход является матрицей L -by-1, то сигнал выхода имеет размерности L/M -by- M. Каждый узкополосный сигнал формирует столбец в выходе. Если вход имеет более одного канала, то есть имеет размерности L -by- N с N > 1, то выход имеет размерности L/M -by- M -by- N.
Этот объект поддерживает входные сигналы переменного размера. Вы можете изменить размер входного кадра (количество строк) даже после вызова алгоритма. Однако количество каналов (количество столбцов) должно оставаться постоянным.
Пример: randn (64,4)
Типы данных: single
| double
Поддержка комплексного числа: Да
channOut
- Выход канализатораВыход Channelizer, возвращенный как матрица или трехмерный массив. Если вход является матрицей L -by-1, то выходной сигнал имеет размерности L/M -by- M, где M количество полос частот. Каждый узкополосный сигнал формирует столбец в выходе. Если вход имеет более одного канала, то есть имеет размерности L -by- N с N > 1, то выход имеет размерности L/M -by- M -by- N.
Типы данных: single
| double
Поддержка комплексного числа: Да
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj
, используйте следующий синтаксис:
release(obj)
coeffs | Коэффициенты lowpass прототипа |
tf | Обратная передаточная функция общего прототипа lowpass фильтра |
polyphase | Возвращает полифазную матрицу |
freqz | Частотная характеристика фильтров в канализаторе |
fvtool | Визуализируйте фильтры в канализаторе |
bandedgeFrequencies | Вычислите полосы пропускания |
centerFrequencies | Вычисление центральных частот |
getFilters | Возвращает матрицу каналообразующих конечных импульсных характеристик фильтров |
Блок квадратурных зеркальных фильтров (QMF) содержит блок анализирующих фильтров и блок синтезирующих фильтров. dsp.Channelizer
реализует банк фильтров анализа. dsp.ChannelSynthesizer
реализует блок синтезирующих фильтров, используя эффективную полифазную реализацию, основанную на lowpass.
Инициализация
Инициализируйте dsp.Channelizer
и dsp.ChannelSynthesizer
Системные объекты. Каждый объект настраивается с 8 полосами частот, 8 полифаз ветвями в каждом фильтре, коэффициентами 12 на полифазу ветвь и затухание в полосе задерживания 140 дБ. Используйте синусоиду с несколькими частотами в качестве входного сигнала. Просмотрите спектр входа и спектр выхода с помощью спектрального анализатора.
offsets = [-40,-30,-20,10,15,25,35,-15]; sinewave = dsp.SineWave('ComplexOutput',true,'Frequency',... offsets+(-375:125:500),'SamplesPerFrame',800); channelizer = dsp.Channelizer('StopbandAttenuation',140); synthesizer = dsp.ChannelSynthesizer('StopbandAttenuation',140); spectrumAnalyzer = dsp.SpectrumAnalyzer('ShowLegend',true,'NumInputPorts',... 2,'ChannelNames',{'Input','Output'},'Title','Input and Output of QMF');
Вытекание
Используйте channelizer, чтобы разделить широкополосный входной сигнал на несколько узкие полосы. Затем передайте несколько узкополосных сигналов в синтезатор, который объединяет эти сигналы, чтобы сформировать широкополосный сигнал. Сравните спектры входного и выходного сигналов. Входной и выходной спектры совпадают очень близко.
for i = 1:5000 x = sum(sinewave(),2); y = channelizer(x); v = synthesizer(y); spectrumAnalyzer(x,v) end
Создайте dsp.Channelizer
Объекту и установите LowpassCoefficients
свойство вектору комплексных коэффициентов.
Комплексные Коэффициенты
Использование firpm
, определите коэффициенты оптимального равновесия Парка-Макклеллана конечной импульсной характеристики фильтра порядка 30 и характеристики частоты и амплитуды, описанные векторами F = [0 0,2 0,4 1,0] и A = [1 1 0 0], соответственно.
Создайте комплексную версию этих коэффициентов путем умножения на комплексную экпоненту. Результирующая частотная характеристика является характеристикой полосно-пропускающего фильтра на заданной частоте, в этом случае 0,4.
blowpass = firpm(30,[0 .2 .4 1],[1 1 0 0]); N = length(blowpass)-1; Fc = 0.4; j = complex(0,1); bbandpass = blowpass.*exp(j*Fc*pi*(0:N));
Channelizer
Создайте dsp.Channelizer
объект с 4 полосами частот и установите Specification
свойство к 'Coefficients'
.
chann = dsp.Channelizer('NumFrequencyBands',4,'Specification',"Coefficients");
Передайте комплексные коэффициенты в канализатор. Фильтр прототипа является полосно-пропускающим с центральной частотой 0,4. Модулированные версии этого фильтра появляются относительно фильтра прототипа и обернуты вокруг частотной области значений [Fs Fs].
chann.LowpassCoefficients = bbandpass
chann = dsp.Channelizer with properties: NumFrequencyBands: 4 DecimationFactor: 4 Specification: 'Coefficients' LowpassCoefficients: [1x31 double]
Визуализируйте частотную характеристику канализатора.
fvtool(chann)
Типовой банк фильтров анализа состоит из серии параллельных полосно-пропускающих фильтров, которые разделяют вход широкополосный сигнал, x(n), на серии узких поддиапазонов. Каждый полосно-пропускающий фильтр сохраняет разный фрагмент входного сигнала. После уменьшения полосы пропускания одним из полосно-пропускающих фильтров сигнал уменьшается до более низкой частоты дискретизации, сопоставимой с новой полосой пропускания.
Чтобы эффективно реализовать банк фильтров анализа, канализатор использует прототип lowpass.
У прототипа фильтр lowpass есть импульсная характеристика h[n], нормализованная двухсторонняя пропускная способность 2π / M, и частота среза π / M. M - количество полос частот, то есть ветвей группы фильтров анализа. Это значение соответствует длине БПФ, которую использует банк фильтров. M может быть высоким порядка 2048 или более. Это затухание в полосе задерживания определяет минимальный уровень интерференции (сглаживания) от одной частотной полосы к другой. Эта неравномерность в полосе пропускания должен быть маленьким, чтобы входной сигнал не искажался в полосе пропускания.
Lowpass прототипа соответствует H0 (z) в группе фильтров. Первая ветвь группы фильтров содержит H0 (z), за которой следует дециматор. Другие M - 1 ветви содержат фильтры, которые являются модулированными версиями фильтра прототипа. Коэффициент модуляции задается следующим уравнением:
Передаточная функция модулированного k го полосно-пропускающего фильтра задается:
Этот рисунок показывает частотную характеристику M фильтров.
Чтобы получить характеристики частотной характеристики фильтра Hk(z), где k = 1,..., M − 1, равномерно сдвиньте частотную характеристику фильтра прототипа, H0(z), на множители 2,/ M. Каждый поддиапазонный фильтр, Hk (z), {k = 1,..., M - 1}, получают из фильтра прототипа.
Далее приведено эквивалентное представление диаграммы частотной характеристики с ω в диапазоне от [−
Частотные составляющие в входном сигнале, x(n), преобразуются по частоте в полосу частот основного диапазона путем умножения x(n) со сложными экспоненциалами, , где , и . Получившиеся сигналы продукта передаются через lowpass, H0(z). Выход lowpass относительно узок по ширине полосы пропускания. Понизите значение сигнала, сопоставимого с новой пропускной способностью. Выберите коэффициент десятикратного уменьшения, D ≤ M, где M количество ветвей банка фильтров анализа. Когда D < M, каналообразующий элемент известен как избыточно дискретизированный или не максимально децимируемый каналообразующий элемент.
Рисунок показывает банк фильтров анализа, который использует lowpass прототипа.
y1(n), y2(n), ..., yM-1(n) узкие поддиапазонные сигналы переведены в основной диапазон.
Группа фильтров анализа может быть эффективно реализована с помощью структуры полифазы. Для получения дополнительной информации о банке фильтров анализа смотрите Analysis Filter Bank.
Чтобы вывести полифазную структуру, начните с передаточной функции lowpass прототипа:
N + 1 - длина фильтра прототипа.
Можно переставить это уравнение следующим образом:
M - количество полифазы компонентов.
Можно записать это уравнение как:
E0 (zM), E1 (zM),..., EM-1 (zM) являются полифазными компонентами lowpass прототипа H0 (z).
Другие фильтры в группе фильтров Hk (z), где k = 1,..., M -1, являются модулированными версиями этого фильтра прототипа .
Можно записать передаточную функцию k-го модулированного полосно-пропускающего фильтра как.
Замена z на ze-jwk,
N + 1 - длина k-го фильтра.
В полифазной форме уравнение выглядит следующим образом:
Для всех каналов M в банке фильтров передаточная функция H (z) определяется:
Когда D = M, разделитель каналов известен как максимально децимированный разделитель каналов или критически дискретизированный разделитель каналов.
Вот многорасовые благородные тождества для десятикратного уменьшения, принимая, что D = M.
Для примера рассмотрим первую ветвь банка фильтров, которая содержит lowpass фильтр.
Замените H0 (z) своим полифазным представлением.
После применения благородных тождеств для десятикратного уменьшения можно заменить задержки и коэффициент десятикратного уменьшения на коммутатор. Переключатель запускается на первой ветви 0 и перемещается в направлении против часовой стрелки, как показано на следующей схеме. Аккумулятор на выходе принимает обработанные входные выборки от каждой ветви полифазной структуры и накапливает эти обработанные выборки до тех пор, пока переключатель не перейдет к ветви 0. Когда переключатель переходит к ветви 0, аккумулятор выводит накопленное значение.
Для всех каналов M в банке фильтров передаточная функция H (z) определяется:
Матрица слева является дискретной матрицей преобразования Фурье (DFT). С помощью матрицы ДПФ эффективная реализация банка фильтров на основе прототипов lowpass выглядит так.
Когда доставляется первая входная выборка, переключатель подает этот вход в ветвь 0, и канализатор вычисляет первый набор выхода значений. Поскольку более выборки входа входят, шаги выключателя в направлении против часовой стрелки через <reservedrangesplaceholder7> −1 ветвей, <reservedrangesplaceholder6> −2, полностью, чтобы ветвиться 0, поставляя одну выборку за один раз каждой ветви. Когда переключатель приходит к ветви 0, channelizer выходов следующий набор выхода значений. Этот процесс продолжается, когда данные продолжают поступать. Каждый раз, когда переключатель приходит к первой ветви 0, канализатор выводит y0[m], y1[m],..., yM-1[m]. Каждая ветвь в канализаторе эффективно выводит одну выборку для каждого полученного ею M выборки. Следовательно, скорость дискретизации на выходе канализатора равна fs/ M.
Когда D < M, разделитель каналов известен как не максимально децимируемый разделитель каналов или избыточно дискретизированный разделитель каналов. В этом строении выходная частота выборки отличается от интервала между каналами. Не максимально децимированные канализаторы обеспечивают повышенную свободу проекта, но за счет увеличения вычислительных затрат.
Если отношение M/ D равняется целому числу, которое больше 1 и меньше или равно M − 1, каналообразующий элемент известен как каналообразующий элемент с избыточной дискретизацией. Если отношение M/ D не является целым числом, тогда канализатор известен как рационально-избыточно дискретизированный канализатор.
В этом строении, когда доставляется первая входная выборка, переключатель подает этот вход в ветвь 0, и канализатор вычисляет первый набор выхода значений. Поскольку более выборки входа входят, шаги выключателя в направлении против часовой стрелки через <reservedrangesplaceholder4> −1 ветвей, <reservedrangesplaceholder3> −2, полностью, чтобы ветвиться 0, поставляя одну выборку за один раз каждой ветви. Когда переключатель приходит к ветви 0, channelizer выходов следующий набор выхода значений. Этот процесс продолжается, когда данные продолжают поступать. Каждый раз, когда переключатель приходит к первой ветви 0, канализатор выводит y0[m], y1[m],..., yM-1[m].
Когда поступает больше данных и коммутатор подает эти выборки на первые D адреса, формальное содержимое этих адресов смещается на следующий набор D адресов, и этот процесс сдвига данных продолжается каждый раз, когда появляется новый набор D входных выборок.
Для каждой D входной выборки, которая подается в полифазную структуру, канализатор выводит M выборки, y0[m], y1[m],..., yM-1[m]. Этот процесс увеличивает скорость выхода выборки от fs/ M в случае максимально децимированного канализатора до fs/ D в случае не максимально децимированного канализатора.
Для получения дополнительной информации см. раздел [2].
После того, как каждая последовательность данных D-точки доставляется в секционированный M-ступенчатый полифазный фильтр, выходы M каскадов вычисляются и обусловливаются для доставки в БПФ M-точки. Сдвиг данных через фильтр вводит частотно-зависимый сдвиг фазы. Чтобы исправить этот сдвиг фазы и псевдонимы всех полос к DC, буфер кругового сдвига вставляется после полифазных фильтров и перед FFT M -точка.
С коммутатором, за которым следует полифазный фильтр M ступени, буфер кругового сдвига и матрица ДПФ, эффективная реализация банка фильтров на основе прототипов lowpass выглядит следующим образом.
[1] Harris, Fredic J, Multirate Signal Processing for Communication Systems, Prentice Hall PTR, 2004.
[2] Харрис, Ф. Дж., Крис Дик и Майкл Райс. «Цифровые приемники и передатчики, использующие Polyphase Filter Banks для беспроводной связи». IEEE® Транзакции по микроволновой теории и методам. 51, № 4 (2003).
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
bandedgeFrequencies
| centerFrequencies
| coeffs
| freqz
| fvtool
| getFilters
| polyphase
| tf
dsp.ChannelSynthesizer
| dsp.DyadicAnalysisFilterBank
| dsp.FIRHalfbandDecimator
| dsp.FIRHalfbandInterpolator
| dsp.IIRHalfbandDecimator
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.