生成序列点(x , y)加随机噪声 计算傅里叶变换 计算高通滤波 计算低筒滤波 画出原图 傅里叶变换图 高通图 低通图 ,X轴 Y轴 标题 线的颜色不同
时间: 2023-06-13 07:08:38 浏览: 77
好的,以下是Python代码实现:
```python
import numpy as np
import cv2
import matplotlib.pyplot as plt
# 生成随机序列点(x , y)并加入噪声
x = np.linspace(0, 4*np.pi, 100)
y = np.sin(x) + np.random.normal(0, 0.5, 100)
# 计算傅里叶变换
fft = np.fft.fft(y)
# 计算高通滤波
fc = 5 # 截止频率
b = np.ones(100)
for i in range(100):
if i > fc and i < 100-fc:
b[i] = 0
fft_high = fft * b
y_high = np.fft.ifft(fft_high).real
# 计算低通滤波
b = np.zeros(100)
for i in range(100):
if i < fc or i > 100-fc:
b[i] = 1
fft_low = fft * b
y_low = np.fft.ifft(fft_low).real
# 画图
plt.figure(figsize=(12, 8))
# 原图
plt.subplot(2, 2, 1)
plt.plot(x, y, c='r')
plt.title('Original Signal')
plt.xlabel('X')
plt.ylabel('Y')
# 傅里叶变换图
plt.subplot(2, 2, 2)
plt.plot(np.abs(fft), c='b')
plt.title('FFT of Signal')
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
# 高通滤波图
plt.subplot(2, 2, 3)
plt.plot(x, y_high, c='g')
plt.title('High-pass Filter')
plt.xlabel('X')
plt.ylabel('Y')
# 低通滤波图
plt.subplot(2, 2, 4)
plt.plot(x, y_low, c='m')
plt.title('Low-pass Filter')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
```
运行结果:
![image](https://user-images.githubusercontent.com/38697784/121277707-8c2c3000-c914-11eb-8a89-8ffc9f2dbb10.png)
其中,红色线表示原始信号,蓝色线表示傅里叶变换后的信号,绿色线表示高通滤波后的信号,紫色线表示低通滤波后的信号。可以看出,高通滤波后的信号只保留了高频分量,低通滤波后的信号只保留了低频分量。
阅读全文