Примечание
Если вы используете R2016a или более ранний релиз, замените каждый вызов объекта эквивалентным синтаксисом шага. Для примера, obj(x)
становится step(obj,x)
.
Многоскоростные фильтры являются фильтрами, в которых различные части фильтра работают с различными скоростями. Такие фильтры обычно используются, когда входная и выходная частоты дискретизации различаются, такие как во время десятикратного уменьшения, интерполяции или комбинации обоих. Однако многоскоростные фильтры часто используются в проектах, где входная частота выборки и выходная частота дискретизации одинаковы. В таких фильтрах происходит внутреннее десятикратное уменьшение и интерполяция в серии фильтров. Такие фильтры могут достигать как значительно меньших длин фильтров, так и вычислительных скоростей по сравнению со стандартными проектами односкоростных фильтров.
Наиболее базовыми многоскоростными фильтрами являются интерполяторы, дециматоры и преобразователи скорости. Эти фильтры создают компоненты более совершенных технологий фильтрации, таких как банки фильтров и квадратурный зеркальный фильтр (QMF). Вы можете проектировать эти фильтры в MATLAB® и Simulink® использование designMultirateFIR
функция.
Функция использует алгоритм создания фильтра Nyquist конечной импульсной характеристики, чтобы вычислить коэффициенты фильтра. Чтобы реализовать эти фильтры в MATLAB, используйте эти коэффициенты в качестве входов для dsp.FIRDecimator
, dsp.FIRInterpolator
, и dsp.FIRRateConverter
Системные объекты. В Simulink вычислите эти коэффициенты, используя designMultirateFIR
в режиме Auto по умолчанию блоков FIR Decimation, FIR Interpolation и FIR Rate Conversion.
Входы designMultirateFIR
функция является коэффициентом интерполяции и коэффициентом десятикратного уменьшения. Опционально можно обеспечить полуполифазную длину и затухание в полосе задерживания. Коэффициент интерполяции дециматора устанавливается равным 1. Точно так же коэффициент десятикратного уменьшения интерполятора устанавливается равным 1.
Эти примеры показа, как реализовать дециматор конечной импульсной характеристики в MATLAB и Simulink. Тот же рабочий процесс может применяться и к конечной импульсной характеристике интерполятору и конечной импульсной характеристике преобразователю скорости.
Чтобы реализовать FIR Decimator, необходимо сначала спроектировать его с помощью 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 Гц. Фильтр имеет lowpass с частотой полосы пропускания 0,3 * pi рад/выборка. С частотой дискретизации 8000 Гц, то есть частотой полосы пропускания 1200 Гц. Тон на частоте 1000 Гц не ослаблен, поскольку падает в полосе пропускания фильтра. Тон с частотой 3000 Гц отфильтровывается.
Точно так же можно спроектировать конечную импульсную характеристику интерполятор и конечная импульсная характеристика Rate Converter, предоставив соответствующие входы designMultirateFIR
функция. Чтобы реализовать фильтры, передайте спроектированные коэффициенты в dsp.FIRInterpolator
и dsp.FIRRateConverter
объекты.
Вы можете спроектировать и реализовать КИХ-мультирейтовые фильтры в Simulink с помощью блоков FIR Decimation, КИХ-интерполяции и КИХ-преобразования скорости. Когда вы устанавливаете источник Коэффициента в параметры Dialog, вы можете предоставить designMultirateFIR(1,2)
как параметр для задания коэффициентов фильтра. Чтобы спроектировать дециматор, используя designMultirateFIR
функция, вы должны задать интересующий коэффициент десятикратного уменьшения (обычно больше 1) и коэффициент интерполяции, равный 1. Можно использовать длину полуполифазы по умолчанию 12 и затухание в полосе задерживания по умолчанию 80 дБ. Также можно задать полуполифазную длину и затухание в полосе задерживания значения.
Блок выбирает коэффициенты, вычисленные с помощью designMultirateFIR
функция.
Точно так же можно спроектировать конечную импульсную характеристику интерполятор и конечная импульсная характеристика преобразователь скорости путем предоставления соответствующих входов designMultirateFIR
функция.
Когда вы устанавливаете источник Коэффициента в Auto, блок вычисляет коэффициенты, используя designMultirateFIR
функция. Функция использует коэффициент десятикратного уменьшения, заданный в диалоговом окне блока.
Вы можете спроектировать конечную импульсную характеристику Interpolator и конечной импульсной характеристики Rate Converter с помощью аналогичного подхода в соответствующих блоках.
Преобразование скорости дискретизации является процессом преобразования скорости дискретизации сигнала с одной частоты дискретизации в другую частоту дискретизации. Многоступенчатые фильтры минимизируют количество расчетов, участвующих в преобразовании частоты дискретизации. Чтобы выполнить эффективное многоступенчатое преобразование скорости, 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] Harris, Fredric J. Multirate Signal Processing for Communication Systems. Prentice Hall ПТР, 2004.