使用 FFT 分析周期性数据

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

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

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

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

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

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

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

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

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')

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

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

关注公众号: MATLAB基于模型的设计 (ID:xaxymaker) ,每天推送MATLAB学习最常见的问题,每天进步一点点,业精于勤荒于嬉

 打开微信扫一扫哦!

转载于:https://www.cnblogs.com/52geek/p/10421208.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
试验数据处理:根据测定数据,寻找各参数间的相互关系,用方程或图形予以表达。 试验数据的表达方式:数字表达、图形表达、经验公式表达 试验数据的曲线拟合:将实验数据用最能反映实验过程规律的函数式来表示。 通常采用最小二乘法原理进行曲线拟合。 最小二乘法原理: 数据的残差平方和最小的曲线是最能反映实验数据的曲线。 一元线性回归分析及方法: 回归分析:采用最小二乘法原理确定实验数据之间的关系(求经验公式)的数理统计方 法。 一元回归:影响过程只有一个因素时(处理两个变量之间关系); 1一元线性回归方程的一般形式: 其中:a、b为线性回归系数。为测定数据的平均值。 偏差: 2 确定回归方程的回归参数: 按最小二乘原则确定回归方程的回归参数。令:Qy为偏差的平方和。 故 根据多元函数极值定理,有: 整理得: 3 回归方程的显著性检验: 对任何两个变量x、y(初步判定有线性相关关系)都能按上式找出其回归方程,但只有 在两变量线性相关显著时,该回归方程才有实际意义。资料个人收集整理,勿做商业用 途 方差检验法:令: Qz为总偏差平方和-- 反映全部检验数据y对i的变动总离差平方和的自由度f=n-1。资料个人收集整理 ,勿做商业用途 据公式有: 回归平方和u:反映了回归直线上的点对平均值的变动。令检验数: >Fα 其中:偏差平方和自由度fq=f-fu 总偏差平方和:f=n-1=fu+ fq回归平方和自由度fu=自变量个数;。 显著性判断:回归高度显著( α= 0.01 ); 回归显著( α= 0.05 ); 回归不显著( α= 0.1 )。 根据显著性自由度α(或称置信度 )及回归平方和自由度fu、偏差平方和自由度fq查Fα分布表进行比较。 可以化为线性回归的非线性关系:有的非线性关系可以转化为线性回归处理。 常见转换 双曲线:1/y=a+b/x,令:X=1/x Y=A+BX; 对数曲线: y=a+b㏑x,令:X=㏑x Y=A+BX; 指数曲线: y=aebx,两边取对数并令:Y=㏑Y,A=㏑a Y=A+BX 幂函数曲线:y=axb,两边取对数并令:Y=㏑y,X=㏑x,A=㏑a Y=A+BX 随机性数据处理: 1、时域与幅值域分析内容:时域内容有自相关函数和互相关函数;幅值域有均值、方差 、均方差、概率密度函数等。资料个人收集整理,勿做商业用途 2、相关分析应用有哪些? 自相关函数:自相关——随机变量数据X(t)与X(t+τ)之间的相关性。 互相关函数:互相关——表示随机变量数据X(t)与Y(t)之间的相关性。 3、为什么要对实验数据进行频谱分析?常用方法有哪些? 原因:了解组成数据的频率成分; 了解各种频率对数据的影响作用的大小; 以便判断影响过程的因素(如振动、噪声的来源等)。 方法:1.周期性数据的频谱分析——谐波分析法 2、非周期性数据的频谱分析—傅立叶积分变换法 3.随机性数据的频谱分析——功率谱分析法 加窗: 截断:用有限长的采样信号代替无限的随机性数据的时间历程进行处理,称为截断。 泄漏:在数据处理中,由于信号截断导致能量分散,必然会产生一些误差,这一现象称 为泄漏。 栅栏效应:频谱经离散后,只能获得f=k f= k( fs/N) (k = o,1, 2,…,N一1)资料个人收集整理,勿做商业用途 的各频率成分,其余的频率成分被舍去。好象栅栏漏掉了一些东西一样,这种现象称为 栅栏效应。 快速傅里叶变换(FFT): 原因:进行DFT计算时,每计算k为定值的一个点,Xk就要作N次复数乘法,全部计算要作 Nk次复数乘法,N(N一1)次复数加法,计算工作量随N的增大而急剧增加;为减少计算工 作量,需对DFT计算方法进行改进。 资料个人收集整理,勿做商业用途 应用注意:把较长的数据序列分割成较短的数据序列(因为计算量与Nk成正比, N 计 算量 ),对这较短的数据序列进行DFT后,再合成为原数据序列的DFT。按照这样的做 法反复分割,使之最后只对最简短的数列进行DFT计算,以达到减少计算时间的目的。 资料个人收集整理,勿做商业用途 频谱分析 :对实验数据的频率特性进行分析分析数据各种频率的分量或强度)。频谱分析不仅 可以分辨复杂的频率成分,而且还可以定量分析。因此,频谱分析在工程技术中得到了 广泛应用资料个人收集整理,勿做商业用途 1.振动系统固有频率的测定 : 用频谱分析确定汽车悬架固有频率 2.随机环境的模拟 : 在研究机件的强度,寿命以及可靠性等方面研究时,用频谱分析确定载荷谱以模拟随机 环境。将测得的振动加速度信号分析得到标准的Gx(f),经过傅里叶逆变换、D/A转换及 功率放大器,通过闭环控制使得振动台的振动加速资料个人收集整理,勿做商业用途 度与实测的汽车振动加速度的功率谱相一致(在要求的误差范围内)。 在振动台上模拟道路的随
小波分析是一种用于信号处理和数据分析的方法,它可以将信号分解成不同频率的成分。FFT(快速傅里叶变换)是小波分析中常用的一种方法,用于将信号从时域转换到频域。 在进行FFT变换时,信号的周期性对结果有一定的影响。如果信号是周期性的,可以将截断的长度设置为一个完整周期的长度左右,这样可以从FFT的结果中获得相应的频率信息。但是对于非周期性的信号,简单的截断会导致频率泄露的问题。 为了解决频率泄露的问题,可以对非周期性信号进行数据补零。数据补零是指在信号的末尾添加一些零值,使得信号的长度达到一个2的幂次方。这样可以减小频率泄露的影响,并且提高FFT变换的精度。 在Python中,可以使用NumPy库进行小波分析FFT变换。下面是一个示例代码,演示了如何进行小波分析FFT变换,并展示了周期和幅度的计算结果: ```python import numpy as np import matplotlib.pyplot as plt # 生成非周期性信号 t = np.linspace(0, 1, 1000) signal = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t) # 进行小波分析FFT变换 wavelet = np.fft.fft(signal) freq = np.fft.fftfreq(len(signal)) # 计算周期和幅度 period = 1 / freq amplitude = np.abs(wavelet) # 绘制结果 plt.plot(period, amplitude) plt.xlabel('Period') plt.ylabel('Amplitude') plt.title('FFT Analysis') plt.show() ``` 在上述代码中,我们首先生成了一个非周期性信号,然后使用`np.fft.fft`函数进行FFT变换,得到信号的频域表示。通过计算频率的倒数,我们可以得到信号的周期。同时,通过计算FFT变换结果的绝对值,我们可以得到信号的幅度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值