美文网首页
第五天. 非均匀离散傅里叶变换

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

作者: 破旧的大卡车 | 来源:发表于2018-10-27 19:26 被阅读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.

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

    相关文章

      网友评论

          本文标题:第五天. 非均匀离散傅里叶变换

          本文链接:https://www.haomeiwen.com/subject/kxadtqtx.html