用python实现 1、利用 python 软件根据不同的采样率绘制出信号图像。 2、验证采样定理,不同的采样率下比较原始信号、采样信号和重建信号在时域和频域的图像。
时间: 2024-03-19 15:43:54 浏览: 89
这是一个比较复杂的问题,需要用到一些信号处理的知识和 Python 库。下面是一个简单的示例代码,仅供参考:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 原始信号
t = np.linspace(0, 1, 1000, endpoint=False)
x = signal.square(2 * np.pi * 5 * t)
# 采样率为 100 Hz
t_100 = np.linspace(0, 1, 100, endpoint=False)
x_100 = signal.square(2 * np.pi * 5 * t_100)
# 采样率为 50 Hz
t_50 = np.linspace(0, 1, 50, endpoint=False)
x_50 = signal.square(2 * np.pi * 5 * t_50)
# 重建信号
x_r_100 = np.interp(t, t_100, x_100)
x_r_50 = np.interp(t, t_50, x_50)
# 时域图像
plt.subplot(2, 2, 1)
plt.plot(t, x)
plt.title('Original Signal')
plt.subplot(2, 2, 2)
plt.plot(t_100, x_100, 'o')
plt.plot(t, x_r_100)
plt.title('Sampled @ 100 Hz')
plt.subplot(2, 2, 3)
plt.plot(t_50, x_50, 'o')
plt.plot(t, x_r_50)
plt.title('Sampled @ 50 Hz')
# 频域图像
xf = np.fft.fft(x)
xf_100 = np.fft.fft(x_r_100)
xf_50 = np.fft.fft(x_r_50)
freq = np.fft.fftfreq(t.size, d=t[1]-t[0])
plt.subplot(2, 2, 4)
plt.plot(freq, np.abs(xf), label='Original')
plt.plot(freq, np.abs(xf_100), label='Sampled @ 100 Hz')
plt.plot(freq, np.abs(xf_50), label='Sampled @ 50 Hz')
plt.legend()
plt.title('Frequency Domain')
plt.show()
```
这段代码使用了 `numpy`、`matplotlib` 和 `scipy` 库。首先生成一个正弦波作为原始信号,然后分别使用 100 Hz 和 50 Hz 的采样率对信号进行采样,并重建出采样信号。最后绘制出原始信号、采样信号和重建信号在时域和频域的图像,用于验证采样定理。
注意,这段代码只是一个简单的示例,实际应用中还需要考虑滤波等问题。
阅读全文