帮我写一串y(t)=cos(50πt)的时域波形以及dB为幅值的频谱图的代码
时间: 2024-10-29 14:12:36 浏览: 11
在Python中,我们可以使用matplotlib库来绘制时域波形和Matplotlib搭配numpy计算频率成分,并结合scipy库来进行dB转换。以下是一个简化的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch
# 定义时间序列长度和采样率
t_len = 1 # 单位秒,可以根据需要调整
fs = 1000 # 采样率,假设每秒1000点
# 创建时间轴
t = np.linspace(0, t_len, int(fs * t_len), endpoint=False)
# 生成余弦信号
y = np.cos(2 * np.pi * 50 * fs * t) # 假设频率是50Hz,注意单位转换
# 绘制时域波形
plt.figure(figsize=(8, 4))
plt.plot(t, y, label='Cosine Waveform')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Time Domain - Cos(50πt)')
plt.legend()
plt.grid(True)
plt.show()
# 计算并绘制幅度谱图(dB)
f, Pxx = welch(y, fs=fs, nperseg=fs // 2, scaling='spectrum') # 使用Welch's method
Pxx_db = 20 * np.log10(np.abs(Pxx)) # 转换为dB
plt.figure(figsize=(8, 4))
plt.psd(Pxx_db, Fs=fs, color='blue', linestyle='-', label='Power Spectrum (dB)')
plt.xlim((0, fs / 2)) # 只考虑正半轴,因为单边谱
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude (dB)')
plt.title('Frequency Domain - Power Spectrum of cos(50πt) (dB)')
plt.legend()
plt.grid(True)
plt.show()
阅读全文