第五天. 非均匀离散傅里叶变换

2018-10-27  本文已影响139人  破旧的大卡车

分析第四天中用到的傅里叶变换, 发现我们的采样点间隔总是0.2秒. 作为实验, 我将演示这个间隔是影响数据的谱的.

均匀傅里叶变换

一个典型的实验是看函数f(x)=\sin(100 \times (2\pi x)), x\in[0,1]的谱. mma代码如下:

n = 400;
pos=Sort[Table[i/n, {i, n}]] // DeleteDuplicates;
testData = Table[N@Sin[100 2Pi x], {x, 0, 1, 1/n}];
ListLinePlot[testData]
ListLinePlot[Abs[Fourier[testData]], PlotRange -> All]

即我们取离散的点列pos, 它是等间距分布在[0,1]区间上的. 间隔为1/n. 其函数图象如下(用直线连接了离散的点):

fourier-uniform-data
而得到的谱为: 频率 fourier-uniform-spectrum
我想这些规律都可以从均匀傅里叶变换的公式推导得出:
non-uniform-fourier-spec

这可以由如下公式修正:

spec[w_?NumericQ] := 
 1/Sqrt[Length[dpos]] Exp[2 Pi I (w - 1) (dpos - 1)].testDatar
Plot[Abs[spec[w]], {w, -300, 300}, PlotRange -> All]
non-uniform-fourier-spec-modify
即我们手动定义了傅里叶变换的公式, 加入了时间变量:
v_s=\frac{1}{\sqrt{N}}\sum_{n=1}^Nu_ne^{2\pi i (s-1)(p_n-1)},
其中 p_n 就是数据 u_n 对应的时刻.

重新抓取数据

前面提到数据抓取的间隔太大, 这可以由

mSensorManager.registerListener(this, mAccelerometer, 10);

手动指定抓取时间间隔为0.01s.

希望对新数据可以得到步态的周期.

上一篇 下一篇

猜你喜欢

热点阅读