exponenta event banner

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

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

За почти 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. The axes 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. The axes 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. The axes 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. The axes 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. The axes contains an object of type line.

См. также

| |

Связанные темы