MATLAB应用:使用FFT分析周期性数据‌

关注微信公众号:数学建模BOOM,回复“047”,获取本文MATLAB代码文件

可以使用傅里叶变换来分析数据中的变化,例如一个时间段内的自然事件。

天文学家使用苏黎世太阳黑子相对数将几乎 300 年的太阳黑子的数量和大小制成表格。对大约 1700 至 2000 年间的苏黎世数绘图。

load sunspot.dat    % 可换成你需要的数据
year = sunspot(:,1);
relNums = sunspot(:,2);

figure
plot(year,relNums)
xlabel('Year')
ylabel('Zurich Number')
title('Sunspot Data')
hold on

为了更详细地看太阳黑子活动的周期特性,将对前 50 年的数据绘图。

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

傅里叶变换是一种基础的信号处理工具,可确定数据中的频率分量。使用  函数获取苏黎世数据的傅里叶变换。删除存储数据总和的输出的第一个元素。绘制该输出的其余部分,其中包含复傅里叶系数关于实轴的镜像图像。

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

单独的傅里叶系数难以解释。计算系数更有意义的方法是计算其平方幅值,即计算幂。由于一半的系数在幅值中是重复的,因此您只需要对一半的系数计算幂。以频率函数的形式绘制功率谱图,以每年的周期数为测量单位。

figure
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')
hold on

太阳黑子活动发生的最大频率低于每年一次。为了查看更易解释的周期活动,以周期函数形式绘制幂图,以每周期的年数为测量单位。该绘图揭示了太阳黑子活动约每 11 年出现一次高峰。

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

本文转自mathwork帮助中心

-----------------------------------

“从零开始学数学建模”系列课程平台全面更新,打开网页就能看、不限制设备,详情关注微信公众号:数学建模BOOM,回复“课程”

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空