Примечание
При использовании R2016a или более ранней версии замените каждый вызов объекта синтаксисом эквивалентного шага. Например, obj(x) становится step(obj,x).
Многоскоростные фильтры - это фильтры, в которых различные части фильтра работают с разной скоростью. Такие фильтры обычно используются, когда скорости входных и выходных выборок различаются, например, во время прореживания, интерполяции или комбинации обоих. Однако многоскоростные фильтры часто используются в конструкциях, где частота входных выборок и частота выходных выборок одинаковы. В таких фильтрах имеет место внутреннее прореживание и интерполяция, происходящие в ряде фильтров. Такие фильтры могут достигать как значительно уменьшенных длин фильтров, так и вычислительных скоростей по сравнению со стандартными конструкциями односкоростных фильтров.
Наиболее основными многоскоростными фильтрами являются интерполяторы, прореживатели и преобразователи скорости. Эти фильтры являются компонентами более современных технологий фильтров, таких как банки фильтров и квадратурный зеркальный фильтр (QMF). Эти фильтры можно проектировать в MATLAB ® и Simulink ® с помощью designMultirateFIR функция.
Функция использует алгоритм построения фильтра Найквиста (FIR Nyquist) для вычисления коэффициентов фильтра. Чтобы реализовать эти фильтры в MATLAB, используйте эти коэффициенты в качестве входных данных для dsp.FIRDecimator, dsp.FIRInterpolator, и dsp.FIRRateConverter Системные объекты. В Simulink вычислите эти коэффициенты с помощью designMultirateFIR в автоматическом режиме по умолчанию для блоков децимации FIR, интерполяции FIR и преобразования скорости FIR.
Входные данные для designMultirateFIR функции - это коэффициент интерполяции и коэффициент прореживания. При необходимости можно задать длину полуфазы и затухание полосы останова. Коэффициент интерполяции прореживателя устанавливается равным 1. Аналогично, коэффициент прореживания интерполятора устанавливается равным 1.
Эти примеры показывают, как реализовать дециматор FIR в MATLAB и Simulink. Тот же рабочий процесс может также применяться к интерполятору КИХ и преобразователю скорости КИХ.
Чтобы реализовать дециматор FIR, необходимо сначала спроектировать его с помощью designMultirateFIR функция. Укажите интересующий коэффициент прореживания (обычно больше 1) и коэффициент интерполяции, равный 1. Можно использовать длину полуфазы по умолчанию 12 и затухание полосы останова по умолчанию 80 дБ. Кроме того, можно задать значения длины полуфазы и затухания полосы останова.
Создайте дециматор КИХ с коэффициентом прореживания, равным 3, и длиной полуполифазы, равной 14. Используйте затухание полосы останова по умолчанию 80 дБ.
b = designMultirateFIR(1,3,14);
Предоставьте вектор коэффициентов, b, в качестве входных данных для dsp.FIRDecimator Системный объект?.
FIRDecim = dsp.FIRDecimator(3,b); fvtool(FIRDecim);

По умолчанию fvtool показывает отклик величины. Навигация по fvtool для просмотра фазовой характеристики, импульсной характеристики, групповой задержки и другой информации анализа фильтра.
Фильтрация шумного синусоидального входного сигнала с помощью FIRDecim объект. Синусоидальная волна имеет частоты 1000 Гц и 3000 Гц 3000 Гц. Шум представляет собой белый гауссов шум со средним нулем и стандартным отклонением 1e-5. Прореженный выходной сигнал будет иметь в качестве входного сигнала одну треть частоты дискретизации. Инициализация двух dsp.SpectrumAnalyzer Системные объекты, один для ввода, а другой для вывода.
f1 = 1000; f2 = 3000; Fs = 8000; source = dsp.SineWave('Frequency',[f1,f2],'SampleRate',Fs,... 'SamplesPerFrame',1026); specanainput = dsp.SpectrumAnalyzer('SampleRate',Fs,... 'PlotAsTwoSidedSpectrum',false,... 'ShowLegend',true,'YLimits',[-120 30],... 'Title','Noisy Input signal',... 'ChannelNames', {'Noisy Input'}); specanaoutput = dsp.SpectrumAnalyzer('SampleRate',Fs/3,... 'PlotAsTwoSidedSpectrum',false,... 'ShowLegend',true,'YLimits',[-120 30],... 'Title','Filtered output',... 'ChannelNames', {'Filtered output'});
Потоковая передача на вход и фильтрация сигнала в контуре обработки.
for Iter = 1:100 input = sum(source(),2); noisyInput = input + (10^-5)*randn(1026,1); output = FIRDecim(noisyInput); specanainput(noisyInput) specanaoutput(output) end


Вход имеет два пика: один на 1000 Гц, а другой на 3000 Гц. Фильтр имеет отклик нижних частот с частотой полосы пропускания 0,3 * пи рад/образец. С частотой дискретизации 8000 Гц, то есть частотой полосы пропускания 1200 Гц. Тональный сигнал на частоте 1000 Гц является ненапряженным, поскольку падает в полосе пропускания фильтра. Тональный сигнал на частоте 3000 Гц отфильтровывается.
Аналогично, можно сконструировать интерполятор КИХ и преобразователь скорости КИХ, предоставив соответствующие входные данные для designMultirateFIR функция. Чтобы реализовать фильтры, передайте проектируемые коэффициенты в dsp.FIRInterpolator и dsp.FIRRateConverter объекты.
Можно проектировать и внедрять многоскоростные фильтры FIR в Simulink с помощью блоков децимации FIR, интерполяции FIR и преобразования скорости FIR. Если для параметра «Источник коэффициентов» заданы параметры диалогового окна, можно указать designMultirateFIR(1,2) в качестве параметра для задания коэффициентов фильтра. Конструирование дециматора с помощью designMultirateFIR необходимо указать интересующий коэффициент прореживания (обычно больше 1) и коэффициент интерполяции, равный 1. Можно использовать длину полуфазы по умолчанию 12 и затухание полосы останова по умолчанию 80 дБ. Кроме того, можно задать значения длины полуфазы и затухания полосы останова.

Блок выбирает коэффициенты, вычисленные с помощью designMultirateFIR функция.
Аналогично, можно сконструировать интерполятор КИХ и преобразователь скорости КИХ, предоставив соответствующие входные данные для designMultirateFIR функция.
Если для параметра «Источник коэффициентов» задано значение «Авто», блок вычисляет коэффициенты с помощью designMultirateFIR функция. Функция использует коэффициент прореживания, указанный в диалоговом окне блока.

Можно сконструировать FIR-интерполятор и FIR-преобразователь скорости, используя аналогичный подход в соответствующих блоках.
Преобразование частоты дискретизации представляет собой процесс преобразования частоты дискретизации сигнала из одной частоты дискретизации в другую частоту дискретизации. Многоступенчатые фильтры минимизируют количество вычислений, участвующих в преобразовании частоты дискретизации. Для выполнения эффективного многоступенчатого преобразования скорости, dsp.SampleRateConverter объект:
принимает входную частоту дискретизации и выходную частоту дискретизации в качестве входных данных.
разбивает задачу проектирования на оптимальные этапы.
проектирует все фильтры, необходимые для различных этапов.
реализует проект.
Конструкция обеспечивает отсутствие наложения псевдонимов на промежуточных этапах.
В этом примере измените частоту дискретизации шумного синусоидального сигнала с входной частоты 192 кГц на выходную частоту 44,1 кГц. Инициализируйте объект конвертера частоты дискретизации.
SRC = dsp.SampleRateConverter;
Отображение информации о фильтре.
info(SRC)
ans =
'Overall Interpolation Factor : 147
Overall Decimation Factor : 640
Number of Filters : 3
Multiplications per Input Sample: 27.667188
Number of Coefficients : 8631
Filters:
Filter 1:
dsp.FIRDecimator - Decimation Factor : 2
Filter 2:
dsp.FIRDecimator - Decimation Factor : 2
Filter 3:
dsp.FIRRateConverter - Interpolation Factor: 147
- Decimation Factor : 160
'
SRC является трехступенчатым фильтром: два дециматора КИХ, за которыми следует преобразователь скорости КИХ.
Инициализируйте источник синусоидальной волны. Синусоидальная волна имеет два тона: один на 2000 Гц, а другой на 5000 Гц.
source = dsp.SineWave ('Frequency',[2000 5000],'SampleRate',192000,... 'SamplesPerFrame',1280);
Инициализируйте анализатор спектра для просмотра входных и выходных сигналов.
Fsin = SRC.InputSampleRate; Fsout = SRC.OutputSampleRate; specanainput = dsp.SpectrumAnalyzer('SampleRate',Fsin,... 'PlotAsTwoSidedSpectrum',false,... 'ShowLegend',true,'YLimits',[-120 30],... 'Title','Input signal',... 'ChannelNames', {'Input'}); specanaoutput = dsp.SpectrumAnalyzer('SampleRate',Fsout,... 'PlotAsTwoSidedSpectrum',false,... 'ShowLegend',true,'YLimits',[-120 30],... 'Title','Rate Converted output',... 'ChannelNames', {'Rate Converted output'});
Потоковая передача входного сигнала и преобразование частоты дискретизации сигнала.
for Iter = 1 : 5000 input = sum(source(),2); noisyinput = input + (10^-5)*randn(1280,1); output = SRC(noisyinput); specanainput(noisyinput); specanaoutput(output); end


Показанный спектр является односторонним в диапазоне [0 Fs/2]. Для анализатора спектра, показывающего входной сигнал, Fs/2 равен 192000/2. Для анализатора спектра, показывающего выходной сигнал, Fs/2 равно 44100/2. Следовательно, частота дискретизации сигнала изменилась со 192 кГц до 44,1 кГц.
[1] Харрис, Фредрик Дж. Многоскоростная обработка сигналов для систем связи. Prentice Hall PTR, 2004.