Набор фильтров многофазного анализа БПФ
dsp.Channelizer Система object™ разделяет широкополосный входной сигнал на множество узких поддиапазонов с использованием набора аналитических фильтров на основе быстрого преобразования Фурье (БПФ). Набор фильтров использует прототип фильтра нижних частот и реализован с использованием многофазной структуры. Коэффициенты фильтра можно задать непосредственно или через параметры конструкции.
Для разделения широкополосного сигнала на несколько узких поддиапазонов:
Создать dsp.Channelizer и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
создает многофазный блок фильтров анализа БПФ системный объект, который разделяет широкополосный входной сигнал на множество узкополосных выходных сигналов. Этот объект реализует обратную операцию channelizer = dsp.Channelizerdsp.ChannelSynthesizer Системный объект.
создает набор фильтров многофазного FFT-анализа M-диапазона, свойство NumFrequencyBands которого имеет значение M. channelizer = dsp.Channelizer(M)
создает многофазный набор фильтров анализа БПФ с заданным значением каждого свойства. Заключите каждое имя свойства в отдельные кавычки.channelizer = dsp.Channelizer(Name,Value)
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
NumFrequencyBands - Количество полос частот8 (по умолчанию) | положительное целое число больше 1Число полос частот М, на которые объект разделяет входной широкополосный сигнал, заданное как положительное целое число больше 1. Это свойство соответствует количеству многофазных ветвей и длине БПФ, используемой в наборе фильтров.
Пример: 16
Пример: 64
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
DecimationFactor - Коэффициент прореживания8 (по умолчанию) | положительное целое числоКоэффициент прореживания D указан как положительное целое число, меньшее или равное числу полос частот M. Значение этого свойства по умолчанию равно числу указанных полос частот.
Если коэффициент прореживания D равен числу полос частот М, то отношение М/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 (по умолчанию) | положительное целое числоЧисло коэффициентов фильтра, используемых каждой многофазной ветвью, указанное как положительное целое число. Количество многофазных ветвей соответствует числу полос частот. Общее количество коэффициентов фильтра для прототипа фильтра нижних частот задается 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 (по умолчанию) | положительный вещественный скалярЗатухание полосы останова фильтра нижних частот, определяемое как положительный действительный скаляр в дБ. Это значение управляет максимальным количеством псевдонимов из одной полосы частот в следующую. Когда затухание полосы останова увеличивается, пульсация полосы пропускания уменьшается. При данном затухании полосы останова увеличение числа отводов на полосу сужает ширину перехода фильтра. В результате, существует более полезная полоса пропускания для каждой полосы частот за счет увеличенных вычислений.
Пример: 80
Это свойство применяется при установке Specification кому 'Number of taps per band and stopband attenuation'.
Типы данных: single | double
LowpassCoefficients - Коэффициенты прототипа фильтра нижних частот[1×49 double] (по умолчанию) | вектор строкиКоэффициенты фильтра нижних частот прототипа, заданные как вектор строки. Вектор коэффициентов по умолчанию получается с помощью rcosdesign(0.25,6,8,'sqrt'). На полосу частот должен быть по крайней мере один коэффициент. Если длина фильтра нижних частот меньше, чем количество полос частот, то объект нуль-заполняет коэффициенты.
При указании комплексных коэффициентов объект проектирует фильтр прототипа, центрированный с ненулевой частотой, также называемый полосовым фильтром. Модулированные варианты полосового фильтра прототипа появляются относительно фильтра прототипа и оборачиваются вокруг частотного диапазона [− Fs Fs]. Пример см. в разделе Канализатор с комплексными коэффициентами.
Настраиваемый: Да
Это свойство применяется при установке Specification кому 'Coefficients'.
Типы данных: single | double
Поддержка комплексного номера: Да
input - Ввод данныхВвод данных, заданный как вектор или матрица. Число строк во входном сигнале должно быть кратным числу полос частот набора фильтров. Каждый столбец входа соответствует отдельному каналу. Если М - число полос частот, а вход - L-by-1 матрица, то выходной сигнал имеет размеры L/M-by-M. Каждый узкополосный сигнал формирует столбец на выходе. Если вход имеет более одного канала, то есть имеет размеры L-by-N с N > 1, то выход имеет размеры L/M-by-M-by-N.
Этот объект поддерживает входные сигналы переменного размера. Размер входного кадра (количество строк) можно изменить даже после вызова алгоритма. Однако количество каналов (количество столбцов) должно оставаться постоянным.
Пример: randn (64,4)
Типы данных: single | double
Поддержка комплексного номера: Да
channOut - Выход каналообразователяВыходной сигнал каналообразователя, возвращаемый в виде матрицы или массива 3-D. Если вход является L-by-1 матрицей, то выходной сигнал имеет размеры L/M-by-M, где M - количество полос частот. Каждый узкополосный сигнал формирует столбец на выходе. Если вход имеет более одного канала, то есть имеет размеры L-by-N с N > 1, то выход имеет размеры L/M-by-M-by-N.
Типы данных: single | double
Поддержка комплексного номера: Да
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
coeffs | Коэффициенты прототипа фильтра нижних частот |
tf | Функция обратного переноса всего прототипа фильтра нижних частот |
polyphase | Возвращаемая многофазная матрица |
freqz | Частотная характеристика фильтров в каналообразователе |
fvtool | Визуализация фильтров в каналообразователе |
bandedgeFrequencies | Вычисление частот полосы пропускания |
centerFrequencies | Вычислить центральные частоты |
getFilters | Матрица возврата КИХ-фильтров каналообразователя |
Квадратурный зеркальный набор фильтров (QMF) содержит блок набора фильтров анализа и блок набора фильтров синтеза. dsp.Channelizer реализует банк фильтров анализа. dsp.ChannelSynthesizer реализует набор фильтров синтеза, используя эффективную многофазную реализацию на основе прототипа фильтра нижних частот.
Инициализация
Инициализируйте 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');
Вытекание
Используйте каналообразователь для разделения широкополосного входного сигнала на несколько узких диапазонов. Затем передают множество узкополосных сигналов в синтезатор, который объединяет эти сигналы для формирования широкополосного сигнала. Сравните спектры входного и выходного сигналов. Входные и выходные спектры очень близко совпадают.
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) на ряд узких поддиапазонов. Каждый полосовой фильтр сохраняет различную часть входного сигнала. После того как полоса пропускания уменьшена одним из полосовых фильтров, сигнал понижается до более низкой частоты дискретизации, соизмеримой с новой полосой пропускания.

Для эффективной реализации набора фильтров анализа каналообразователь использует прототип фильтра нижних частот.
Прототип фильтра нижних частот имеет импульсную характеристику h [n], нормализованную двустороннюю полосу пропускания 2π/M и частоту отсечки δ/M. M - количество полос частот, то есть ветвей банка фильтров анализа. Это значение соответствует длине БПФ, используемой банком фильтров. М может быть выше порядка 2048 или более. Затухание полосы останова определяет минимальный уровень помех (наложения) из одной полосы частот в другую. Пульсация полосы пропускания должна быть небольшой, чтобы входной сигнал не искажался в полосе пропускания.
Прототип фильтра нижних частот соответствует H0 (z) в наборе фильтров. Первая ветвь банка фильтров содержит H0 (z), за которым следует прореживатель. Другие ветви M-1 содержат фильтры, которые являются модулированными версиями фильтра-прототипа. Коэффициент модуляции задается следующим уравнением:
.., M − 1
Передаточная функция модулированного k-го полосового фильтра задается:
1,2,..., M − 1
На этом рисунке показана частотная характеристика М фильтров.

Для получения характеристик частотной характеристики фильтра Hk (z), где k = 1,..., M − 1, равномерно сдвигают частотную характеристику фильтра-прототипа, H0 (z), на кратные 2π/M. Каждый фильтр поддиапазонов, Hk (z), {k = 1,..., M-1}, выводится из фильтра прототипа.
Ниже приведено эквивалентное представление диаграммы частотного отклика с, находящимся в диапазоне от [− δ δ].

Частотные составляющие во входном сигнале, x (n), преобразуются по частоте в основную полосу частот путём умножения x (n) на комплексные экспоненциальные значения1,2,.., M − где wk = = 1,2,..., M − 1. Результирующие сигналы продукта проходят через фильтры нижних частот H0 (z). Выходной сигнал фильтра нижних частот является относительно узким по ширине полосы пропускания. Выполните понижающую выборку сигнала, соизмеримого с новой полосой пропускания. Выберите коэффициент прореживания D ≤ M, где M - количество ветвей банка фильтров анализа. Когда D < M, каналообразователь известен как избыточно дискретизированный или не максимально прореженный каналообразователь.
На рисунке показан банк фильтров анализа, в котором используется прототип фильтра нижних частот.

y1 (n), y2 (n),..., yM-1 (n) - узкие поддиапазонные сигналы, транслируемые в основную полосу.
Набор фильтров анализа может быть эффективно реализован с использованием многофазной структуры. Дополнительные сведения о банке фильтров анализа см. в разделе Банк фильтров анализа.
Для получения полифазной структуры начните с передаточной функции фильтра нижних частот прототипа:
.. + bNz − N
N + 1 - длина фильтра прототипа.
Это уравнение можно изменить следующим образом:
+bNz− (N−M+1))
M - количество полифазных компонентов.
Это уравнение можно записать следующим образом:
(M − 1) EM − 1 (zM)
E0 (zM), E1 (zM),..., EM-1 (zM) - многофазные компоненты прототипа фильтра нижних частот H0 (z).
Другие фильтры в наборе фильтров, Hk (z), где k = 1,..., M-1, являются модулированными версиями этого прототипа фильтра.
Передаточную функцию k-го модулированного полосового фильтра можно записать как − jwk).
Замена z на ze-jwk,
... + hNe − jNwkz − N
N + 1 - длина k-го фильтра.
В многофазной форме уравнение выглядит следующим образом:
(M − 1) EM − 1 (zM)]
Для всех М каналов в наборе фильтров передаточная функция H (z) задается:
) ⋮z− (M − 1) EM − 1 (zM)]
Когда D = M, каналообразователь известен как максимально прореженный каналообразователь или каналообразователь с критической выборкой.
Вот многоскоростное благородное тождество для прореживания, предполагая, что D = М.

Например, рассмотрим первую ветвь банка фильтров, которая содержит фильтр нижних частот.

Замените H0 (z) многофазным представлением.

После применения благородной идентичности для прореживания можно заменить задержки и коэффициент прореживания коммутатором. Переключатель запускается на первой ветви 0 и перемещается против часовой стрелки, как показано на следующей диаграмме. Накопитель на выходе принимает обработанные входные выборки от каждой ветви полифазной структуры и накапливает эти обработанные выборки до тех пор, пока переключатель не перейдет к ветви 0. Когда коммутатор переходит в ветвь 0, накопитель выдает накопленное значение.

Для всех М каналов в наборе фильтров передаточная функция H (z) задается:
E1 (z) ⋮EM−1 (z)]
Матрица слева представляет собой матрицу дискретного преобразования Фурье (DFT). С помощью матрицы DFT эффективная реализация низкочастотного банка фильтров на основе прототипов выглядит следующим образом.

Когда доставляется первая входная выборка, коммутатор подает этот вход в ветвь 0, и каналообразователь вычисляет первый набор выходных значений. По мере поступления большего количества входных выборок переключатель движется в направлении против часовой стрелки через ветви M − 1, M − 2, вплоть до ветви 0, доставляя по одной выборке за раз в каждую ветвь. Когда коммутатор переходит в ветвь 0, каналообразователь выводит следующий набор выходных значений. Этот процесс продолжается по мере поступления данных. Каждый раз, когда коммутатор приходит на первую ветвь 0, каналообразователь выводит y0 [m], y1 [m],..., yM-1 [m]. Каждая ветвь в каналообразователе эффективно выводит одну выборку для каждой M выборок, которые она принимает. Следовательно, частота дискретизации на выходе каналообразователя равна fs/M.
Когда D < M, каналообразователь известен как не максимально прореженный каналообразователь или каналообразователь с избыточной выборкой. В этой конфигурации выходная частота дискретизации отличается от интервала между каналами. Не максимально децимированные каналообразователи обеспечивают повышенную свободу проектирования, но за счет увеличения вычислительных затрат.
Если отношение M/D равно целому числу, которое больше 1 и меньше или равно M − 1, каналообразователь известен как каналообразователь с избыточной выборкой целых чисел. Если отношение М/D не является целым числом, то каналообразователь известен как рационально избыточно дискретизированный каналообразователь.
В этой конфигурации, когда доставляется первая входная выборка, коммутатор подает этот вход в ветвь 0, и каналообразователь вычисляет первый набор выходных значений. По мере поступления большего количества входных выборок переключатель движется в направлении против часовой стрелки через ветви D − 1, D − 2, вплоть до ветви 0, доставляя по одной выборке за раз в каждую ветвь. Когда коммутатор переходит в ветвь 0, каналообразователь выводит следующий набор выходных значений. Этот процесс продолжается по мере поступления данных. Каждый раз, когда коммутатор приходит на первую ветвь 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-ступени, буфер кругового сдвига и матрица DFT, эффективная реализация набора фильтров на основе низкочастотных прототипов выглядит следующим образом.

[1] Харрис, Фредрик Джей, многоскоростная обработка сигналов для систем связи, Prentice Hall PTR, 2004.
[2] Харрис, Ф.Дж., Крис Дик и Майкл Райс. «Цифровые приемники и передатчики, использующие банки многофазных фильтров для беспроводной связи». Транзакции IEEE ® по теории и методам микроволнового излучения. 51, № 4 (2003).
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
bandedgeFrequencies | centerFrequencies | coeffs | freqz | fvtool | getFilters | polyphase | tfdsp.ChannelSynthesizer | dsp.DyadicAnalysisFilterBank | dsp.FIRHalfbandDecimator | dsp.FIRHalfbandInterpolator | dsp.IIRHalfbandDecimatorИмеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.