三角单边带频谱的时域波形
01 半边带调制
一、前言
在第八次作业中, 有一个半边的调制信号恢复的习题。 下面将通过数值和理论推导的方式获得该下边带调制后的信号波形。 下面先从这个三角波频谱开始进行分析。
二、三角波频谱
下面先推导一下三角频谱对应的时域信号, 对于三角信号来说, 很容易得到它对应的频谱。 然后在根据傅里叶变换的对偶特性, 得到该频谱的时域信号。 为了更好地绘制时域波形, 将频谱中的参数 都修改成1, 这样就可以得到一个比较简洁的时域信号波形了。
这是三角脉冲频谱对应的时域波形, 这里显示了它一是等宽等高方波频谱对应的时域波形之间的转换。 这是对频谱对应的时域波形的理论推导。
from headm import *
t = linspace(-20, 20, 100000)
ft = sinc(t/2/pi)**2/2/pi
ft1 = sinc(t/2/pi)/2/pi*2
plt.plot(t, ft, lw=3)
plt.xlabel("t")
plt.ylabel("f(t)")
plt.grid(False)
plt.axis([min(t)-(max(t)-min(t))/20, max(t)+(max(t)-min(t))/20, -0.20, 0.5])
plt.tight_layout()
plt.show()
gifn = 150
for n in range(gifn):
ratio = n/(gifn-1)
ratio = abs(ratio*2-1)
ftr = ft*ratio + ft1*(1-ratio)
plt.clf()
plt.plot(t, ftr, lw=3)
plt.xlabel("t")
plt.ylabel("f(t)")
plt.grid(False)
plt.axis([min(t)-(max(t)-min(t))/20, max(t)+(max(t)-min(t))/20, -0.20, 0.5])
plt.tight_layout()
plt.draw()
plt.pause(.001)
pltgif.append(plt)
pltgif.save()
printf('\a')
▲ 图1.2.1 三角平铺对应的时域波形
下面使用 IFFT 进行数值计算, 对比理论推导的时域波形。 这里声明三角形频谱。 使用 IFFT 的Python 命令, 计算出帅帅波形。 将数值计算的波形 与理论波形绘制在一起, *可以看到它们重叠在一起。 +验证了这个公式的正确性, 这为后面利用数值计算得到单边带频谱打下基础。
from headm import *
o = linspace(-10000, 10000, 200000)
os = (max(o)-min(o))/(len(o)-1)
t1 = 2*pi/os
o1 = max(o)-min(o)
ts = 2*pi/o1
tdim = linspace(-t1/2,t1/2, len(o))
ftt = sinc(tdim/2/pi)**2/2/pi
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)
Fo = (o+1)*G(o,-1,0) + (1-o)*G(o,0,1)
ft = real(fft.ifft(fft.fftshift(Fo)))
ft = fft.fftshift(ft)/ts
st = where(tdim > -20)[0][0]
ed = where(tdim > 20)[0][0]
plt.plot(tdim[st:ed], ft[st:ed], lw=4, label='IFFT')
plt.plot(tdim[st:ed], ftt[st:ed], lw=1, label='Formular')
plt.legend(loc='upper right')
plt.xlabel("t")
plt.ylabel("f(t)")
plt.grid(True)
plt.tight_layout()
plt.show()
▲ 图1.2.2 数值计算 IFFT计算的结果
·window·
三、单边带频谱
下面考虑下边带信号波形, '既然已经有了前面的数值计算工具, 可以利用 IFFT 来计算时域波形, 那么就使用该工具直接计算出单边带波形。 为了方便, 将图中波形参数修改成简单的数字。 调制的中心在 3 弧度每秒。 这是使用 IFFT 计算出对应的下边带的时域波形。 =那么问题来了, 这个波形究竟是否正确呢? 有一个办法, 那就是同时计算出上边的波形,然后将它们叠加在一起, 看是否可以和调制波形相同。 这里显示了上边带与下边带对应的信号波形。 他们似乎相位相差了 90 °。 应用前面得到的三角脉冲频谱对应的是揣手二型公式, 将它调制在频率为 3 的 cosine 振荡信号上。 这是将得到的调制波形与前面上下边带时域波形的累加进行对比, 可以看到他们的确是相同的。 因此, 这也证明了前面所得到的信号波形是正确的的。 这里给出了前面所得到的各个波形。
▲ 上边带和下边带对应的波形
▲ 图1.3.2 上边带与下边带叠加在一起与调制信号的对比
▲ 图1.3.3 上边带,下边带,叠加信号与调制信号
from headm import *
o = linspace(-10000, 10000, 200000)
os = (max(o)-min(o))/(len(o)-1)
t1 = 2*pi/os
o1 = max(o)-min(o)
ts = 2*pi/o1
tdim = linspace(-t1/2,t1/2, len(o))
ftt = sinc(tdim/2/pi)**2/2/pi*2*cos(3*tdim)
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)
Fo = (-o-2)*G(o,-3,-2) + (o-2)*G(o,2,3)
ft = real(fft.ifft(fft.fftshift(Fo)))
fd = fft.fftshift(ft)/ts
Fo = (o+4)*G(o,-4,-3) + (-o+4)*G(o,3,4)
ft = real(fft.ifft(fft.fftshift(Fo)))
fu = fft.fftshift(ft)/ts
fa = fd+fu
st = where(tdim > -20)[0][0]
ed = where(tdim > 20)[0][0]
plt.plot(tdim[st:ed], fd[st:ed], lw=3, label='SSB Low')
plt.plot(tdim[st:ed], fu[st:ed], lw=3, label='SSB Up')
plt.plot(tdim[st:ed], ftt[st:ed], lw=3, label='AM')
plt.plot(tdim[st:ed], fa[st:ed], lw=1, label='Low+Up')
plt.legend(loc='upper right')
plt.xlabel("t")
plt.ylabel("f(t)")
plt.grid(True)
plt.tight_layout()
plt.show()
※ 总 结 ※
本文对三角脉冲信号的上下单边带调制波形进行了数值仿真, 验证了这些波形的正确性。
三角单边带频谱的时域波形
■ 相关文献链接:
● 相关图表链接: