通过NumPy对数据进行快速傅里叶变换,并将输出组织成“单边谱”的形式
时间: 2024-05-11 18:18:30 浏览: 56
首先,需要导入NumPy库和matplotlib库(用于绘图):
```python
import numpy as np
import matplotlib.pyplot as plt
```
接下来,生成一组信号数据:
```python
# 生成1000个等间隔的采样点
t = np.linspace(0, 1, 1000, endpoint=False)
# 生成一个频率为50Hz的正弦波信号,加上一些随机噪声
x = 0.7*np.sin(2*np.pi*50*t) + 0.3*np.sin(2*np.pi*100*t) + 0.5*np.random.randn(1000)
```
对信号进行傅里叶变换:
```python
# 对信号进行傅里叶变换
y = np.fft.fft(x)
# 计算单边谱
P = np.abs(y)/len(x)
P = P[:len(x)//2+1]
P[1:-1] *= 2
```
最后,绘制单边谱:
```python
# 绘制单边谱
f = np.linspace(0, 1/2, len(P))
plt.plot(f, P)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
```
完整代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成1000个等间隔的采样点
t = np.linspace(0, 1, 1000, endpoint=False)
# 生成一个频率为50Hz的正弦波信号,加上一些随机噪声
x = 0.7*np.sin(2*np.pi*50*t) + 0.3*np.sin(2*np.pi*100*t) + 0.5*np.random.randn(1000)
# 对信号进行傅里叶变换
y = np.fft.fft(x)
# 计算单边谱
P = np.abs(y)/len(x)
P = P[:len(x)//2+1]
P[1:-1] *= 2
# 绘制单边谱
f = np.linspace(0, 1/2, len(P))
plt.plot(f, P)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
```