如何更改两个节点之间的功率级别?
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.minPowerLevel
到 phy.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
如何通过提高功率级别来减少损耗?
这是我使用的代码: 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.minPowerLevel
到 phy.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