?前言:
??
??Beamforming 是MIMO?技术里面的核心技术之一,所以讲MIMO 必须对Beamforming
有所了解,本篇主要了解一下beamforming
【MIMO 从入门到精通】[P6]【What is Beamforming?】-CSDN博客
本章主要通过数学公式 讨论一下 天线距离对 beamforming 的影响大小
一? 模型
? 如上图,双接收天线场景:
? ?信号先到达天线2?
?1.1? ? 预置条件
? ? ? ? ?接收天线1 和 接收天线2 之间的距离为d
? ? ? ? ? 电磁波的波长为
? ? ? ? ? 电磁波 周期
? ? ? ? ? 则时间延时为
? ? ? ? ? ??
1.2? 不同天线上面的输出
? ? ? ? ? ?如果不加延时器: 不同天线上权重系数为:
? ? ? ? ? ?
? ? ? ? ? ? ?: 天线个数
? ? ? ? ? ? 第一根天线
? ? ? ? ? ? ??
? ? ? ? ? ? 第二根天线
? ? ? ? ? ? ? ?(通过欧拉公式展开??
? ? ? ? ? ?
1.3 加法器输出? ? ?
? ? ? ? ? ? ? 通过加法器得到的信号为(下面例子只取其实部)
? ? ? ? ? ? ?
1.4? 例子:
? ? ? ? ? ? ?假设频率为 2500MHz
? ? ? ? ? ? ?波长为?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ?下面图像为不同antennas 数量,不同的间隔,不加延时电路后输出效果:
? ?
? ?
? 结论:
? ? 1: ?度的时候,输出信号幅度最强
? ? 2:增加天线距离d 的时候,除了在0度的时候,还会在其它角度会有最强的输出信号,
比如下图 d =0.24的时候,d 越大波束赋形的效果越好
? ?3: 天线数量越多,幅度增强效果越明显
二? 代码实现
?
? ? ? ? ?如下:
? ? ? ? ??
? ? ? ? ??
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 27 12:00:35 2023
@author: chengxf2
"""
import matplotlib.pyplot as plt
import numpy as np
def draw(x,y,RxNum):
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
label = "接收天线:"+str(RxNum)
plt.title(label)
# 绘制的曲线属性设置
line1, = plt.plot(x, y, color='r', marker='d', linestyle='--', markersize=6, alpha=0.5, linewidth=3)
# x,y坐标轴名称设置,可以同时设置标签的字体大小颜色等
plt.xlabel(u'发射源发射角度', fontsize=14, color='r')
plt.ylabel(u'输出的平均功率', fontsize=14, color='b')
# 显示曲线图像
plt.show()
def addAntenna(RxNum,angle,d,Y):
#d 天线之间的距离
#angle 发射源发射的角度
#wavelength 电磁波波长,跟其频率有关系
# 电磁波速度 3*10^8m/s.
#n 第几根天线,第一根天线为基准,这里是不加延时电路
#
#4G网络使用的是频段为700MHz至2.7GHz的波段,对应的波长范围大致为0.1至0.4米。
#5g 特高频(UHF)300 MHz~3000 MHz,对应电磁波的波长为分米波100cm~10 cm。
#5G 超高频(SHF)3 GHz~30 GHz,对应电磁波的波长为厘米波10 cm~1 cm。
#
wavelength =0.06*2
out = np.zeros(len(Y))
T = 2*np.math.pi
for n in range(0,RxNum):
bias_t = (n*T*d*np.sin(angle))/wavelength #相当于公式里面n-1
#print("\n--- n ",n,"\t bias_t",bias_t)
w = np.cos(bias_t)
signal =w*Y
out = out+signal
#print(out)
return out
def receiveWave():
x = np.linspace(0, 2*np.math.pi,100)
y = np.sin(x)
return x,y
def main():
angleList = np.linspace(-np.math.pi/2.0, np.math.pi/2.0,100)
x,y = receiveWave()
RxNum =4
distance = 0.06
powerList =[]
for angle in angleList:
outSingle = addAntenna(RxNum,angle,distance,y)
power = np.power(outSingle,2)
avgpower = np.sum(power)
print("\n angle :%4.3f avg: %4.2f"%(angle,avgpower))
plt.scatter(angle, avgpower)
powerList.append(avgpower)
draw(angleList, powerList,RxNum)
#draw(x,out)
main()
?