В этом примере показано, как использовать системные объекты для обработки потокового сигнала в MATLAB. Сигналы считываются и обрабатываются покадрово (или поблочно) в каждом цикле обработки. Можно управлять размером каждого кадра.
В этом примере кадры из 1024 выборок фильтруются с использованием фильтра пробного пика в каждом цикле обработки. Вход представляет собой синусоидальный сигнал, который передается по кадрам из dsp.SineWave объект. Фильтр является пиковым фильтром, созданным с помощью dsp.NotchPeakFilter объект. Чтобы обеспечить плавную обработку при фильтрации каждого кадра, системные объекты автоматически поддерживают состояние фильтра от одного кадра к следующему.
Инициализируйте источник синусоидальной волны для генерации синусоидальной волны, фильтр пробок-пиков для фильтрации синусоидальной волны и анализатор спектра для отображения отфильтрованного сигнала. Входная синусоидальная волна имеет две частоты: одну на 100 Гц, а другую на 1000 Гц. Создать два dsp.SineWave объекты, один для генерации синусоидальной волны 100 Гц, а другой для генерации синусоидальной волны 1000 Гц.
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 Гц и добротность 35. Более высокий Q-фактор приводит к более узкой 3-dB полосе пропускания выемки. Если настроить параметры фильтра во время потоковой передачи, эффект можно сразу увидеть на выходе анализатора спектра.
Wo = 750; Q = 35; BW = Wo/Q; NotchFilter = dsp.NotchPeakFilter('Bandwidth',BW,... 'CenterFrequency',Wo, 'SampleRate',Fs); fvtool(NotchFilter);

Создайте цикл for для выполнения 3000 итераций. В каждой итерации перетекают в 1024 выборки (один кадр) синусоидальной волны и применяют фильтр-пробку на каждом кадре входного сигнала. Для формирования входного сигнала добавьте две синусоидальные волны. Результирующий сигнал представляет собой синусоидальную волну с двумя частотами: одна на 100 Гц, а другая на 1000 Гц. Выемка фильтра настраивается на частоту 100, 500, 750 или 1000 Гц на основе значения 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 Гц полностью обнуляется режекторным фильтром, в то время как частота 1000 Гц не изменяется.
Проектирование многоскоростных фильтров | Фильтрация кадров шумного синусоидального сигнала в MATLAB | Фильтрация кадров шумного синусоидального сигнала в симуляторе | Проектирование низкочастотного фильтра IIR в Simulink