В этом примере показано, как выполнять статистические измерения во входном потоке данных с использованием функциональных возможностей DSP System Toolbox™, доступных в командной строке MATLAB ®. Вы вычислите минимальную, максимальную, среднюю, дисперсию и пиковое отношение к среднеквадратичной плотности спектра мощности сигнала и постройте их график.
В этом примере статистика сигналов вычисляется с использованием системных объектов DSP System Toolbox System. Эти объекты обрабатывают свои состояния автоматически, уменьшая количество ручного кода, необходимого для обновления состояний, уменьшая возможную вероятность ошибок кодирования.
Эти системные объекты предварительно вычисляют множество значений, используемых при обработке. Это очень полезно при обработке сигналов одинаковых свойств в цикле. Например, при вычислении БПФ в приложении оценки спектра значения синуса и косинуса могут быть вычислены и сохранены, как только вы знаете свойства входа, и эти значения могут быть повторно использованы для последующих вызовов. Кроме того, объекты проверяют только то, имеют ли входные свойства тот же тип, что и предыдущие входные данные в каждом вызове.
Здесь инициализируются некоторые переменные, используемые в коде, и создаются экземпляры системных объектов, используемых при обработке. Эти объекты также предварительно вычисляют любые необходимые переменные или таблицы, что приводит к эффективной обработке вызовов позже внутри цикла.
frameSize = 1024; % Size of one chunk of signal to be processed in one loop Fs = 48e3; % Sample rate numFrames = 100; % number of frames to process
Входной сигнал в этом примере является белым гауссовым шумом, проходящим через фильтр КИХ нижних частот. Создайте объект FIR Filter System, используемый для фильтрации шумового сигнала:
fir = dsp.FIRFilter('Numerator',fir1(32,.3));
Создайте объект Spectrum Estimator System для оценки плотности спектра мощности на входе.
spect = dsp.SpectrumEstimator('SampleRate',Fs,... 'SpectrumType','Power density',... 'FrequencyRange','onesided',... 'Window','Kaiser');
Создайте системные объекты для вычисления среднего значения, отклонения, пикового значения к среднеквадратичному значению, минимального и максимального значения и установите их в рабочий режим. Эти объекты являются подмножеством объектов системы статистики, доступных в продукте. В рабочем режиме вычисляется статистика ввода для всей его длины в прошлом, а не статистика только для текущего ввода.
runMean = dsp.MovingAverage('SpecifyWindowLength', false); runVar = dsp.MovingVariance('SpecifyWindowLength', false); runPeaktoRMS = dsp.PeakToRMS('RunningPeakToRMS',true); runMin = dsp.MovingMinimum('SpecifyWindowLength', false); runMax = dsp.MovingMaximum('SpecifyWindowLength', false);
Инициализация области Системные объекты, используемые для визуализации статистики и спектра
meanScope = timescope('SampleRate',Fs,... 'TimeSpanSource','property',... 'TimeSpan',numFrames*frameSize/Fs,... 'Title','Running Mean',... 'YLabel','Mean',... 'YLimits',[-0.1 .1],... 'Position',[43 308 420 330]); p2rmsScope = timescope('SampleRate',Fs,... 'TimeSpanSource','property',... 'TimeSpan',numFrames*frameSize/Fs,... 'Title','Running Peak-To-RMS',... 'YLabel','Peak-To-RMS',... 'YLimits',[0 5],... 'Position',[480 308 420 330]); minmaxScope = timescope('SampleRate',Fs,... 'TimeSpanSource','property', ... 'TimeSpan',numFrames*frameSize/Fs,... 'ShowGrid',true,... 'Title',... 'Signal with Running Minimum and Maximum',... 'YLabel','Signal Amplitude',... 'YLimits',[-3 3],... 'Position',[43 730 422 330]); spectrumScope = dsp.ArrayPlot('SampleIncrement',... .5 * Fs/(frameSize/2 + 1 ),... 'PlotType','Line',... 'Title','Power Spectrum Density',... 'XLabel','Frequency (Hz)',... 'YLabel','Power/Frequency (dB/Hz)',... 'YLimits',[-120 -30],... 'Position',[475 730 420 330]);
Здесь вы называете свой цикл обработки, который будет фильтровать белый гауссов шум и вычислять его среднее значение, дисперсию, пик к среднеквадратичному значению, мин, макс и спектр с помощью системных объектов.
Обратите внимание, что системные объекты вызываются внутри цикла. Поскольку свойства входных данных не изменяются, это позволяет повторно использовать объекты. Это уменьшает использование памяти.
for i=1:numFrames % Pass white Gaussian noise through FIR Filter sig = fir(randn(frameSize,1)); % Compute power spectrum density ps = spect(sig); % The runMean System object keeps track of the information about past % samples and gives you the mean value reached until now. The same is % true for runMin and runMax System objects. meanval = runMean(sig); variance = runVar( sig); peak2rms = runPeaktoRMS(sig); minimum = runMin( sig); maximum = runMax(sig); % Plot the data you have processed minmaxScope([sig,minimum,maximum]); spectrumScope(10*log10(ps)); meanScope(meanval); p2rmsScope(peak2rms); end release(minmaxScope); release(spectrumScope); release(meanScope); release(p2rmsScope);




Визуально видно, что код включает в себя просто вызов последовательных системных объектов с соответствующими входными аргументами и не включает ведение дополнительных переменных, таких как индексы или счетчики, для вычисления статистики. Это способствует более быстрому и безошибочному кодированию. Предварительное вычисление постоянных переменных внутри объектов обычно приводит к более быстрому времени обработки.