毫米波与太赫兹:使用matlab RF propagation进行电波仿真可视化

使用Matlab RF propagation 工具箱进行电波传播的仿真和可视化显示,并对结果进行分析。

仿真场景自定义;天线参数自定义;频率选择移动通信典型频段,或未来移动通信规划频段。

课程设计报告参考标准学术期刊论文格式.

设计代码1如下:(一步一步的运行,否则得不了四个图)

%载入地图:导入可视化建组模型数据(模拟密集城市环境中的小区场景)
viewer = siteviewer("Buildings","canarywharf.osm","Basemap","topographic");

%定义发射站点
% 经度:51.50375
% 维度:-0.01843
% 基站天线高度:20m
% 基站天线电压:5V
% 工作频率28e9
tx = txsite("Name","小型发射基站", ...
    "Latitude",51.50375, ...
    "Longitude",-0.01843, ...
    "AntennaHeight",20, ...
    "TransmitterPower",5, ...
    "TransmitterFrequency",28e9);
show(tx)

%----------------------单次反射-------------------%
%1
%定义视线传播覆盖区域
%使用SBR对光线进行追踪
%默认最大反射次数为:0
%设置建筑和地形材料为理想模型(满足理想全反射)
rtpm = propagationModel("raytracing", ...
    "Method","sbr", ...
    "MaxNumReflections",0, ...
    "BuildingsMaterial","perfect-reflector", ...
    "TerrainMaterial","perfect-reflector");
%设置信号强度
%查看距离基站300米的最大范围的相应覆盖地图
%信号增益:3
%透明度:0.6
coverage(tx,rtpm, ...
    "SignalStrengths",-100:-5, ...
    "MaxRange",300, ...
    "Resolution",3, ...
    "Transparency",0.6)

%定义在非视线位置接收器站点
%经度:51.50216
%维度:-0.01769
%基站高度:5m
rx = rxsite("Name","小型接收基站", ...
    "Latitude",51.50216, ...
    "Longitude",-0.01769, ...
    "AntennaHeight",5);
los(tx,rx)


%设置最大反射次数为:1
%raytrace:设置接受站点tx到接收机站点rx的传播路径,利用光线追踪
rtpm.MaxNumReflections = 1;
clearMap(viewer)
raytrace(tx,rx,rtpm)

%--------------------------多次反射--------------%
%2
%分析信号强度和材料效应
%计算建筑和地形材料为理想模型的完美反射的接受功率
ss = sigstrength(rx,tx,rtpm);
disp("使用完美反射的接收功率: " + ss + " dBm")


%设置建筑和地形材料为真实材料:钢筋混泥土
rtpm.BuildingsMaterial = "concrete";
rtpm.TerrainMaterial = "concrete";
%raytrace:设置接受站点tx到接收机站点rx的传播路径,利用光线追踪
%分析信号强度和材料效应
%计算建筑和地形材料为真实材料:钢筋混泥土的实际反射的接受功率
raytrace(tx,rx,rtpm)
ss = sigstrength(rx,tx,rtpm);
disp("使用混凝土材料的接收功率:" + ss + " dBm")
%考虑天气对信号的损失
rtPlusWeather = ...
    rtpm + propagationModel("gas") + propagationModel("rain");
%raytrace:设置接受站点tx到接收机站点rx的传播路径,利用光线追踪
raytrace(tx,rx,rtPlusWeather)
ss = sigstrength(rx,tx,rtPlusWeather);
%计算在天气损失在信号传播的接受功率
disp("接收功率(包括天气损失): " + ss + " dBm")
%打印最大的反射传播路径:2
%设置天线类型:矮天线
rtPlusWeather.PropagationModels(1).MaxNumReflections = 3;
rtPlusWeather.PropagationModels(1).AngularSeparation = "low";
ss = sigstrength(rx,tx,rtPlusWeather);
disp("具有两个反射路径的接收功率: " + ss + " dBm")
clearMap(viewer)
raytrace(tx,rx,rtPlusWeather)



%使用单反射路径查看覆盖图
%使用配置的传播模型,重新生成包含单反射路径和天气损害的覆盖图。
rtPlusWeather.PropagationModels(1).MaxNumReflections = 4;
clearMap(viewer)

show(tx)
coverageResults = load("coverageResults.mat");
contour(coverageResults.propDataSingleRef, ...
   "Type","power", ...
   "Transparency",0.6)

tx.Antenna = helperM2412PhasedArray(tx.TransmitterFrequency);
tx.AntennaAngle = -90;

clearMap(viewer)
show(rx)
pattern(tx,"Transparency",0.6)
hide(tx)

rtPlusWeather.PropagationModels(1).MaxNumReflections = 1;
ray = raytrace(tx,rx,rtPlusWeather);
disp(ray{1})

aod = ray{1}.AngleOfDeparture;
steeringaz = wrapTo180(aod(1)-tx.AntennaAngle(1));
steeringVector = phased.SteeringVector("SensorArray",tx.Antenna);
sv = steeringVector(tx.TransmitterFrequency,[steeringaz;aod(2)]);
tx.Antenna.Taper = conj(sv);

pattern(tx,"Transparency",0.6)
raytrace(tx,rx,rtPlusWeather);
hide(tx)
    
ss = sigstrength(rx,tx,rtPlusWeather);
disp("Received power with beam steering: " + ss + " dBm")
% coverage(tx,rtPlusWeather, ...
%     "SignalStrengths",-120:-5, ...
%     "MaxRange", 250, ...
%     "Resolution",2, ...
%     "Transparency",0.6)

 运行最后一行代码之后结果截图:

 设计代码2如下:

%载入地图:导入可视化建组模型数据(模拟密集城市环境中的小区场景)
viewer = siteviewer("Buildings","canarywharf.osm","Basemap","topographic");

%定义发射站点
% 经度:51.50375
% 维度:-0.01843
% 基站天线高度:20m
% 基站天线电压:5V
% 工作频率28e9
tx = txsite("Name","小型发射基站", ...
    "Latitude",51.50375, ...
    "Longitude",-0.01843, ...
    "AntennaHeight",20, ...
    "TransmitterPower",5, ...
    "TransmitterFrequency",28e9);
show(tx)

%--------------------------多次反射--------------%
%2
%分析信号强度和材料效应
%计算建筑和地形材料为理想模型的完美反射的接受功率
ss = sigstrength(rx,tx,rtpm);
disp("使用完美反射的接收功率: " + ss + " dBm")
%设置建筑和地形材料为真实材料:钢筋混泥土
rtpm.BuildingsMaterial = "concrete";
rtpm.TerrainMaterial = "concrete";
%raytrace:设置接受站点tx到接收机站点rx的传播路径,利用光线追踪
%分析信号强度和材料效应
%计算建筑和地形材料为真实材料:钢筋混泥土的实际反射的接受功率
raytrace(tx,rx,rtpm)
ss = sigstrength(rx,tx,rtpm);
disp("使用混凝土材料的接收功率:" + ss + " dBm")
%考虑天气对信号的损失
rtPlusWeather = ...
    rtpm + propagationModel("gas") + propagationModel("rain");
%raytrace:设置接受站点tx到接收机站点rx的传播路径,利用光线追踪
raytrace(tx,rx,rtPlusWeather)
ss = sigstrength(rx,tx,rtPlusWeather);
%计算在天气损失在信号传播的接受功率
disp("接收功率(包括天气损失): " + ss + " dBm")
%打印最大的反射传播路径:2
%设置天线类型:矮天线
rtPlusWeather.PropagationModels(1).MaxNumReflections = 3;
rtPlusWeather.PropagationModels(1).AngularSeparation = "low";
ss = sigstrength(rx,tx,rtPlusWeather);
disp("具有两个反射路径的接收功率: " + ss + " dBm")
clearMap(viewer)
raytrace(tx,rx,rtPlusWeather)


%使用单反射路径查看覆盖图
%使用配置的传播模型,重新生成包含单反射路径和天气损害的覆盖图。
rtPlusWeather.PropagationModels(1).MaxNumReflections = 1;
clearMap(viewer)

show(tx)
coverageResults = load("coverageResults.mat");
contour(coverageResults.propDataSingleRef, ...
    "Type","power", ...
    "Transparency",0.6)

运行最后一行代码之后结果截图:

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
以下是一个使用Matlab进行三维空间中线极化均匀平面波仿真的示例代码,包含电场分量,合成电场,磁场和电磁波传播方向: ```matlab % 定义仿真空间 [x,y,z] = meshgrid(-1:0.1:1,-1:0.1:1,-1:0.1:1); % 定义波源参数 wavelength = 0.1; % 波长 k = 2*pi/wavelength; % 波数 E0 = [1,0,0]; % 电场幅值 theta = pi/4; % 极化角度 phi = pi/4; % 入射角度 kx = k*sin(phi)*cos(theta); % 波矢x分量 ky = k*sin(phi)*sin(theta); % 波矢y分量 kz = k*cos(phi); % 波矢z分量 % 计算电场分量 Ex = E0(1)*cos(kx*x).*cos(ky*y).*cos(kz*z); Ey = E0(2)*sin(kx*x).*sin(ky*y).*cos(kz*z); Ez = E0(3)*cos(kx*x).*sin(ky*y).*sin(kz*z); % 计算合成电场 E = sqrt(Ex.^2 + Ey.^2 + Ez.^2); % 计算磁场 mu0 = 4*pi*1e-7; % 真空磁导率 Bx = ky*Ez/mu0/k; By = -kx*Ez/mu0/k; Bz = (kx*Ey - ky*Ex)/mu0/k; % 计算电磁波传播方向 Ex_fft = fftn(Ex); Ey_fft = fftn(Ey); Ez_fft = fftn(Ez); kx_fft = ifftshift(-1/2:1/2/size(x,1):1/2-1/2/size(x,1)); ky_fft = ifftshift(-1/2:1/2/size(x,2):1/2-1/2/size(x,2)); kz_fft = ifftshift(-1/2:1/2/size(x,3):1/2-1/2/size(x,3)); [KX,KY,KZ] = ndgrid(kx_fft,ky_fft,kz_fft); K = sqrt(KX.^2 + KY.^2 + KZ.^2); Kx = KX./K; Ky = KY./K; Kz = KZ./K; Ex_fft = Ex_fft.*Kx; Ey_fft = Ey_fft.*Ky; Ez_fft = Ez_fft.*Kz; Ex_fft = ifftn(Ex_fft); Ey_fft = ifftn(Ey_fft); Ez_fft = ifftn(Ez_fft); Ex_fft = Ex_fft/max(abs(Ex_fft(:))); Ey_fft = Ey_fft/max(abs(Ey_fft(:))); Ez_fft = Ez_fft/max(abs(Ez_fft(:))); E_fft = sqrt(Ex_fft.^2 + Ey_fft.^2 + Ez_fft.^2); theta_fft = acos(Kz); phi_fft = atan2(Ky,Kx); % 绘制电磁场和电磁波传播方向 figure; subplot(2,2,1); quiver3(x,y,z,Ex,Ey,Ez); title('Electric field'); xlabel('x'); ylabel('y'); zlabel('z'); axis equal; subplot(2,2,2); quiver3(x,y,z,Bx,By,Bz); title('Magnetic field'); xlabel('x'); ylabel('y'); zlabel('z'); axis equal; subplot(2,2,3); isosurface(x,y,z,E,0.5); title('Electric field magnitude'); xlabel('x'); ylabel('y'); zlabel('z'); axis equal; subplot(2,2,4); quiver3(KX,KY,KZ,Ex_fft,Ey_fft,Ez_fft); title('Electromagnetic wave propagation direction'); xlabel('k_x'); ylabel('k_y'); zlabel('k_z'); axis equal; ``` 在上述代码中,首先利用meshgrid函数定义了一个三维空间的网格点,然后根据波源参数计算了电场分量、合成电场和磁场。最后,利用fftn函数计算了电磁波在频域中的传播方向,并利用quiver3函数和isosurface函数绘制了电磁场和电磁波传播方向的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

best_mimo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值