有一组加速度的数据,采样频率是100HZ,不使用python内置函数,定义一个函数,对该加速度数据实现巴特沃斯低通滤波,其中,阶数、截止频率以及采样频率都是可调参数,最后将原始数据和经过巴特沃斯低通滤波的数据通过plt画出来在同一个坐标轴中,进行比较。
时间: 2024-10-07 19:00:43 浏览: 42
要实现这个功能,你需要使用傅里叶变换和逆变换来进行低通滤波,同时利用数字信号处理的基本原理。以下是一个简单的Python函数,它使用numpy库来完成这个任务:
```python
import numpy as np
import matplotlib.pyplot as plt
def butter_lowpass_filter(data, cutoff_freq, fs, order=5):
nyquist_rate = 0.5 * fs
normal_cutoff = cutoff_freq / nyquist_rate
b, a = signal.butter(order, normal_cutoff, btype='low', analog=False)
# Apply the filter to the data
filtered_data = signal.lfilter(b, a, data)
return filtered_data, b, a
# 假设data是你的加速度时间序列数据
cutoff_freq = 10 # 截止频率(Hz)
fs = 100 # 采样频率(Hz)
order = 5 # 滤波器阶数
filtered_data, _, _ = butter_lowpass_filter(data, cutoff_freq, fs)
# 对原始数据和滤波后的数据进行可视化
t = np.arange(0, len(data)) / fs # 时间轴
plt.figure()
plt.plot(t, data, label='Original Data')
plt.plot(t, filtered_data, label='Filtered Data (cutoff {:.2f} Hz)'.format(cutoff_freq))
plt.xlabel('Time (s)')
plt.ylabel('Acceleration')
plt.title('Low-pass Filter Comparison')
plt.legend()
plt.grid(True)
plt.show()
阅读全文