Анализ циклических данных с БПФом

Можно использовать преобразование Фурье, чтобы анализировать изменения данных, такие как событие по своей природе за время периода.

В течение почти 300 лет астрономы свели в таблицу номер и размер солнечных пятен с помощью Цюрихского номера родственника солнечного пятна. Постройте Цюрихское число приблизительно годы 1700 - 2000.

load sunspot.dat
year = sunspot(:,1);
relNums = sunspot(:,2);
plot(year,relNums)
xlabel('Year')
ylabel('Zurich Number')
title('Sunspot Data')

Figure contains an axes object. The axes object with title Sunspot Data contains an object of type line.

Чтобы более тщательно изучить в циклическом характере действия солнечного пятна, постройте первые 50 лет данных.

plot(year(1:50),relNums(1:50),'b.-');
xlabel('Year')
ylabel('Zurich Number')
title('Sunspot Data')

Figure contains an axes object. The axes object with title Sunspot Data contains an object of type line.

Преобразование Фурье является основным инструментом в обработке сигналов, которая идентифицирует частотные составляющие в данных. Используя fft функция, возьмите преобразование Фурье Цюрихских данных. Удалите первый элемент выхода, который хранит сумму данных. Постройте остаток от выхода, который содержит зеркальное отображение комплексных коэффициентов Фурье о вещественной оси.

y = fft(relNums);
y(1) = [];
plot(y,'ro')
xlabel('real(y)')
ylabel('imag(y)')
title('Fourier Coefficients')

Figure contains an axes object. The axes object with title Fourier Coefficients contains an object of type line.

Коэффициенты Фурье самостоятельно затрудняют, чтобы интерпретировать. Более значимой мерой коэффициентов является их величина, в квадрате, который является мерой степени. Поскольку половина коэффициентов повторяется в величине, только необходимо вычислить степень на одной половине коэффициентов. Постройте спектр мощности в зависимости от частоты, измеренной в циклах в год.

n = length(y);
power = abs(y(1:floor(n/2))).^2; % power of first half of transform data
maxfreq = 1/2;                   % maximum frequency
freq = (1:n/2)/(n/2)*maxfreq;    % equally spaced frequency grid
plot(freq,power)
xlabel('Cycles/Year')
ylabel('Power')

Figure contains an axes object. The axes object contains an object of type line.

Максимальное действие солнечного пятна происходит менее часто, чем однажды в год. Для представления циклического действия, которое легче интерпретировать, постройте степень в зависимости от периода, измеренного в годах на цикл. График показывает, что действие солнечного пятна достигает максимума об один раз в 11 лет.

period = 1./freq;
plot(period,power);
xlim([0 50]); %zoom in on max power
xlabel('Years/Cycle')
ylabel('Power')

Figure contains an axes object. The axes object contains an object of type line.

Смотрите также

| |

Похожие темы