Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x)
становится step(obj,x)
.
Многоскоростные фильтры, просачивается, какие различные части фильтра действуют на различных уровнях. Такие фильтры обычно используются, когда частоты дискретизации ввода и вывода отличаются, такой как во время десятикратного уменьшения, интерполяции или комбинации обоих. Однако многоскоростные фильтры часто используются в проектах, где входная частота дискретизации и выходная частота дискретизации являются тем же самым. В таких фильтрах существует внутреннее десятикратное уменьшение и интерполяция, происходящая в серии фильтров. Такие фильтры могут достигнуть и значительно уменьшенных длин фильтра и вычислительных уровней по сравнению со стандартными проектами односкоростного фильтра.
Самые основные многоскоростные фильтры являются интерполяторами, decimators, и конвертерами уровня. Эти фильтры являются составными частями здания более усовершенствованных технологий фильтра, такими как наборы фильтров и Квадратурный фильтр зеркала (QMF). Можно разработать, они просачиваются MATLAB® и Simulink® с помощью функции designMultirateFIR
.
Функция использует КИХ алгоритм проекта фильтра Найквиста, чтобы вычислить коэффициенты фильтра. Чтобы реализовать они просачиваются MATLAB, используйте эти коэффициенты в качестве входных параметров к dsp.FIRDecimator
, dsp.FIRInterpolator
и Системным объектам dsp.FIRRateConverter
. В Simulink вычислите эти коэффициенты с помощью designMultirateFIR
в режиме Auto по умолчанию КИХ-Десятикратного уменьшения, КИХ-Интерполяции и КИХ-блоков Преобразования Уровня.
Входные параметры к функции designMultirateFIR
являются коэффициентом интерполяции и фактором десятикратного уменьшения. Опционально, можно обеспечить полумногофазную длину и затухание полосы задерживания. Коэффициент интерполяции decimator установлен в 1. Точно так же фактор десятикратного уменьшения интерполятора установлен в 1.
Эти примеры показывают, как реализовать КИХ decimator в MATLAB и Simulink. Тот же рабочий процесс может примениться к КИХ-интерполятору и КИХ-конвертеру уровня также.
Чтобы реализовать КИХ Decimator, необходимо сначала разработать его при помощи функции designMultirateFIR
. Задайте фактор десятикратного уменьшения интереса (обычно больше, чем 1) и коэффициент интерполяции, равный 1. Можно использовать полумногофазную длину по умолчанию 12 и затухание полосы задерживания по умолчанию 80 дБ. Также можно также задать полумногофазную длину и значения затухания полосы задерживания.
Разработайте КИХ decimator с набором фактора десятикратного уменьшения к 3 и полумногофазным набором длины к 14. Используйте затухание полосы задерживания по умолчанию 80 дБ.
b = designMultirateFIR(1,3,14);
Обеспечьте содействующий вектор, b
, как вход к Системному объекту dsp.FIRDecimator
?.
FIRDecim = dsp.FIRDecimator(3,b); fvtool(FIRDecim);
По умолчанию fvtool
показывает ответ значения. Перейдите через панель инструментов fvtool
, чтобы видеть фазовый отклик, импульсный ответ, групповую задержку и другую информацию об анализе фильтра.
Отфильтруйте шумный вход синусоиды с помощью объекта FIRDecim
. Синусоида имеет частоты на уровне 1 000 Гц и 3 000 Гц 3 000 Гц. Шум является белым Гауссовым шумом со средним нулевым и стандартным отклонением 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
Вход имеет два peaks: один на уровне 1 000 Гц и другой на уровне 3 000 Гц. Фильтр имеет lowpass ответ с частотой полосы пропускания 0.3*pi рад/выборка. С частотой дискретизации 8 000 Гц, которая является частотой полосы пропускания 1 200 Гц. Тон на уровне 1 000 Гц не ослабляется, потому что он падает в полосе пропускания фильтра. Тон на уровне 3 000 Гц отфильтрован.
Точно так же можно разработать КИХ-интерполятор и КИХ-Конвертер уровня путем обеспечения соответствующих входных параметров функции designMultirateFIR
. Чтобы реализовать фильтры, передайте разработанные коэффициенты объектам dsp.FIRRateConverter
и dsp.FIRInterpolator
.
Вы можете разработка и реализация КИХ-многоскоростные фильтры в Simulink с помощью КИХ-Десятикратного уменьшения, КИХ-Интерполяции и КИХ-блоков Преобразования Уровня. Когда вы устанавливаете Содействующий источник на Диалоговые параметры, можно обеспечить designMultirateFIR(1,2)
в качестве параметра, чтобы задать коэффициенты фильтра. Чтобы разработать Decimator с помощью функции designMultirateFIR
, необходимо задать фактор десятикратного уменьшения интереса (обычно больше, чем 1) и коэффициент интерполяции, равный 1. Можно использовать полумногофазную длину по умолчанию 12 и затухание полосы задерживания по умолчанию 80 дБ. Также можно также задать полумногофазную длину и значения затухания полосы задерживания.
Блок выбирает, коэффициенты вычислили использование функции designMultirateFIR
.
Точно так же можно разработать КИХ-интерполятор и КИХ-конвертер уровня путем обеспечения соответствующих входных параметров функции designMultirateFIR
.
Когда вы устанавливаете Содействующий источник на Автоматический, блок вычисляет коэффициенты с помощью функции designMultirateFIR
. Функция использует фактор десятикратного уменьшения, заданный в диалоговом окне блока.
Можно разработать КИХ-Интерполятор и КИХ-Конвертер Уровня с помощью аналогичного подхода в соответствующих блоках.
Преобразование частоты дискретизации является процессом преобразования частоты дискретизации сигнала от одного уровня выборки до другого уровня выборки. Многоступенчатые фильтры минимизируют объем вычисления, вовлеченного в преобразование частоты дискретизации. Выполнять эффективное многоступенчатое преобразование уровня, объект 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
является трехэтапным фильтром: два КИХ decimators сопровождаемый КИХ-конвертером уровня.
Инициализируйте источник синусоиды. Синусоида имеет два тона: один на уровне 2 000 Гц и другой на уровне 5 000 Гц.
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 Фс/2]. Для спектра анализатор, показывающий вход, Фс/2 является 192000/2. Для спектра анализатор, показывающий вывод, Фс/2 является 44100/2. Следовательно, частота дискретизации сигнала, измененного от 192 кГц до 44,1 кГц.
[1] Харрис, Фредерик Дж. Многоскоростная обработка сигналов для систем связи. PTR Prentice Hall, 2004.