Этот пример показывает, как ввести автокорреляцию в процесс белого шума путем фильтрации. Когда мы вводим автокорреляцию в случайный сигнал, мы манипулируем его частотным содержимым. Фильтр скользящего среднего ослабляет высокочастотные компоненты сигнала, эффективно сглаживая его.
Создайте импульсную характеристику для 3-точечного фильтра скользящего среднего. Пропустите N (0,1) последовательность белого шума с помощью фильтра. Установите генератор случайных чисел в настройки по умолчанию для воспроизводимых результатов.
h = 1/3*ones(3,1);
rng default
x = randn(1000,1);
y = filter(h,1,x);
Получите смещенную автокорреляцию образца до 20 лагов. Постройте график автокорреляции образца вместе с теоретической автокорреляцией.
[xc,lags] = xcorr(y,20,'biased'); Xc = zeros(size(xc)); Xc(19:23) = [1 2 3 2 1]/9*var(x); stem(lags,xc,'filled') hold on stem(lags,Xc,'.','linewidth',2) lg = legend('Sample autocorrelation','Theoretical autocorrelation'); lg.Location = 'NorthEast'; lg.Box = 'off';
Автокорреляция образца захватывает общую форму теоретической автокорреляции, хотя две последовательности подробно не согласуются.
В этом случае ясно, что фильтр ввел значительную автокорреляцию только по лагам [-2,2]. Абсолютное значение последовательности быстро затухает до нуля за пределами этой области значений.
Чтобы увидеть, что содержимое частоты было затронуто, постройте графики Welch для спектральных плотностей степени исходных и фильтрованных сигналов.
[pxx,wx] = pwelch(x); [pyy,wy] = pwelch(y); figure plot(wx/pi,20*log10(pxx),wy/pi,20*log10(pyy)) lg = legend('Original sequence','Filtered sequence'); lg.Location = 'SouthWest'; xlabel('Normalized Frequency (\times\pi rad/sample)') ylabel('Power/frequency (dB/rad/sample)') title('Welch Power Spectral Density Estimate') grid
Белый шум был «окрашен» фильтром скользящего среднего.