已知有限长序列 x(n)=[0,1,2,3,4,5,6,7], 要求: 1, 求该序列的 DFT、 IDFT 的图形; 2, 用 FFT 算法求该序列的 DFT、 IDFT 的图形; 3, 假定采样周期 Ts=0.2s, 序列长度 N 取64时, 用 FFT 计算其幅度谱和相位谱。
时间: 2023-11-28 17:49:31 浏览: 222
1. 求该序列的 DFT、 IDFT 的图形:
DFT 图形:
```
import numpy as np
import matplotlib.pyplot as plt
x = np.array([0, 1, 2, 3, 4, 5, 6, 7])
N = len(x)
n = np.arange(N)
k = n.reshape((N, 1))
Wn = np.exp(-2j * np.pi * k * n / N)
X = np.dot(Wn, x)
plt.stem(np.abs(X))
plt.title('DFT')
plt.xlabel('k')
plt.ylabel('|X(k)|')
plt.show()
```
IDFT 图形:
```
X = np.array([28.+0.j, -4.+9.66j, -4.+4.j, -4.+1.54j, -4.+0.j, -4.-1.54j, -4.-4.j, -4.-9.66j])
n = np.arange(N)
k = n.reshape((N, 1))
Wn = np.exp(2j * np.pi * k * n / N)
x = np.real(np.dot(Wn, X) / N)
plt.stem(x)
plt.title('IDFT')
plt.xlabel('n')
plt.ylabel('x(n)')
plt.show()
```
2. 用 FFT 算法求该序列的 DFT、 IDFT 的图形:
DFT 图形:
```
X = np.fft.fft(x)
plt.stem(np.abs(X))
plt.title('DFT')
plt.xlabel('k')
plt.ylabel('|X(k)|')
plt.show()
```
IDFT 图形:
```
x = np.fft.ifft(X)
plt.stem(np.real(x))
plt.title('IDFT')
plt.xlabel('n')
plt.ylabel('x(n)')
plt.show()
```
3. 假定采样周期 Ts=0.2s, 序列长度 N 取64时, 用 FFT 计算其幅度谱和相位谱。
```
Ts = 0.2
N = 64
t = np.arange(0, N * Ts, Ts)
x = np.array([0, 1, 2, 3, 4, 5, 6, 7])
X = np.fft.fft(x, N)
f = np.fft.fftfreq(N, Ts)
amp = np.abs(X)
phase = np.angle(X)
plt.stem(f, amp)
plt.title('Amplitude Spectrum')
plt.xlabel('f (Hz)')
plt.ylabel('|X(f)|')
plt.show()
plt.stem(f, phase)
plt.title('Phase Spectrum')
plt.xlabel('f (Hz)')
plt.ylabel('arg(X(f))')
plt.show()
```
阅读全文