生成序列点(x , y)加随机噪声 计算傅里叶变换 计算高通滤波 计算低筒滤波 画出原图 傅里叶变换图 高通图 低通图 ,X轴 Y轴 标题 线的颜色不同
时间: 2023-06-13 11:08:35 浏览: 90
好的,这是一个比较复杂的问题,需要分步骤来完成。以下是具体步骤:
1. 生成序列点(x, y)并加入随机噪声
首先,我们需要生成一些点(x, y),并在y轴方向加入一些随机噪声,代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成序列点
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
# 加入随机噪声
noise = np.random.normal(0, 0.1, len(y))
y_noisy = y + noise
```
2. 计算傅里叶变换
接下来,我们需要对上一步生成的带噪声的序列进行傅里叶变换,代码如下:
```python
# 计算傅里叶变换
y_fft = np.fft.fft(y_noisy)
freq = np.fft.fftfreq(len(y_noisy), x[1]-x[0])
```
3. 计算高通滤波
然后,我们需要对傅里叶变换后的数据进行高通滤波,代码如下:
```python
# 高通滤波
y_fft_highpass = y_fft.copy()
y_fft_highpass[(np.abs(freq) < 0.1)] = 0
y_highpass = np.fft.ifft(y_fft_highpass)
```
4. 计算低通滤波
接下来,我们需要对傅里叶变换后的数据进行低通滤波,代码如下:
```python
# 低通滤波
y_fft_lowpass = y_fft.copy()
y_fft_lowpass[(np.abs(freq) > 0.1)] = 0
y_lowpass = np.fft.ifft(y_fft_lowpass)
```
5. 绘制图像
最后,我们需要将原始序列、傅里叶变换、高通滤波、低通滤波的图像绘制出来,代码如下:
```python
# 绘制图像
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.plot(x, y_noisy, 'r-', label='Original')
plt.legend(loc='best')
plt.title('Original Signal')
plt.subplot(2, 2, 2)
plt.plot(freq, np.abs(y_fft), 'b-', label='FFT')
plt.legend(loc='best')
plt.title('Frequency Domain')
plt.subplot(2, 2, 3)
plt.plot(x, np.real(y_highpass), 'g-', label='High Pass')
plt.legend(loc='best')
plt.title('High Pass Filter')
plt.subplot(2, 2, 4)
plt.plot(x, np.real(y_lowpass), 'y-', label='Low Pass')
plt.legend(loc='best')
plt.title('Low Pass Filter')
plt.show()
```
这样,我们就完成了生成序列点、傅里叶变换、高通滤波、低通滤波并绘制图像的整个过程。
阅读全文