对函数 x(t)=3sin(4πt)+5cos(8πt)以采样间隔 T=0.01s 采样。利用离散傅里叶变换得到 t = [0,0.4] , [0,0.5] , [0,0.6] 时的幅度谱
时间: 2024-03-23 12:43:27 浏览: 43
好的,我会尽力回答你的问题。
首先,我们可以根据采样间隔 T,得到采样频率 fs = 1/T = 100 Hz。
然后,我们可以利用离散傅里叶变换(DFT)计算幅度谱。DFT 的公式为:
X[k] = Σ(n=0 to N-1) x[n] exp(-2πi kn/N)
其中,x[n] 是时域信号的采样值,N 是采样点数,k 是频域的序号(从 0 到 N-1),X[k] 是频域的复数值,其模表示信号在该频率上的幅度。
我们可以先用 Python 生成时域信号的采样值:
```python
import numpy as np
t = np.arange(0, 0.6, 0.01) # 时域采样时间点
x = 3 * np.sin(4 * np.pi * t) + 5 * np.cos(8 * np.pi * t) # 时域信号
```
接着,我们可以使用 numpy.fft.fft 函数计算 DFT:
```python
X = np.fft.fft(x) # DFT
X_mag = np.abs(X) # 幅度谱
```
X_mag 是一个长度为 60(采样点数)的数组,其前 30 个值对应正频率,后 30 个值对应负频率。我们只需要取前 31 个值,即 0 到 30,表示正频率的幅度谱。
```python
f = np.arange(0, 31) / 0.6 # 频域序号
X_mag = X_mag[:31] # 正频率幅度谱
```
然后,我们可以分别计算 t = 0.4、t = 0.5、t = 0.6 时的幅度谱。以 t = 0.4 为例:
```python
k = int(0.4 / 0.01) # 对应的采样点序号
X_mag_04 = X_mag * np.exp(-2*np.pi*1j*k*np.arange(60)/60) # 偏移相位
X_mag_04 = X_mag_04[:31] # 取正频率幅度谱
```
最后,我们可以画出时域信号和频域幅度谱的图像:
```python
import matplotlib.pyplot as plt
# 时域信号
plt.subplot(2, 1, 1)
plt.plot(t, x)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('x(t)')
# 幅度谱
plt.subplot(2, 1, 2)
plt.stem(f, X_mag_04)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.title('Magnitude Spectrum at t=0.4s')
plt.tight_layout()
plt.show()
```
重复上述步骤,可以得到 t = 0.5、t = 0.6 时的幅度谱。
阅读全文