Этот пример показывает, как ввести автокорреляцию в белый шумовой процесс путем фильтрации. Когда мы вводим автокорреляцию в случайный сигнал, мы управляем его содержимым частоты. Фильтр скользящего среднего значения ослабляет высокочастотные компоненты сигнала, эффективно сглаживая его.
Создайте импульсный ответ для фильтра скользящего среднего значения с 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]. Абсолютное значение последовательности затухает быстро, чтобы обнулить за пределами той области значений.
Видеть, что содержимое частоты было затронуто, валлийские оценки графика степени спектральная плотность исходных и отфильтрованных сигналов.
[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
Белый шум был "окрашен" фильтром скользящего среднего значения.