# 相频曲线和幅频曲线在频率稍大(大于4),曲线出现抖动的情况 from scipy.signal import convolve # 定义窗口大小 window_size = 10 # 定义滑动平均的卷积核 kernel = np.ones(window_size) / window_size # 对数据进行滑动平均处理 pha_TH_smooth = convolve(pha_TH, kernel, mode='valid')
时间: 2024-03-08 13:47:12 浏览: 96
出现抖动的情况可能是由于窗口大小过小,或者是卷积核的选择不合适导致的。可以尝试增大窗口大小或者选择不同的卷积核来解决这个问题。同时,也可以考虑对滑动平均的结果进行进一步处理,例如应用低通滤波器来去除高频噪声。以下是一个示例代码,演示如何应用低通滤波器对滑动平均的结果进行进一步处理:
```python
from scipy.signal import convolve, butter, filtfilt
# 定义窗口大小和卷积核
window_size = 10
kernel = np.ones(window_size) / window_size
# 对数据进行滑动平均处理
pha_TH_smooth = convolve(pha_TH, kernel, mode='valid')
# 定义低通滤波器
cutoff_freq = 2 # 截止频率
b, a = butter(4, cutoff_freq / (fs/2), 'low') # 4阶巴特沃斯低通滤波器
# 应用低通滤波器
pha_TH_smooth_filtered = filtfilt(b, a, pha_TH_smooth)
# 绘制原始曲线、滑动平均曲线和经过低通滤波器处理后的曲线
plt.plot(freq[:len(pha_TH)], pha_TH, label='raw')
plt.plot(freq[window_size-1:len(pha_TH_smooth)+window_size-1], pha_TH_smooth, label='smooth')
plt.plot(freq[window_size-1:len(pha_TH_smooth_filtered)+window_size-1], pha_TH_smooth_filtered, label='smooth+filtered')
plt.legend()
plt.show()
```
在上面的代码中,我们首先定义了窗口大小和卷积核,并使用 `convolve` 方法对数据进行了滑动平均处理。接下来,我们定义了一个低通滤波器,并使用 `butter` 方法生成了其系数。然后,我们使用 `filtfilt` 方法对滑动平均结果进行了进一步处理,将其经过低通滤波器进行滤波。最后,我们将原始曲线、滑动平均曲线和经过低通滤波器处理后的曲线绘制在同一张图中,以便比较它们之间的差异。
阅读全文