题目
自己构造一个复数序列。
(a) 画出该复数序列的傅里叶变换的实部和虚部,看看是否具有对称性。
(b) 画出该序列的实部和虚部的傅里叶变换的实部和虚部,看看是否具有对称性。
(c) 比较(a) 和 (b) 的结果,验证二者之间的关系。
结论:
(a)
复数序列的傅里叶变换的实部和虚部都不具有对称性。
(b)
实部的傅里叶变换的实部关于纵轴轴对称;
实部的傅里叶变换的虚部关于原点中心对称。
虚部的傅里叶变换的实部关于纵轴轴对称;
虚部的傅里叶变换的虚部关于原点中心对称。
(c)
由于:
X
(
e
j
ω
)
=
∑
n
=
−
∞
∞
x
(
n
)
e
−
j
ω
n
且
e
−
j
ω
n
=
c
o
s
(
ω
n
)
−
j
s
i
n
(
ω
n
)
X\left(e^{j \omega}\right)=\sum_{n=-\infty}^{\infty} x(n) e^{-j \omega n}\\ 且e^{-j \omega n} = cos(\omega n)-jsin(\omega n)
X(ejω)=n=−∞∑∞x(n)e−jωn且e−jωn=cos(ωn)−jsin(ωn)
因此,对于任意实数序列,其傅里叶变换的实部为偶函数,虚部为奇函数。故可验证**(b)**。
设序列为x[n],实部为r[n],虚部为i[n],则:
x
[
n
]
=
r
[
n
]
+
j
i
[
n
]
x[n]=r[n]+ji[n]
x[n]=r[n]+ji[n]
设实部的傅里叶变换为:
R
(
e
j
ω
)
=
R
r
+
j
R
i
(
其中
R
r
、
R
i
是实数
)
R(e^{j\omega})=R_r+jR_i(其中R_r、R_i是实数)
R(ejω)=Rr+jRi(其中Rr、Ri是实数)
设虚部的傅里叶变为:
I
(
e
j
ω
)
=
I
r
+
j
I
i
(
其中
I
r
、
I
i
是实数
)
I(e^{j\omega})=I_r+jI_i(其中I_r、I_i是实数)
I(ejω)=Ir+jIi(其中Ir、Ii是实数)
那么复数序列的傅里叶变换满足:
X
(
e
j
ω
)
=
R
(
e
j
ω
)
+
j
I
(
e
j
ω
)
=
(
R
r
+
j
R
i
)
+
j
(
I
r
+
j
I
i
)
=
(
R
r
−
I
i
)
+
j
(
R
i
+
I
r
)
\begin{aligned} X(e^{j\omega}) &= R(e^{j\omega})+jI(e^{j\omega}) \\ &=(R_r+jR_i)+j(I_r+jI_i)\\ &=(R_r-I_i)+j(R_i+I_r) \end{aligned}
X(ejω)=R(ejω)+jI(ejω)=(Rr+jRi)+j(Ir+jIi)=(Rr−Ii)+j(Ri+Ir)
即:
复数序列傅里叶变换的实部 = 序列实部傅里叶变换的实部 - 序列虚部傅里叶变换的虚部
复数序列傅里叶变换的虚部 = 序列实部傅里叶变换的虚部 + 序列虚部傅里叶变换的实部
由于一个偶函数与一个奇函数相加或相减不一定还具有对称性,故可验证**(a)**。
解题过程:
1.生成数据:
python随机生成12个复数:
0.2259053 +0.19221032j | 0.14861288+0.83786972j | 0.1041318 +0.17227417j |
---|---|---|
0.67680176+0.40323321j | 0.30949007+0.49984603j | 0.60104535+0.56580997j |
0.79662444+0.53144529j | 0.5672216 +0.09115468j | 0.89854002+0.61094691j |
0.63207494+0.99955691j | 0.40820663+0.114274j | 0.26579465+0.4291581j |
2.绘制图像
相关代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 使用微软雅黑字体
# 生成复数序列
def generat(N):
# 生成随机的实部和虚部
x_r = np.random.rand(N) # 生成实数部分
x_i = np.random.rand(N) # 生成虚数部分
# 创建复数序列
x = x_r + 1j * x_i
# 打印生成的复数序列
print("生成的复数序列:")
print(x)
return x
# 计算离散傅里叶变换
def FT(w, x):
X = 0
for n in range(N):
X += x[n] * np.exp(-1j * w * n)
return X
# 绘图
def draw(w, X, title):
# 创建一个图形对象
plt.figure(figsize=(8, 4))
# 绘制函数图像
plt.plot(w, X.real, label="Re", color="red")
plt.plot(w, X.imag, label="Im", color="blue")
# 添加标签和标题
plt.xlabel(r'$\omega$')
plt.ylabel("傅里叶变换实部或虚部值")
plt.title(title)
plt.legend()
plt.axhline(0, color='black', linewidth=2) # 加粗 x=0
plt.axvline(0, color='black', linewidth=2) # 加粗 y=0
# 保存图形
plt.grid(True)
plt.savefig(title+".png")
# 关闭图形对象
plt.close()
N = 12
x = generat(N)
# 频域范围
w = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
draw(w, FT(w, x), "复数序列的傅里叶变换")
draw(w, FT(w, x.real), "序列实部的傅里叶变换")
draw(w, FT(w, x.imag), "序列虚部序列的傅里叶变换")