Hackrf_One_Lesson4

文章目录

  • Lesson4
    • Complex number
    • 关于复数的编程练习
    • 将AM、FM用复数的概念进行分析

Lesson4

Complex number

Python中把 j 当作虚数单位

该节对复数讲解相当精彩,未做多余的笔记

Hackrf_One_Lesson4_第1张图片

信号源发出的并不是cos波,而是复数型指数函数

Hackrf_One_Lesson4_第2张图片

上下依次相加最后点都落在x轴上,这些点连起来实则为cos函数,也就是cos相当于两个频率相反的复指数相加再除以2,因为cos的幅度大小是复数的模的两倍。图形上得到的结论刚好与欧拉公式一致

Hackrf_One_Lesson4_第3张图片

Hackrf_One_Lesson4_第4张图片

奈奎斯特采样定义,fs>2f。注意这种说法用于实信号,因为实信号只有一半的带宽有效

采样率=信号带宽,使用条件是复数信号。现在rtl-sdr和hackrf都是这样 叫做 quadrature sampling system

高频信号都会有低频的对应。(通过摄像机(帧率=采样率)看飞机螺旋桨转速很高(高频)但看上去很慢(低频))



Hackrf_One_Lesson4_第5张图片


关于复数的编程练习

  1. 气象站每分钟测量一次风向。编写程序 以指示五分钟内的平均方向。在 以下几组读数:
    • 12°, 15°, 13°, 9°, 16°
    • 358°, 1°, 359°, 355°, 2°
    • 210°, 290°, 10°, 90°, 170°
  2. 修改程序以处理风速输入以及方向。
  3. 利用图像显示结果
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)))) #取了各个方向上的向量,因此在最后输出角度上的量对应大小很小

Hackrf_One_Lesson4_第6张图片

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()

Hackrf_One_Lesson4_第7张图片

将AM、FM用复数的概念进行分析

这部分对AM、FM的调制解调讲解的很新颖,值得回味

你可能感兴趣的:(GNU,Radio,HackRF,射频工程,信号处理,学习,信息与通信)