Введение в потоковую обработку сигналов в MATLAB

В этом примере показано, как использовать системные объекты для обработки потокового сигнала в 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 Гц и Q-коэффициент 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 Гц не влияет.

См. также

| | |