Примечание
Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x)
становится step(obj,x)
.
Многоскоростные фильтры, просачивается, какие различные части фильтра действуют на различных уровнях. Такие фильтры обычно используются, когда частоты дискретизации ввода и вывода отличаются, такой как во время децимации, интерполяции или комбинации обоих. Однако многоскоростные фильтры часто используются в проектах, где входная частота дискретизации и выходная частота дискретизации являются тем же самым. В таких фильтрах существует внутренняя децимация и интерполяция, происходящая в серии фильтров. Такие фильтры могут достигнуть и значительно уменьшенных длин фильтра и вычислительных уровней по сравнению со стандартными проектами односкоростного фильтра.
Самые основные многоскоростные фильтры являются интерполяторами, decimators, и конвертерами уровня. Эти фильтры являются составными частями здания более усовершенствованных технологий фильтра, такими как наборы фильтров и Квадратурный фильтр зеркала (QMF). Можно спроектировать, они просачиваются MATLAB® и Simulink® с помощью designMultirateFIR
функция.
Функция использует КИХ алгоритм создания фильтра Найквиста, чтобы вычислить коэффициенты фильтра. Чтобы реализовать они просачиваются MATLAB, используйте эти коэффициенты в качестве входных параметров к dsp.FIRDecimator
, dsp.FIRInterpolator
, и dsp.FIRRateConverter
Системные объекты. В Simulink вычислите эти коэффициенты использование designMultirateFIR
в режиме Auto по умолчанию FIR Decimation, FIR Interpolation и блоков FIR Rate Conversion.
Входные параметры к 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.FIRInterpolator
и dsp.FIRRateConverter
объекты.
Вы можете разработка и реализация КИХ-многоскоростные фильтры в 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.