编写python代码,生成一维数据,这个数据的特征是有不规则转折的曲线,然后利用多种尺寸高斯核对这个一维的曲线进行滤波,并将生成的数据和滤波结果绘制出来,需要标注出该曲线的高斯核是多少
时间: 2024-09-25 21:11:52 浏览: 22
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import convolve
# 生成不规则转折的曲线数据
np.random.seed(0)
x = np.linspace(0, 10, 1000)
y = np.sin(x) + np.random.normal(0, 0.1, 1000)
# 定义高斯核函数
def gaussian_kernel(size, sigma):
size = int(size) // 2
x = np.arange(-size, size+1)
normal = 1 / (np.sqrt(2 * np.pi) * sigma)
g = np.exp(-(x**2 / (2 * sigma**2))) * normal
return g
# 对曲线进行滤波
kernel_sizes = [3, 5, 7]
sigma = 1.0
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='原始曲线')
for kernel_size in kernel_sizes:
kernel = gaussian_kernel(kernel_size, sigma)
filtered_y = convolve(y, kernel, mode='same') / sum(kernel)
plt.plot(x, filtered_y, label=f'高斯核尺寸: {kernel_size}')
plt.legend()
plt.title('一维曲线及其高斯滤波结果')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
```