You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Friis自由空间方程绘制收发距离与接收信号强度图时dBm值异常求助

解决Friis自由空间方程接收功率dBm转换错误的问题

嘿,我仔细看了你的代码,发现几个关键问题导致接收功率(PR)的dBm数值不对,咱们一步步来修正这些问题:

1. 波长计算逻辑错误

你现在的代码里直接把波长的计算结果平方了,这不符合Friis公式的正确形式。Friis公式要求的是**(波长/(4πd))的平方**,而不是先把波长平方。正确的波长计算应该是先算出实际波长,再代入公式:

lambda = 3e8 / f; % 先计算波长(单位:米)

而不是你写的Wavelength = (3*10^8/f).^2;,这一步错误会让后续的接收功率计算完全偏离真实值。

2. dBm转换用错了对数函数

Matlab里的log()是自然对数(ln),但dB的计算必须用以10为底的对数,也就是log10()。你当前的转换代码:

PR1 = 10*log(PR/(10*10.^-3)) ;

得改成这样:

PR1 = 10*log10(PR / 1e-3); % 1e-3是1毫瓦,对应dBm的基准功率

另外,10*10.^-3可以简化成1e-3,代码看起来更清爽。

3. 距离单位的一致性问题

你的图表xlabel标注的是“D (distance in Km)”,但代码里的d = 1:0.1:20如果是米的话,就会出现单位不匹配的问题。Friis公式里的距离和波长单位必须统一(都用米),所以要么把d转换成千米,要么把d的数值转换成米来计算:

% 比如如果d原本是米,转换成千米用于图表显示
d_km = d ./ 1000;
% 或者直接定义千米单位的d,再转成米用于计算
d_km = 0.001:0.0001:0.02;
d_m = d_km * 1000;

单位不统一的话,计算出来的功率值肯定不对。

修正后的完整代码

clc; close all; clear all; 

% 参数定义,统一单位
d_km = 0.001:0.0001:0.02; % 1米到20米,以千米为单位用于图表
d_m = d_km * 1000; % 转换成米,和波长单位一致
f = 2100e6; % 2100MHz,用科学计数法更直观
lambda = 3e8 / f; % 计算波长(米)
PT = 50.12; % 发射功率(瓦)

% 正确计算接收功率(瓦)
PR = PT * (lambda ./ (4*pi*d_m)).^2; 

% 转换为dBm单位
PR_dBm = 10*log10(PR / 1e-3); 

% 绘制双图对比
subplot(2,1,1); 
plot(d_km, PR); 
xlabel('Distance (Km)'); 
ylabel('Received Power (W)');
title('Received Power in Watts vs Distance');

subplot(2,1,2);
plot(d_km, PR_dBm);
xlabel('Distance (Km)');
ylabel('Received Power (dBm)');
title('Received Power in dBm vs Distance');

结果验证

修正后,你会看到:

  • 功率(瓦)随距离增加呈平方反比下降
  • 转换为dBm后,功率随距离增加呈线性下降(对数把平方反比关系转换成了线性关系)
    这完全符合Friis自由空间传播模型的预期。

内容的提问来源于stack exchange,提问作者Yashlin Naidoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:31:16