Я пытаюсь работать над проектом, включающим реализацию моделей потерь на акустическое распространение в подводной связи (на основе определенной исследовательской работы).Мы пытаемся смоделировать это в unetstack
.Конечная цель - создать класс модели канала, в котором реализованы все модели потерь.
Но сейчас мы начали с попытки отправки сигнала основной полосы частот от одного узла к другому, а затем пытаемся захватить частотуна узле приемника и рассчитать модели потерь на данной частоте.(Модели потерь являются функцией значения частоты сигнала).Я пытался следовать некоторой документации и некоторым постам в блоге, но я не могу передавать и получать сигнал.
Для справки, я уже ссылался на эти статьи: 1.) svc-12-baseband 2.) basic-modem-operations-using-unetstack
Это исследовательская работа, за которой я следую this для расчета потерь на основеразные модели потерь.
Я пытался написать отличный файл для моделирования, но, похоже, он не работает.Если кто-то может, пожалуйста, взглянуть и сообщить мне об ошибках, которые я допустил, это очень поможет.Мы довольно плохо знакомы с unetstack, а также с темой подводной обработки сигналов, и это наша первая попытка реализовать ее на симуляторе.Мы используем unetsim-1.3
Любая помощь очень ценится!Заранее спасибо
import org.arl.fjage.*
import org.arl.unet.*
import org.arl.unet.phy.*
import org.arl.unet.bb.*
import org.arl.unet.sim.*
import org.arl.unet.sim.channels.*
import static org.arl.unet.Services.*
import static org.arl.unet.phy.Physical.*
import java.lang.Math.*
platform = RealTimePlatform
simulate 3.minutes, {
def n = []
n << node('1', address: 1, location: [0,0,0])
n << node('2', address: 2, location: [0,0,0])
n.eachWithIndex { n2, i ->
n2.startup = {
def phy = agentForService PHYSICAL
def node = agentForService NODE_INFO
def bb = agentForService BASEBAND
subscribe phy
subscribe bb
if(node.address == 1)
{
add new TickerBehavior(50000, {
float freq = 5000
float duration = 1000e-3
int fd = 24000
int fc = 24000
int num = duration*fd
def sig = []
(0..num-1).each { t ->
double a = 2*Math.PI*(freq-fc)*t/fd
sig << (int)(Math.cos(a))
sig << (int)(Math.sin(a))
}
bb << new TxBasebandSignalReq(signal: sig)
println "sent"
})
}
if(node.address == 2)
{
add new TickerBehavior(50000, {
bb << new RecordBasebandSignalReq(recLen: 24000)
def rxNtf = receive(RxBasebandSignalNtf, 25000)
if(rxNtf)
{
println "Received"
}
println "Tried"
})
}
}
}
}
В некоторых случаях «Пробный» печатается первым даже до того, как «отправленный» напечатан.Это показывает, что код (node.address == 2)
выполняется первым, прежде чем (node.address == 1)
выполняется.