01 第六次作业


一、习题简介

  在第六次作业中, 包括有四个习题,要求对已知信号频谱进行傅里叶反变换,求取信号的时域波形。 其中有三个频谱是给出了幅度谱和相位谱, 有一个习题则是给出了频谱的表达式。 在求解的过程中可以直接通过傅里叶变换变公式进行求解, 也可以通过傅里叶变换的性质完成求解。

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_音视频

二、习题求解

1、第一题

  第一小题的频谱是通过幅度谱和相位谱给定的。 直接应用傅里叶变换公式,  求解信号时域表达式 f(t)。 根据频谱的左边波形, 可以写作 A 乘以 e 的 j 四分之Pi 次方。 右边的频谱 可以写作 A 乘以 e 的 负j 四分之Pi。  同时对两个频谱进行傅里叶反变换。  结果相加便可以得到 f(t)。 对于第一项, 对其进行积分, 写出对应指数原函数, 进行求解之后得到积分结果。 化简一些对应的表达式。 对于第二项, 遵循相同的步骤, 可以得到它的表达式。 它们的系数相同,  合并两项, 对这个结果进一步化简,  便可以得到sine 的函数, 化简表达式。  最后得到 f(t) 的最终表达式。 这是第一小题的解答。

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_python 对频谱进行傅里叶逆变换_02


  这是绘制出 f(t) 的波形。可以看到它是在原来的 sinc 函数的基础上,有了往右的平移变化。 为了验证上述公式的正确性, 这里使用快速傅里叶变换直接对频谱采样后的数值进行反变换, 得到了对应的时域波形。 将它和公式波形绘制在一起, 可以看到大部分区域是重叠的, 只是在远离 0 点时对应的曲线有误差。 这里对项频中左右的相位进行改变, 从 0 变化到 二分之 Pi, 更加清晰的看到, 由于相位的引入, 信号从最初的 sinc 函数逐步偏移变化的情况。 直到相位变化到二分之 Pi, 这个波形相当于对 sinc 波形做了一次 希尔伯特变换。

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_算法_03

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2023-04-07
#
# Note:
#============================================================
from headm import *
def G(t, startn, endn):
    return heaviside(t-startn,0.5)-heaviside(t-endn,0.5)
def Gt(t, center, width):
    startn = center-width/2
    endn = startn + width
    return heaviside(t-startn,0.5)-heaviside(t-endn,0.5)
#------------------------------------------------------------
thetadim = linspace(0, pi/2, 100)
t = linspace(-20,20,10000)
for theta in thetadim:
    ft = (G(t,-pi,0)-G(t,0,pi))* theta
    ft1 = 1/pi/t*(sin(theta)+sin(pi*t-theta))
    plt.clf()
    plt.plot(t, ft, lw=2, label='Phi(omega)')
    plt.plot(t, ft1, lw=3, label='f(t)')
    plt.xlabel("omega")
    plt.ylabel("Phi(omega)")
    plt.title('Theta:%5.2f'%theta)
    #plt.grid(True)
    plt.axis([min(t)-(max(t)-min(t))/20, max(t)+(max(t)-min(t))/20, -1.60, 1.60])
    plt.legend(loc="upper right")
    plt.tight_layout()
    plt.draw()
    plt.pause(.1)
    pltgif.append(plt)
pltgif.save()
printf('\a')
#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_人工智能_04


▲ 图1.2.1 不同Theta下对应的波形


2、第二题

  第二小题给出了信号频谱的表达式,  与其直接代入公式进行计算, 不如将表达式进行饮食分解。 这样就形成了几个常见到信号频谱的叠加。 第一项对应的常量 4, 第二项对应的右边指数信号 e 的 负 2 t 次方, 第三个对应 e 的 负 5 t 次方。 将它们叠加起来就是信号 f(t) 的表达式。 这是利用了傅里叶变换的线性特性。 比直接使用傅里叶反变换公式更加简单。 这里给出了 f(t) 的波形, 请注意它的基线是 4 的常量。
python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_人工智能_05

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_ide_06


▲ 图1.2.2 求解结果


#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST2.PY                     -- by Dr. ZhuoQing 2023-04-07
#
# Note:
#============================================================
from headm import *
t = linspace(-1, 5, 1000)
def G(t, startn, endn):
    return heaviside(t-startn,0.5)-heaviside(t-endn,0.5)
def Gt(t, center, width):
    startn = center-width/2
    endn = startn + width
    return heaviside(t-startn,0.5)-heaviside(t-endn,0.5)
ft = 4 + exp(-2*t)*heaviside(t,0.5) - exp(-5*t)*heaviside(t, 0.5)
plt.plot(t, ft, lw=3)
plt.xlabel("t")
plt.ylabel("f(t)")
plt.grid(True)
plt.grid(False)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
#        END OF FILE : TEST2.PY
#============================================================

3、第三题

  第三小题给出了信号的幅度谱和相位谱。  不过这个频谱比较简单, 可以使用在 负 omega 0 到 正 omega 0 之间的一个复指数来表示。 对它进行傅里叶反变换, 合并积分式中的两个指数, 计算这个指数的定积分。 写出对应的原函数, 化简系数。  计算后面的定积分。 在利用欧莱公式将其转换成三角函数,  进行化简, 得到最后的表达式。 这是求出的信号 f(t) 的表达式。  下面绘制出该信号的波形, 这里给出了其中参数 A, omega 0, t0的数值。 从波形上来看, 是 sinc 函数 往右平移了单位 1。 这是第三小题的答案。

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_音视频_07

4、第四题

  第四个小题的频谱有的特别,   它的幅度谱是 1, 相位谱在 omega 为正, 为负时, 分别对应的是 二分之 Pi, 和负二分之 Pi。 因此在 omega 小于 0时, 对应的频谱为 e 的 j 二分之 Pi 次方, 在 omega 大于 0 时, 对应的频谱为 e 的 负 j 二分之 Pi。 根据复指数定义, 它们分表对应 j 与 负 j。 如果两边同时乘以 j, 频谱就会变成正负 1。 所以 这里给出了频谱 乘以 j 之后的表达式, 是关于 omega 的符号函数。 
  下面使用傅里叶变换对偶特性, 来求解符号函数的傅里叶反变换。 已知符号函数的频谱为 j omega 分值 2,  所以 j t 分之二的傅里叶变换就等于 2 Pi sine 负 omega。 sine 函数为奇函数, 将 omega 前面的符号提出来, 根据傅里叶变换线性性, 两边除以 2, 再将 Pi 移到左边, j 移到右边, 便可以得到 Pi t 分之一的傅里叶变换的表达式。 再对照前面 F omega 的表达式, 就会发现, F omega 对应的时域信号就应该是 PI t 分之一。 这就是对于时域信号的表达式,  最终得到了 f(t) 的表达式。
python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_人工智能_08

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_人工智能_09


▲ 图1.2.3 求解结果


 

※ 总


本文对于第六次作业中, 傅里叶反变换的系统进行了讨论。
python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_python 对频谱进行傅里叶逆变换_10

python 对频谱进行傅里叶逆变换 频谱的傅里叶反变换_音视频_11


▲ 图2.1 信号的频谱