python一维高斯滤波的演示代码
时间: 2024-06-20 21:02:55 浏览: 184
Python一维高斯滤波的演示代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
def gaussian_kernel(size, sigma=1):
"""生成一维高斯核"""
x = np.arange(-size//2 + 1, size//2 + 1)
kernel = np.exp(-(x/sigma)**2/2)
return kernel / np.sum(kernel)
def convolve(signal, kernel):
"""一维卷积"""
size = kernel.size
half = size // 2
signal = np.pad(signal, half, mode='edge')
conv = np.zeros_like(signal)
for i in range(half, signal.size-half):
conv[i] = np.sum(signal[i-half:i+half+1]*kernel)
return conv[half:-half]
# 生成原始信号
x = np.linspace(-10, 10, num=1000)
y = np.sin(x) + np.random.randn(x.size)/10
# 高斯滤波
kernel = gaussian_kernel(21, sigma=3)
y_filtered = convolve(y, kernel)
# 绘图
fig, ax = plt.subplots(2, 1, figsize=(8, 6))
ax.plot(x, y, label='Original')
ax.legend()
ax.plot(x, y_filtered, label='Filtered')
ax.legend()
plt.show()
```
在这个代码中,我们定义了两个函数:`gaussian_kernel`和`convolve`。`gaussian_kernel`用于生成一维高斯核,`convolve`用于对信号进行一维卷积。我们使用`numpy`和`matplotlib`库来实现代码的具体逻辑。
在这个示例中,我们首先生成了一个包含噪声的正弦信号,然后使用`gaussian_kernel`生成一个大小为21、标准差为3的高斯核,并对信号进行一维卷积,得到滤波后的信号。最后,我们将原始信号和滤波后的信号在同一张图上绘制出来,以便于对比。
阅读全文