资源简介
用于蓝牙定位里指纹库的建立,基于MATLAB进行仿真,随机生成路径并添加噪声,通过去燥进行定位 精度达2米
代码片段和文件信息
function Power_all = get_rss_by_ray_tracing(room_x room_y room_z source_x source_y source_z grid_size f)
% 射线跟踪: 输入房间大小,信号源的坐标,设置网格大小和信号频率,输出每个网格点上接收到的信号强度
% 输入参数分别为:房间尺寸x, y, z,信号源(天线)坐标(x, y, z),网格大小(输出数据的密度),单位(m);信号的发射频率,单位(MHz)
if nargin == 0 %无输入参数时的默认设置
room_x = 20;
room_y = 15;
room_z = 4;
source_x = 10;
source_y = 7.5;
source_z = 1;
grid_size = 0.1;
f = 2400;
end
room_x = 1000 * room_x;
room_y = 1000 * room_y;
room_z = 1000 * room_z;
source_x = 1000 * source_x;
source_y = 1000 * source_y;
source_z = 1000 * source_z;
grid_size = 1000 * grid_size;
%介电常数和导电系数,参考射线跟踪相关的论文
epsilon_c=10-1.2j;
epsilon_w=6.1-1.2j;
% epsilon_c=7.9-0.89j;
% epsilon_w=6.2-0.69j;
if room_x * room_y / grid_size^2 > 100000000
disp(‘提示:程序使用大矩阵同时计算所有位置点上的信号强度,位置点设置的过多可能导致内存不足,matlab可能会卡死。‘);
input(‘继续请回车;退出请ctrl+c‘);
end
T = 1 / (f * 10^6);
c = 3.0e8;
lambda=c / (f * 10^6);
%得到空间中所有的网格点位置坐标把z固定,和信号源一个高度
[X Y] = meshgrid(grid_size:grid_size:(room_x-grid_size) grid_size:grid_size:(room_y-grid_size));
L = [X(:) Y(:)];
L = [L zeros(size(X(:))) + source_z];
%% 直射路径
%将反射引起的相位变化加入电场E的计算里面。后面注释所说的相位只是由于距离引起的相位。
d_direct = sqrt((L(:1) - source_x).^2 + (L(:2)-source_y).^2 + (L(:3) - source_z).^2);%每个网格点距发射源的欧式距离
t_direct_0 = d_direct./1000./c;%直射时延
p_direct = mod(t_direct_0*2*pi/T2*pi);%直射相位
E_direct = (lambda./(4.*pi.*d_direct./1000));%这里和下面的E不一定正好是场强大小,但和场强成正比
E0=E_direct.* exp(1i.*(-p_direct));
%%
%上面计算的L为所有网格点的坐标。每行为一组坐标。
%下面的Li相应的为所有网格点所对应的镜像点
%下面对六组反射路径分别计算
%% 前平面反射路径(前后左右上下的意思是:人站才这个长方体中,面朝y轴,这时的六个面分别称为前后左右上下)
Li=[L(:1) 2.*room_y-L(:2) L(:3)]; %计算镜像点
d_reflect = sqrt((Li(:1)-source_x).^2+(Li(:2)-source_y).^2+(Li(:3)-source_z).^2);%反射路径总长度
t_reflect_1 = d_reflect./1000./c;%时延
p_reflect = mod(t_reflect_1*2*pi/T2*pi);%相位
thet = abs(atan((Li(:2)-source_y)./(Li(:1)-source_x)));%入射角
reflect_coefficient = (sin(thet)-sqrt(epsilon_w-(cos(thet)).^2))./(sin(thet)+sqrt(epsilon_w-(cos(thet)).^2));%反射系数也是矩阵
E_reflect = (lambda./(4.*pi.*d_reflect./1000)) .* reflect_coefficient;
E1=E_reflect .* exp(1i.*(-p_reflect));%将延迟的相位加进来,与反射造成的衰减与相位变化合在一起。
%% 后平面反射路径
Li=[L(:1) -L(:2) L(:3)]; %计算镜像点
d_reflect = sqrt((Li(:1)-source_x).^2+(Li(:2)-source_y).^2+(Li(:3)-source_z).^2);%反射路径总长度
t_reflect_2 = d_reflect./1000./c;%时延
p_reflect = mod(t_reflect_2*2*pi/T2*pi);%相位
thet = abs(atan((Li(:2)-source_y)./(Li(:1)-source_x)));%入射角
reflect_coefficient = (sin(thet)-sqrt(epsilon_w-(cos(thet)).^2))./(sin(thet)+sqrt(epsilon_w-(cos(thet)).^2));
E_reflect = (lambda./(4.*pi.*d_reflect./1000)) .* reflect_coefficient;
E2=E_reflect .* exp(1i.*(-p_reflect));%将延迟的相位加进来,与反射造成的衰减与相位变化合在一起。
- 上一篇:白噪声simuli
nk模型 - 下一篇:图像性能指标matlab版本
相关资源
- 四旋翼MATLAB仿真文件+实验报告
- 串行级联cpm系统MATLAB仿真
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
评论
共有 条评论