代码之家  ›  专栏  ›  技术社区  ›  Nick Larsen

噪声数据分析

  •  8
  • Nick Larsen  · 技术社区  · 15 年前

    我最近发射了一枚带有气压高度表的火箭,精确到大约10英尺(通过飞行中获得的数据计算)。记录的数据以每次采样0.05秒的时间增量表示,高度与时间的关系图与在整个飞行过程中缩小时的情况非常相似。

    高度数据如下所示,以地面以上英尺为单位测量。第一次为0.00,每个样品在前一个样品之后为0.05秒。飞行开始时的尖峰是由于在发射过程中出现的技术问题造成的,移除尖峰是最佳选择。

    非常感谢您的帮助。请注意,这不是完整的数据集,我正在寻找更好的方法来分析数据的建议,而不是让某人用转换后的数据集来回答。在未来的火箭上使用一种算法会很好,这种算法可以在不知道全部飞行数据的情况下预测当前的高度/速度/加速度,尽管这不是必需的。

    00000
    00000
    00000
    00076
    00229
    00095
    00057
    00038
    00048
    00057
    00057
    00076
    00086
    00095
    00105
    00114
    00124
    00133
    00152
    00152
    00171
    00190
    00200
    00219
    00229
    00248
    00267
    00277
    00286
    00305
    00334
    00343
    00363
    00363
    00382
    00382
    00401
    00420
    00440
    00459
    00469
    00488
    00517
    00527
    00546
    00565
    00585
    00613
    00633
    00652
    00671
    00691
    00710
    00729
    00759
    00778
    00798
    00817
    00837
    00856
    00885
    00904
    00924
    00944
    00963
    00983
    01002
    01022
    01041
    01061
    01080
    01100
    01120
    01139
    01149
    01169
    01179
    01198
    01218
    01238
    01257
    01277
    01297
    01317
    01327
    01346
    01356
    01376
    01396
    01415
    01425
    01445
    01465
    01475
    01495
    01515
    01525
    01545
    01554
    01574
    01594
    01614
    01614
    01634
    01654
    01664
    01674
    01694
    01714
    01724
    01734
    01754
    01764
    01774
    01794
    01804
    01814
    01834
    01844
    01854
    01874
    01884
    01894
    01914
    01924
    01934
    01954
    01954
    01975
    01995
    01995
    02015
    02015
    02035
    02045
    02055
    02075
    02075
    02096
    02096
    02116
    02126
    02136
    02146
    02156
    02167
    02177
    02187
    02197
    02207
    02217
    02227
    02237
    02237
    02258
    02268
    02278
    02278
    02298
    02298
    02319
    02319
    02319
    02339
    02349
    02359
    02359
    02370
    02380
    02380
    02400
    02400
    01914
    02319
    02420
    02482
    02523
    02461
    02502
    02543
    02564
    02595
    02625
    02666
    02707
    02646
    02605
    02605
    02584
    02574
    02543
    02543
    02543
    02543
    02543
    02543
    02554
    02543
    02554
    02554
    02554
    02554
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02533
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02543
    02533
    02523
    02523
    02523
    02523
    02523
    02523
    02523
    02523
    02543
    02523
    02523
    02523
    02523
    02523
    02523
    02523
    02523
    02513
    02513
    02502
    02502
    02492
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02482
    02472
    02472
    02472
    02461
    02461
    02461
    02461
    02451
    02451
    02451
    02461
    02461
    02451
    02451
    02451
    02451
    02451
    02451
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02441
    02431
    02441
    02431
    02441
    02431
    02420
    02431
    02420
    02420
    02420
    02420
    02420
    02420
    02420
    02420
    02420
    02420
    02420
    02420
    02410
    02420
    02410
    02410
    02410
    02410
    02400
    02400
    02410
    02400
    02400
    02400
    02400
    02400
    02400
    02400
    02400
    02400
    02400
    02400
    02400
    02390
    02390
    02390
    02380
    02380
    02380
    02380
    02380
    02380
    02380
    02380
    02380
    02380
    02380
    02380
    02380
    02370
    02370
    02380
    02370
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02359
    02349
    02349
    02349
    02349
    02349
    02339
    02339
    02339
    02339
    02339
    02339
    02339
    02339
    02339
    02339
    02339
    02339
    02339
    
    6 回复  |  直到 15 年前
        1
  •  8
  •   Federico A. Ramponi    15 年前

    这是我的解决方案,使用 Kalman filter . 如果希望或多或少地平滑,则需要调整参数(甚至+数量级)。

    #!/usr/bin/env octave
    
    % Kalman filter to smooth measures of altitude and estimate
    % speed and acceleration. The continuous time model is more or less as follows:
    % derivative of altitude := speed
    % derivative of speed := acceleration
    % acceleration is a Wiener process
    
    %------------------------------------------------------------
    % Discretization of the continuous-time linear system
    % 
    %   d  |x|   | 0 1 0 | |x|
    %  --- |v| = | 0 0 1 | |v|   + "noise"
    %   dt |a|   | 0 0 0 | |a|
    %
    %   y = [1 0 0] |x|     + "measurement noise"
    %               |v|
    %               |a|
    %
    st = 0.05;    % Sampling time
    A = [1  st st^2/2;
         0  1  st    ;
         0  0  1];
    C = [1 0 0];
    
    %------------------------------------------------------------
    % Fine-tune these parameters! (in particular qa and R)
    % The acceleration follows a "random walk". The greater is the variance qa,
    % the more "reactive" the system is expected to be, i.e.
    % the more the acceleration is expected to vary
    % The greater is R, the more noisy is your measurement instrument
    % (less "accuracy" of the barometric altimeter);
    % if you increase R, you will smooth the estimate more
    qx = 1.0;                      % Variance of model noise for position
    qv = 1.0;                      % Variance of model noise for speed
    qa = 50.0;                     % Variance of model noise for acceleration
    Q  = diag([qx, qv, qa]);
    R  = 100.0;                    % Variance of measurement noise
                                   % (10^2, if 10ft is the standard deviation)
    
    load data.txt  % Put your measures in this file
    
    est_position     = zeros(length(data), 1);
    est_speed        = zeros(length(data), 1);
    est_acceleration = zeros(length(data), 1);
    
    %------------------------------------------------------------
    % Kalman filter
    xhat = [0;0;0];     % Initial estimate
    P    = zeros(3,3);  % Initial error variance
    for i=1:length(data),
       y = data(i);
       xpred = A*xhat;                                    % Prediction
       Ppred = A*P*A' + Q;                                % Prediction error variance
       Lambdainv = 1/(C*Ppred*C' + R);
       xhat  = xpred + Ppred*C'*Lambdainv*(y - C*xpred);  % Update estimation
       P = Ppred - Ppred*C'*Lambdainv*C*Ppred;            % Update estimation error variance
       est_position(i)     = xhat(1);
       est_speed(i)        = xhat(2);
       est_acceleration(i) = xhat(3);
    end
    
    %------------------------------------------------------------
    % Plot
    figure(1);
    hold on;
    plot(data, 'k');               % Black: real data
    plot(est_position, 'b');       % Blue:  estimated position
    plot(est_speed, 'g');          % Green: estimated speed
    plot(est_acceleration, 'r');   % Red:   estimated acceleration
    pause
    
        2
  •  3
  •   Rob Curtis    15 年前

    您可以尝试通过低通过滤器运行数据。这将消除高频噪声。也许是一棵简单的冷杉。

        3
  •  2
  •   Stefano Borini    15 年前

    您是否尝试过对您的值执行滚动窗口平均值?基本上,您执行一个窗口,比如10个值(从0到9),然后计算其平均值。然后将窗口滚动一个点(从1到10)并重新计算。这将平滑值,同时保持点数相对不变。窗口越大,数据越平滑,代价是丢失更多的高频信息。

    如果数据出现异常值峰值,则可以使用中位数而不是平均值。

    您也可以尝试使用 Autocorrelation

        4
  •  1
  •   Thomas Sidoti    15 年前

    分析数据的一种方法是尝试将数据与某个模型匹配,生成一个函数,然后 test its fitness to your data set

    至于在飞行中产生一些速度和加速度的感觉,这应该是从几个不同的结果中简单地平均速度。大致如下:

        5
  •  1
  •   Bill Bell    15 年前

    我对火箭一无所知。我画出了你的观点,它们看起来很可爱。

    根据我在那张图上看到的,让我假设,通常只有一个远地点,产生点的函数在那个远地点没有导数wrt时间。

    建议:

    1. 通过(简单地说)将最近的几个点与当前的最大点进行比较,持续观察远地点。
    2. 在达到最大值之前,使用(0,0)固定结和一些任意结集计算当前海拔高度的自然样条线集合。使用样条曲线的残差来决定要丢弃的数据。重新计算样条曲线。
    3. 最多保留最近计算的样条曲线。开始为远地点以外的曲线计算一组新的样条曲线。
        6
  •  0
  •   Niklas Rosencrantz    15 年前