Scipy Butterworth滤波与原厂软件结果存在差异,请求排查
Butterworth滤波结果与数据源软件存在细微差异排查
我有两份CSV样本数据:一份是未滤波原始数据,另一份是数据源软件通过Butterworth滤波器(遵循CFC180标准)得到的滤波后数据。我尝试用Scipy库的Butterworth滤波器自行处理未滤波数据,绘制对比曲线后发现,整体趋势一致,但放大后存在细微差异。
数据说明
- 数据列:第0列为时间,第1列为X轴加速度,仅使用这两列数据
- 采样率:20000Hz
- X轴硬件AA滤波器(-3db)值:4000Hz
我的Python代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import signal c_data = {} xmin = -5.00005 xmax = 5 c_filt = 'black' g = 9.81 # Butterworth Filter cfc60 = signal.butter(4, 100, output='sos', fs=20000) cfc180 = signal.butter(4, 300, output='sos', fs=20000) cfc600 = signal.butter(4, 1000, output='sos', fs=20000) cfc1000 = signal.butter(4, 1650, output='sos', fs=20000) def Acceleration(Axis_name, Axis_data, ymin, ymax, nofilter=False): if nofilter is True: print("Filtered from Software", Axis_data) plt.plot( c_data["t"], Axis_data/g, c_filt, label=f"{Axis_name}" ) else: # CFC180 Axis_data_filtered = signal.sosfilt(cfc180, Axis_data) print("Filtered scipy butter", Axis_data_filtered) plt.plot( c_data["t"], Axis_data_filtered/g, c_filt, label=f"{Axis_name}" ) plt.legend(loc="upper right") plt.grid(True) plt.axis([xmin, xmax, ymin, ymax]) plt.tick_params(which='minor', width=1, length=3, color='black') plt.minorticks_on() plt.xlabel("time [s]") plt.ylabel(f"{Axis_name} axle") plt.show(block=True) def GetData(File, filtering=False): dataframe = pd.read_csv(File, sep=';', skiprows=0, header=None) dfvalues = dataframe.values c_data["t"] = dfvalues[:, 0] # time c_data["x_acc"] = dfvalues[:, 1] # x axle Acceleration('X', c_data["x_acc"], -25, 20, filtering) return GetData("unfiltered.csv", False) # GetData("filtered.csv", True)
样本数据
- 未滤波原始数据
- 数据源软件滤波后数据
恳请协助排查差异原因,谢谢!
内容的提问来源于stack exchange,提问作者user1701820
相关产品推荐
相关产品推荐

