Tag: 数字滤波器

随时间变化的指数移动平均线

我有一个连续的值,我想计算一个指数移动平均线 。 通常我只是使用这个标准公式: S n =αY+(1-α)S n-1 其中S n是新的平均值,α是α,Y是样本,S n-1是以前的平均值。 不幸的是,由于各种问题,我没有一个一致的采样时间。 我可能知道最多可以抽样一次,也就是每毫秒一次,但是由于我不能控制的因素,我可能无法一次抽样数毫秒。 然而,可能更常见的情况是,我简单地抽样了一些早或晚,而不是在0,1和2毫秒采样。 我在0,0.9和2.1毫秒采样。 我预料到,不pipe延迟如何,我的采样频率将远远高于奈奎斯特极限,因此我不必担心锯齿。 我认为,我可以根据自上次采样以来的时间长度,通过适当地改变阿尔法来或多或less地合理地处理这个问题。 我的推理的部分原因是,EMA在前一个数据点和当前数据点之间“线性插入”。 如果我们考虑以间隔t计算以下样本列表的EMA:[0,1,2,3,4]。 如果我们使用间隔2t,input变成[0,2,4],那么我们应该得到相同的结果,对吗? 如果EMA假设在t 2时刻t 2时刻的值为2,那么和在[0,2,2,4,4]上计算的时间间隔t的计算方法是一样的。 或者这是否有意义呢? 有人能告诉我如何适当地改变阿尔法? “请展示你的工作。” 也就是说,告诉我mathcertificate你的方法确实是做正确的事情。

如何用Scipy.signal.butter实现带通Butterworth滤波器

更新: 令我惊讶的是,在差不多两年后的同一个话题中,我find了一个基于这个问题的“Scipy食谱”! 所以,对于任何感兴趣的人,请直接去: http://wiki.scipy.org/Cookbook/ButterworthBandpass 我很难达到最初实现用于一维numpyarrays(时间序列)的Butterworth带通滤波器的简单任务。 我必须包括的参数是sample_rate,截止频率IN HERTZ和可能的顺序(其他参数,如衰减,固有频率等对我来说比较晦涩,所以任何“默认”值都可以)。 我现在拥有的是这个,它似乎是一个高通滤波器,但我无法确定,如果我正确地做到这一点: def butter_highpass(interval, sampling_rate, cutoff, order=5): nyq = sampling_rate * 0.5 stopfreq = float(cutoff) cornerfreq = 0.4 * stopfreq # (?) ws = cornerfreq/nyq wp = stopfreq/nyq # for bandpass: # wp = [0.2, 0.5], ws = [0.1, 0.6] N, wn = scipy.signal.buttord(wp, ws, 3, 16) # (?) […]