Python中把 j 当作虚数单位
该节对复数讲解相当精彩,未做多余的笔记
信号源发出的并不是cos波,而是复数型指数函数
上下依次相加最后点都落在x轴上,这些点连起来实则为cos函数,也就是cos相当于两个频率相反的复指数相加再除以2,因为cos的幅度大小是复数的模的两倍。图形上得到的结论刚好与欧拉公式一致
奈奎斯特采样定义,fs>2f。注意这种说法用于实信号,因为实信号只有一半的带宽有效
采样率=信号带宽,使用条件是复数信号。现在rtl-sdr和hackrf都是这样 叫做 quadrature sampling system
高频信号都会有低频的对应。(通过摄像机(帧率=采样率)看飞机螺旋桨转速很高(高频)但看上去很慢(低频))
import cmath #复数运算的包
import math
tau = 2 * math.pi #定义τ
def average(readings):
base = math.e ** (1j * tau /360) #base是e的指数,1j为复数单位,即base在单位圆上,与纵轴正向夹角1弧度。
# 指数乘以τ再除以360相当于把整个圆粉分成360份
total = 0
for r in readings:
total += base ** r #每次相加的是角度r对应的复数,例r=1,即单位圆上横轴夹角为1的点的复数
result = total /len(readings) #先求向量平均然后取对数得到角度
return cmath.log(result,base).real#返回值直接返回一个角度,是一个实数。
# cmath.log对结果进行对数运算,即用base的指数函数其指数表示角度来得到对应复平面上的点,如果有了这个点,取对数就能获得角度
print(average((12,15,13,9,16)))
print(average((358,1,359,355,2)))
#增加一个风速
def average(readings):
base = math.e ** (1j * tau /360)
total = 0
for r in readings:
total += r[1]*base ** r[0] #增加系数
result = total /len(readings)
return cmath.log(result,base).real
print(average(((12,1),(15,1),(13,1),(9,1),(16,1))))
print(average(((12,1),(15,1),(13,1),(9,10),(16,1))))
#将风速值返回
def average(readings):
base = math.e ** (1j * tau /360)
total = 0
for r in readings:
total += r[1]*base ** r[0] #增加系数
result = total /len(readings)
return cmath.log(result,base).real,abs(result) #对平均值向量取abs得到模就是风速的平均大小
print(average(((12,1),(15,1),(13,1),(9,1),(16,1))))
print(average(((12,1),(15,1),(13,1),(9,10),(16,1)))) #在9°的方向风速增强,影响最后得到的量
print(average(((210,1),(290,1),(10,1),(90,1),(170,1)))) #取了各个方向上的向量,因此在最后输出角度上的量对应大小很小
import cmath #复数运算的包
import math
from matplotlib.pylab import *
tau = 2 * math.pi #定义τ
def average(readings):
base = math.e ** (1j * tau /360)
total = 0
for r in readings:
v = r[1] * base **r[0]
total += v
arrow(0,0,v.real,v.imag,head_width=0.05,head_length=0.05,fc='r',ec='r')
result = total /len(readings)
arrow(0,0,result.real,result.imag,head_width=0.05,head_length=0.05,fc='b',ec='b')
xlim(-1.5,1.5)
ylim(-1.5,1.5)
xlabel('Real')
ylabel('Imaginary')
return (cmath.log(result,base).real,abs(result))
#average(((12,1),(15,1),(13,1),(9,1),(16,1)))
#average(((12,1),(15,1),(13,1),(9,10),(16,1))) #在9°的方向风速增强,影响最后得到的量
average(((210,1),(290,1),(10,1),(90,1),(170,1))) #取了各个方向上的向量,因此在最后输出角度上的量对应大小很小
plt.show()
这部分对AM、FM的调制解调讲解的很新颖,值得回味