正儿八经的傅里叶变换其实该叫DFT,但是一般在Excel也好,R软件也好,提供的现成工具做得都是快速傅里叶变换,所以实际用的都是FFT
今儿个举例的数据是从昨天的表里扣了一列出来弄的,比较少,但做这个应该是够用的
咱可以先看一眼数据分布的样子
plot(as.matrix(Table1))
就这么个看着貌似规律但又不太严格规律的东西,试试能分析成啥样吧
首先做个线性回归,去掉这个数列里的趋势性变化,整出残差数据
这个步骤要贴不?要贴不?要贴不?
嗯~~还是贴吧,就我这系列的小破阅读量,前面线性回归那篇没看过也很正常
搞个图意思一下,虽然四个图里我只看得明白前两张,但应该可以判断出这列残差值不属于白噪声
plot(lm(V1~T,Table1))
然后,上FFT,没错,函数名也叫fft,注意这里是小写(R软件对字母大小写敏感)
偶们好久不见的复数,来打个招呼吧
R软件里的复数处理公式专用的就几个,其他加减乘神马的都跟正常数值一样(不像excel似的全部搞成专用)
求模可以有,上Mod(这个开始首字母要大写了,小写不行的哟)
有数无图是不行滴,用过的亲应该知道,求模出来的数列第一个值是直流分量,后边是个左右对称的图形,为了好看点,我画图时把第一个数值去掉了
plot(Mod(Fnum[-1]),type = "o")
虽然比较早以前有推导过从傅里叶变换结果还原到原数列的计算公式(一个半月前那篇,标题是"Excel数据分析——用欧拉公式简化傅里叶变换结果",有兴趣的可以去翻翻),但有现成的不用那不是给自己找事儿么,所以,来见证一下反傅里叶函数mvfft的能力
Temp <- Re(mvfft(as.matrix(Conj(Fnum))))/17 #用mvfft把傅里叶变换的复数列转回原数据
> all.equal(as.vector(CanCha), as.vector(Temp)) #数据对比
这里没有直接用==而是用all.equal来验证主要是因为FFT过程本身会有损失,所以还原后的结果只是近似相同而不是绝对相同
(友情提示,千万不要直接用一个等于号=,原因自己想)
当然,不信邪非要自己看数据的我也不介意秀一下
好玩不好玩不,OK,秀完了咱就先去休息了,晚安啦~~
今天啥情况???传图传了n遍一直挂掉???服务器坏了么??



