python代码,描述采样定理,分别演示fs大于等于2fmax和fs小于2fmax这两种情况下的信号恢复情况,并用动画描述采样定理
时间: 2023-06-17 11:02:32 浏览: 105
采样定理,也称为奈奎斯特定理,指出在一个连续时间信号中,如果采样频率为其最高频率的两倍及以上,则可以通过这些采样点完全恢复原始信号。
在Python中,可以使用NumPy和Matplotlib库来演示采样定理。下面分别演示fs大于等于2fmax和fs小于2fmax这两种情况下的信号恢复情况。
首先,导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
```
定义一个正弦信号:
```python
fmax = 10 # 最高频率
t = np.linspace(0, 1, 1000) # 时间轴
x = np.sin(2 * np.pi * fmax * t) # 正弦信号
```
接下来,定义两个函数分别演示fs大于等于2fmax和fs小于2fmax这两种情况下的信号恢复情况。其中,fs表示采样频率。
```python
def sample_large_fs():
fs = 40 # 采样频率大于等于2fmax
n = np.arange(0, len(t), 1)
xn = np.sin(2 * np.pi * fmax * n / fs)
return xn
def sample_small_fs():
fs = 18 # 采样频率小于2fmax
n = np.arange(0, len(t), 1)
xn = np.sin(2 * np.pi * fmax * n / fs)
return xn
```
最后,使用Matplotlib的动画功能来描述采样定理。动画将分别演示fs大于等于2fmax和fs小于2fmax这两种情况下的信号恢复情况。
```python
fig, (ax1, ax2) = plt.subplots(2, figsize=(8, 8))
ax1.set_title('fs >= 2*fmax')
ax1.set_ylim(-1.2, 1.2)
ax1.plot(t, x, label='Original Signal')
ax1.stem(t, sample_large_fs(), label='Sampled Signal', use_line_collection=True)
ax1.legend(loc='upper right')
ax2.set_title('fs < 2*fmax')
ax2.set_ylim(-1.2, 1.2)
ax2.plot(t, x, label='Original Signal')
ax2.stem(t, sample_small_fs(), label='Sampled Signal', use_line_collection=True)
ax2.legend(loc='upper right')
def update(num):
ax1.clear()
ax1.set_title('fs >= 2*fmax')
ax1.set_ylim(-1.2, 1.2)
ax1.plot(t, x, label='Original Signal')
ax1.stem(t, sample_large_fs(), label='Sampled Signal', use_line_collection=True)
ax1.legend(loc='upper right')
ax2.clear()
ax2.set_title('fs < 2*fmax')
ax2.set_ylim(-1.2, 1.2)
ax2.plot(t, x, label='Original Signal')
ax2.stem(t, sample_small_fs(), label='Sampled Signal', use_line_collection=True)
ax2.legend(loc='upper right')
ani = FuncAnimation(fig, update, frames=np.arange(0, 20), interval=1000)
plt.show()
```
运行代码后,将会显示一个动画,分别演示fs大于等于2fmax和fs小于2fmax这两种情况下的信号恢复情况。
阅读全文