把一个数据列表用傅里叶变换分解成多个正弦波 画出来 用python写代码
时间: 2024-05-14 07:13:43 浏览: 152
好的,以下是Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
t = np.linspace(0, 2*np.pi, 1000)
data = 3*np.sin(2*t) + 5*np.sin(5*t)
# 进行傅里叶变换
fft_data = np.fft.fft(data)
# 求取频率和振幅
freq = np.fft.fftfreq(len(data), d=t[1]-t[0])
amp = np.abs(fft_data) / len(data)
# 取前 n 个频率分量
n = 10
idx = np.argsort(-amp)[:n]
freq = freq[idx]
amp = amp[idx]
# 重构信号
recon_data = np.zeros_like(data)
for i in idx:
recon_data += np.real(fft_data[i] * np.exp(2*np.pi*1j*freq[i]*t))
# 绘制图像
plt.subplot(2, 1, 1)
plt.plot(t, data, 'b', label='Original Data')
plt.plot(t, recon_data, 'r', label='Reconstructed Data')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(2, 1, 2)
plt.stem(freq, amp, 'b', use_line_collection=True)
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
plt.show()
```
这段代码可以将一个数据列表通过傅里叶变换分解成多个正弦波,并绘制出相应的频率和振幅图像。
阅读全文