室外可见光通信信道建模与MATLAB实现(直射链路与反射链路)
一、直射链路(LOS)建模
1. 核心模型:Lambertian辐射模型
LED光源的辐射特性通过朗伯模型描述,直射链路增益公式为:

MATLAB实现:
matlab
function H_los = los_channel_model(A_r, d, theta, m, T_s, g_s)
% 参数说明:
% A_r: 接收器有效面积 (m²)
% d: 传输距离 (m)
% theta: 发射角 (rad)
% m: 朗伯阶数
% T_s: 光学滤波器透过率
% g_s: 聚光器增益
H_los = (m+1)*A_r/(2*pi*d^2) * cos(theta)^m * cos(theta) * T_s * g_s;
end
2. 大气衰减修正
采用Gamma-Gamma模型模拟大气湍流影响:
matlab
function alpha = atmospheric_attenuation(lambda, visibility)
% lambda: 波长 (nm)
% visibility: 能见度 (km)
q = 1.6; % 默认参数(能见度>50km)
if visibility < 5
q = 0.585 * visibility^(1/3);
elseif visibility <=50
q = 1.3;
end
alpha = 3.91 / visibility * (lambda/550)^(-q); % 衰减系数 (km⁻¹)
end
3. 完整直射链路仿真
matlab
% 参数设置
lambda = 800e-9; % 波长 (m)
visibility = 10; % 能见度 (km)
A_r = 1e-4; % 接收面积 (m²)
d = 50; % 距离 (m)
theta = deg2rad(30); % 发射角
m = 1.5; % 朗伯阶数
T_s = 0.9; % 滤波器透过率
g_s = 1.0; % 聚光器增益
% 计算链路增益
H_los = los_channel_model(A_r, d, theta, m, T_s, g_s);
% 大气衰减修正
alpha = atmospheric_attenuation(lambda*1e9, visibility);
H_los_attenuated = H_los * exp(-alpha * d*1e3); % 转换为米单位
二、反射链路(NLOS)建模
1. 地面反射模型(镜面反射)
假设地面为理想镜面,反射路径增益为:

MATLAB实现:
matlab
function H_nlos = nlos_mirror_model(A_r, d1, d2, theta1, theta2, rho, m)
% 参数说明:
% d1: 发射端到反射面距离 (m)
% d2: 反射面到接收端距离 (m)
% rho: 地面反射率
H_nlos = rho * (m+1)*A_r/(2*pi) * cos(theta1)^m * cos(theta2) / (d1^2 * d2^2);
end
2. 多径反射建模(蒙特卡洛仿真)
模拟多次反射路径的功率分布:
matlab
function [H_nlos_total, delays] = nlos_multipath(A_r, num_paths, max_reflections)
% 参数说明:
% num_paths: 采样路径数
% max_reflections: 最大反射次数
H_nlos_total = zeros(1, num_paths);
delays = zeros(1, num_paths);
for i = 1:num_paths
% 随机生成反射次数和路径参数
n_reflections = randi([1, max_reflections]);
[d1, d2, theta1, theta2, rho] = generate_random_path();
% 计算单路径增益
H = 0;
current_distance = 0;
for j = 1:n_reflections
% 模拟每次反射的几何参数(需自定义生成函数)
[d1_step, d2_step, theta1_step, theta2_step, rho_step] = ...
calculate_reflection_params();
H += rho_step * (m+1)*A_r/(2*pi) * cos(theta1_step)^m * cos(theta2_step) / (d1_step^2 * d2_step^2);
current_distance += d1_step + d2_step;
end
H_nlos_total(i) = H;
delays(i) = current_distance / 3e8; % 延迟时间 (s)
end
end
三、联合信道建模与仿真
1. 总信道响应

MATLAB实现:
matlab
% 直射链路参数
H_los = los_channel_model(A_r, d, theta, m, T_s, g_s);
H_los_attenuated = H_los * exp(-alpha * d*1e3);
% 反射链路参数(示例:1次反射)
[H_nlos, delays] = nlos_multipath(A_r, 1000, 2); % 1000条路径,最大2次反射
% 合并信道响应
H_total = H_los_attenuated + mean(H_nlos); % 简化处理:取平均反射增益
2. 仿真结果可视化
matlab
% 时域信号模拟
t = 0:1e-9:1e-6; % 1μs时间窗口
signal_tx = randi([0,1],1,1000); % 随机二进制信号
signal_rx = filter(H_total, 1, signal_tx); % 信道滤波
% 绘制信道冲激响应
figure;
stem(delays*1e6, H_nlos, 'b', 'LineWidth', 1.5);
hold on;
plot(0, H_los_attenuated, 'ro', 'MarkerSize', 10);
xlabel('延迟 (μs)');
ylabel('幅度');
legend('反射路径', '直射路径');
title('NLOS+LOS联合信道冲激响应');
四、关键参数优化
1. 朗伯阶数(m)计算
根据LED半功率角(θ₁/₂)自动计算:
matlab
function m = calculate_m(theta_half)
m = -log(2) / log(cosd(theta_half/2));
end
% 示例:θ₁/₂=60° → m=1
2. 反射率动态调整
根据地面材质调整反射率(如湿滑地面ρ=0.7,干燥草地ρ=0.2):
matlab
material = 'concrete'; % 可选值:'asphalt', 'grass', 'metal'
switch material
case 'asphalt'
rho = 0.3;
case 'grass'
rho = 0.2;
case 'metal'
rho = 0.8;
end
五、完整代码示例
matlab
%% 室外VLC信道建模(直射+反射链路)
clc; clear; close all;
%% 参数设置
lambda = 800e-9; % 波长 (m)
visibility = 10; % 能见度 (km)
A_r = 1e-4; % 接收面积 (m²)
d = 50; % 直射距离 (m)
theta = deg2rad(30); % 发射角
m = calculate_m(60); % 半功率角60°
T_s = 0.9; % 滤波器透过率
g_s = 1.0; % 聚光器增益
%% 直射链路建模
H_los = los_channel_model(A_r, d, theta, m, T_s, g_s);
alpha = atmospheric_attenuation(lambda*1e9, visibility);
H_los_attenuated = H_los * exp(-alpha * d*1e3);
%% 反射链路建模(1次反射)
[H_nlos, delays] = nlos_multipath(A_r, 1000, 2);
rho = 0.3; % 湿滑地面反射率
H_nlos = rho * H_nlos;
%% 联合信道响应
H_total = H_los_attenuated + mean(H_nlos);
%% 时域仿真
t = 0:1e-9:1e-6;
signal_tx = randi([0,1],1,1000);
signal_rx = filter(H_total, 1, signal_tx);
%% 可视化
figure;
subplot(2,1,1);
stem(delays*1e6, H_nlos, 'b', 'LineWidth', 1.5);
hold on;
plot(0, H_los_attenuated, 'ro', 'MarkerSize', 10);
xlabel('延迟 (μs)');
ylabel('幅度');
title('NLOS+LOS信道冲激响应');
subplot(2,1,2);
plot(t, signal_tx, 'b', t, signal_rx, 'r--');
xlabel('时间 (s)');
ylabel('信号幅度');
legend('发送信号', '接收信号');
title('信道传输效果');
参考代码 室外可见光通信信道建模,直射链路和反射链路建模 www.youwenfan.com/contentcsq/50895.html
六、扩展应用
-
动态环境仿真:加入移动障碍物模型,实时更新反射路径。
-
多用户干扰:模拟多个光源的叠加效应,使用OFDM技术抑制干扰。
-
硬件在环验证:通过Arduino控制LED光源,采集真实光信号验证模型。