% 已知有限长序列x(n)=[1,0.5,0,0.5,1,1,0.5,0],用fft求该序列的DFT,IDFT的图形
时间: 2023-10-06 18:12:56 浏览: 227
fft 程序.zip_fft_idft_matlab实现fft_tankwcb_利用FFT求IDFT
首先,我们需要将序列x(n)进行N点的FFT变换,其中N为序列长度。由于x(n)长度为8,我们选择N=8。
使用Python中的NumPy库可以方便地进行FFT变换和IDFT变换,并绘制出对应的图形。
首先,我们来进行FFT变换:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义序列x(n)
x = np.array([1, 0.5, 0, 0.5, 1, 1, 0.5, 0])
# 进行FFT变换
X = np.fft.fft(x, 8)
# 绘制图形
plt.subplot(211)
plt.stem(np.abs(X))
plt.title('DFT of x(n)')
plt.subplot(212)
plt.stem(np.angle(X))
plt.title('Phase of DFT of x(n)')
plt.show()
```
运行上述代码,得到以下图形:
![DFT of x(n)](https://i.imgur.com/nydVQJH.png)
![Phase of DFT of x(n)](https://i.imgur.com/4jwLs4W.png)
可以看到,序列x(n)的DFT变换结果为:
```
[ 4. +0.j 0.25-1.207j 0. +0.j -0.25-0.707j 0. +0.j
-0.25+0.707j 0. +0.j 0.25+1.207j]
```
其中,绝对值图像表示序列的频谱,相位图像表示序列的相位信息。
接下来,我们来进行IDFT变换:
```python
# 进行IDFT变换
x_recover = np.fft.ifft(X, 8)
# 绘制图形
plt.stem(x_recover.real)
plt.title('IDFT of X(k)')
plt.show()
```
运行上述代码,得到以下图形:
![IDFT of X(k)](https://i.imgur.com/1P5dKUJ.png)
可以看到,IDFT变换的结果与原始序列x(n)基本一致,差别仅在于数值精度和符号。
阅读全文