Этот пример показывает, как использовать Системные объекты, чтобы сделать обработку сигналов потоковой передачи в MATLAB. Сигналы читаются в и обработанный кадр кадром (или блок блоком) в каждом цикле обработки. Можно управлять размером каждого кадра.
В этом примере кадры 1 024 выборок отфильтрованы с помощью пика метки, просачиваются каждый цикл обработки. Вход является синусоидальным сигналом, который передается кадр потоком кадром от объекта dsp.SineWave
. Фильтр является созданным использованием пикового меткой фильтра объекта dsp.NotchPeakFilter
. Чтобы гарантировать сглаженную обработку как, каждый кадр отфильтрован, Системные объекты поддерживают состояние фильтра от одного кадра до следующего автоматически.
Инициализируйте источник синусоиды, чтобы сгенерировать синусоиду, пиковый меткой фильтр, чтобы отфильтровать синусоиду и спектр анализатор, чтобы показать отфильтрованный сигнал. Входная синусоида имеет две частоты: один на уровне 100 Гц, и другой на уровне 1 000 Гц. Создайте два объекта dsp.SineWave
, один, чтобы сгенерировать синусоиду на 100 Гц и другой, чтобы сгенерировать синусоиду на 1 000 Гц.
Fs = 2500; Sineobject1 = dsp.SineWave('SamplesPerFrame',1024,... 'SampleRate',Fs,'Frequency',100); Sineobject2 = dsp.SineWave('SamplesPerFrame',1024,... 'SampleRate',Fs,'Frequency',1000); SA = dsp.SpectrumAnalyzer('SampleRate',Fs,'NumInputPorts',2,... 'PlotAsTwoSidedSpectrum',false,... 'ChannelNames',{'SinewaveInput','NotchOutput'},'ShowLegend',true);
Создайте БИХ-фильтр пика метки второго порядка, чтобы отфильтровать синусоидальный сигнал. Фильтр имеет метку на уровне 750 Гц и Q-фактор 35. Более высокий Q-фактор приводит к более узкой пропускной способности на 3 дБ метки. Если вы настраиваете параметры фильтра во время потоковой передачи, вы сразу видите эффект в спектре анализатор вывод.
Wo = 750; Q = 35; BW = Wo/Q; NotchFilter = dsp.NotchPeakFilter('Bandwidth',BW,... 'CenterFrequency',Wo, 'SampleRate',Fs); fvtool(NotchFilter);
Создайте цикл for, чтобы запуститься для 3 000 итераций. В каждой итерации, потоке в 1 024 выборках (один кадр) sinewave и применяют фильтр метки на каждый кадр входного сигнала. Чтобы сгенерировать входной сигнал, добавьте эти две синусоиды. Результирующий сигнал является синусоидой с двумя частотами: один на уровне 100 Гц и другой на уровне 1 000 Гц. Метка фильтра настраивается на частоту 100, 500, 750, или 1 000 Гц, на основе значения VecIndex
. Пропускная способность фильтра изменяется соответственно. Когда изменение параметров фильтра во время потоковой передачи, вывода в спектре анализатор обновляется соответственно.
FreqVec = [100 500 750 1000]; VecIndex = 1; VecElem = FreqVec(VecIndex); for Iter = 1:3000 Sinewave1 = Sineobject1(); Sinewave2 = Sineobject2(); Input = Sinewave1 + Sinewave2; if (mod(Iter,350)==0) if VecIndex < 4 VecIndex = VecIndex+1; else VecIndex = 1; end VecElem = FreqVec(VecIndex); end NotchFilter.CenterFrequency = VecElem; NotchFilter.Bandwidth = NotchFilter.CenterFrequency/Q; Output = NotchFilter(Input); SA(Input,Output); end fvtool(NotchFilter)
В конце цикла обработки CenterFrequency
на уровне 100 Гц. В фильтре вывод частота на 100 Гц полностью обнулена фильтром метки, в то время как частота на уровне 1 000 Гц незатронута.
Разработайте многоскоростные фильтры | Отфильтруйте кадры зашумленного синусоидального сигнала в MATLAB | Отфильтруйте кадры шумного синусоидального сигнала в Simulink | БИХ-проект фильтра Lowpass в Simulink