分析第四天中用到的傅里叶变换, 发现我们的采样点间隔总是0.2
秒. 作为实验, 我将演示这个间隔是影响数据的谱的.
均匀傅里叶变换
一个典型的实验是看函数, 的谱. 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
, 它是等间距分布在区间上的. 间隔为. 其函数图象如下(用直线连接了离散的点):
而得到的谱为: 频率 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
即我们手动定义了傅里叶变换的公式, 加入了时间变量:
其中 就是数据 对应的时刻.
重新抓取数据
前面提到数据抓取的间隔太大, 这可以由
mSensorManager.registerListener(this, mAccelerometer, 10);
手动指定抓取时间间隔为.
希望对新数据可以得到步态的周期.
网友评论