Вы можете передать сигнал с помощью сообщения TxBasebandSignalReq
, подождать, пока TxFrameNtf
покажет, что сигнал был успешно передан, а затем запросить запись с использованием RecordBasebandSignalReq
.Чтобы избежать разрыва между передачей и записью, вы можете использовать атрибут txTime
TxFrameNtf
для запуска записи (атрибут recTime
).Большинство модемов, использующих UnetStack, позволяют начинать записи в прошлом, если данные находятся в буфере (обычно несколько секунд).
Вышеуказанная идея выражена в приведенном ниже фрагменте кода Groovy (без каких-либо ошибок).проверка):
import org.arl.unet.*
import org.arl.unet.phy.*
def bb = agentForService(Services.BASEBAND)
bb << new TxBasebandSignalReq(signal: mySignal)
def ntf = receive(TxFrameNtf)
bb << new RecordBasebandSignalReq(recTime: ntf.txTime, recLen: nSamples)
Здесь mySignal
- это сигнал, который вы хотите отправить (сложное представление основной полосы частот), а nSamples
- количество выборок основной полосы частот, которое вы хотите записать.
(Вы можете сделать то же самое, используя Python почти таким же образом)
Запись начнется в начале передачи и будет содержать передаваемый сигнал (скорее всего, отсеченный), за которым следуют любые эхо-сигналы / возвраты.Если вы хотите начать запись в конце передачи, вы можете сделать это, установив recTime
в ntf.txTime + mySignalDuration
, где mySignalDuration
- длина вашего сигнала в микросекундах.
Также имейте в видупомните, что передаваемые и записанные сигналы представляют собой сложные представления сигнала в основной полосе частот с несущей частотой bb.carrierFrequency
и частотой дискретизации bb.basebandRate
.Это представление более компактно, чем представление полосы пропускания.Однако, если вы хотите использовать представление полосы пропускания при передаче, вы можете установить fc: 0
в TxBasebandSignalReq
и передать сигнал полосы пропускания, выбранный в 4*bb.basebandRate
, но вам нужно преобразовать полученный сигнал в полосу пропускания (умножить на сложную экспоненту и принять вещественную часть).Если вы используете Python, это легко сделать, используя что-то вроде arlpy.signal.bb2pb()
.