不同频率下的非均匀采样的频谱图的程序
时间: 2024-02-05 12:13:03 浏览: 62
以下是一个Python程序,可以生成不同频率下的非均匀采样的频谱图。
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成信号
fs = 1000 # 采样频率
t = np.arange(0, 1, 1 / fs) # 时间轴
s = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t) # 信号
# 生成非均匀采样点
N = 50 # 采样点数
f_min = 10 # 最小频率
f_max = 200 # 最大频率
f = np.sort(np.random.uniform(f_min, f_max, N))
# 计算离散傅里叶变换
X = np.fft.fft(s)
X_mag = np.abs(X)
# 绘制频谱图
plt.figure(figsize=(8, 6))
plt.plot(np.fft.fftfreq(len(t)) * fs, X_mag, label='原始信号')
plt.stem(f, X_mag[(f * len(t) / fs).astype(int)], 'r', label='非均匀采样')
plt.xlabel('频率/Hz')
plt.ylabel('幅值')
plt.legend()
plt.show()
```
解释一下程序的主要部分:
- 生成信号:我们生成了两个正弦波信号,频率分别为50Hz和120Hz,它们的幅度相等。
- 生成非均匀采样点:我们使用`np.random.uniform`函数生成了50个在10Hz到200Hz之间的随机频率,这些频率就是我们的非均匀采样点。
- 计算离散傅里叶变换:使用`np.fft.fft`函数计算信号的离散傅里叶变换,并使用`np.abs`函数计算幅值。
- 绘制频谱图:使用`plt.plot`函数绘制原始信号的频谱图,使用`plt.stem`函数绘制非均匀采样点在频谱图上的位置。`np.fft.fftfreq(len(t)) * fs`可以将傅里叶变换的频率轴转换为实际的频率值。
运行程序后,你将得到一个包含原始信号和非均匀采样点的频谱图。你可以尝试调整采样点的数量、频率范围以及信号的频率,观察它们对频谱图的影响。
阅读全文