如何更改两个节点之间的功率级别?

How do I change the power level between two nodes?

如何通过提高功率级别来减少损耗?

这是我使用的代码: https://github.com/maibewakoofhu/Unet

我正在使用以下方法更改功率级别:

 phy[1].powerLevel = -20.dB;

在噪音水平 68dB,功率水平 = -20dB 所有 DatagramReq 发送成功。

在噪音水平 70dB,功率水平 = -20dB 时,DatagramReq 失败。

现在,将功率电平提高到高达 125dB,DatagramReq 仍然失败。

我创建了一个更简单的模拟版本来测试 SNR 和数据包丢失的关系:

import org.arl.fjage.RealTimePlatform
import org.arl.unet.sim.channels.BasicAcousticChannel

platform = RealTimePlatform

channel = [
  model:                BasicAcousticChannel,
  carrierFrequency:     25.kHz,
  bandwidth:            4096.Hz,
  spreading:            2,
  temperature:          25.C,
  salinity:             35.ppt,
  noiseLevel:           73.dB,
  waterDepth:           1120.m
]

simulate {
    node 'C', address: 31, location: [180.m, 0, -1000.m], web: 8101
    node 'A', address: 21, location: [0.m, 0.m, 0.m], web: 8102
}

web: 条目允许我们与每个节点交互以探索正在发生的事情。我连接到每个节点 (http://localhost:8101/shell.html and http://localhost:8102/shell.html) 和 subscribe phy 以查看所有物理层事件。

现在,我尝试从节点 A 广播帧以查看(在各种功率级别)节点 C 是否收到它们:

> plvl -20
OK
> phy << new TxFrameReq()
AGREE

在节点 C 上,如果成功,您将看到接收:

phy >> RxFrameStartNtf:INFORM[type:CONTROL rxTime:3380134843]
phy >> RxFrameNtf:INFORM[type:CONTROL from:21 rxTime:3380134843]

或者如果不是坏帧:

phy >> RxFrameStartNtf:INFORM[type:CONTROL rxTime:3389688843]
phy >> BadFrameNtf:INFORM[type:CONTROL rxTime:3389688843]

观察: - 在 plvl -20 dB 时,几乎所有帧都会失败。 - 在 plvl -10 dB 时,几乎所有帧都是成功的。 - 在 plvl -16 dB 时,我得到大约 19% 的帧丢失。

所有帧失败到所有成功之间的过渡预计会非常尖锐,这在现实中对于平稳噪声是典型的,因为 FEC 性能往往是非常非线性的。因此,您会预计过渡区域周围的帧丢失率会有很大差异(在此示例中,约为 -16 dB)。

还要注意 plvl 125 dB 无效(plvl 的范围由 phy.minPowerLevelphy.maxPowerLevel,默认为 -96 dB 到 0 dB ).所以设置是行不通的:

> plvl 125
phy[1]: WARNING: Parameter powerLevel set to 0.0
phy[2]: WARNING: Parameter powerLevel set to 0.0
phy[3]: WARNING: Parameter powerLevel set to 0.0
phy: WARNING: Parameter signalPowerLevel set to 0.0