对原始信号进行非均匀采样,并绘制频谱图的代码
时间: 2023-12-06 17:45:27 浏览: 106
以下是对原始信号进行非均匀采样,并绘制频谱图的 Python 代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义原始信号函数
def signal_function(t):
return np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t)
# 生成时间序列
t = np.linspace(0, 1, 1000)
# 对时间序列进行非均匀采样
sample_points = np.sort(np.random.choice(t, size=200, replace=False))
sampled_signal = signal_function(sample_points)
# 绘制原始信号和采样信号的时域图像
plt.figure(figsize=(10, 3))
plt.plot(t, signal_function(t), label='Original signal')
plt.stem(sample_points, sampled_signal, label='Sampled signal')
plt.legend()
# 计算采样信号的频谱并绘制频谱图
fft_spectrum = np.fft.fft(sampled_signal)
freqs = np.fft.fftfreq(len(sampled_signal), d=1/len(sampled_signal))
plt.figure(figsize=(10, 3))
plt.stem(freqs, np.abs(fft_spectrum))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.show()
```
解释一下代码的主要步骤:
1. 定义原始信号函数 `signal_function`,这里假设原始信号是两个正弦波的叠加。
2. 生成时间序列 `t`,用于后面绘图。
3. 对时间序列 `t` 进行非均匀采样,得到采样点 `sample_points` 和采样信号 `sampled_signal`。
4. 绘制原始信号和采样信号的时域图像,使用 `plt.plot` 绘制原始信号的连续曲线,使用 `plt.stem` 绘制采样信号的离散值。
5. 计算采样信号的频谱,使用 `np.fft.fft` 函数进行快速傅里叶变换,得到频域幅值谱 `fft_spectrum`。
6. 计算频率轴,并使用 `plt.stem` 绘制频谱图,横轴为频率,纵轴为幅值。
注意:这里采用的是随机非均匀采样,因此每次运行代码得到的结果可能会有所不同。
阅读全文