gpt4 book ai didi

unetstack - 我如何将 JANUS 信号记录为 wav 文件?

转载 作者:行者123 更新时间:2023-12-04 08:30:51 25 4
gpt4 key购买 nike

我正在测试调制解调器之间的互操作性。我的一个调制解调器确实支持 JANUS,我相信基于 UnetStack 的 Subnero 调制解调器 Phy[3]也支持JANUS。我如何发送和记录 JANUS 信号,我可以将其用于其他调制解调器的初步测试?有人可以提供基本的片段吗?

最佳答案

UnetStack 确实有一个 JANUS 的实现,默认情况下,配置在 phy[3] 上。
您可以在调制解调器上进行检查(此处的示例输出来自 unet audio SDOAM,因此您的调制解调器参数可能会有所不同):

> phy[3]
« PHY »

[org.arl.unet.phy.PhysicalChannelParam]
fec = 7
fecList ⤇ [LDPC1, LDPC2, LDPC3, LDPC4, LDPC5, LDPC6, ICONV2]
frameDuration ⤇ 1.1
frameLength = 8
janus = true

[org.arl.yoda.FhbfskParam]
chiplen = 1
fmin = 9520.0
fstep = 160.0
hops = 13
scrambler = 0
sync = true
tukey = true

[org.arl.yoda.ModemChannelParam]
modulation = fhbfsk
preamble = (2400 samples)
threshold = 0.0
(为了保持输出简洁,我删除了一些与此处讨论无关的参数)
需要注意的关键参数:
  • modulation = fhbfskjanus = true 为 JANUS 设置调制
  • fmin = 9520.0 , fstep = 160.0hops = 13 是 JANUS
  • 要求设置 fhbfsk 的调制参数
  • fec = 7 根据 JANUS
  • 的要求从 ICONV2 中选择 fecList
  • threshold = 0.0 表示禁止接收 JANUS 帧

  • 注意:如果您的调制解调器是 Subnero M25 系列,则标准 JANUS 频带超出了调制解调器的 ~20-30 kHz 操作频带。在这种情况下,JANUS 方案会自动配置为更高的频率(您将在调制解调器中看到 fmin)。请注意,此频率对于与任何其他可能在更高频段支持 JANUS 的调制解调器进行互操作很重要。
    要启用 JANUS 接收,您需要:
    phy[3].threshold = 0.3
    为了避免来自 CONTROL 和 DATA 数据包的任何其他检测,我们可能希望禁用这些:
    phy[1].threshold = 0
    phy[2].threshold = 0
    此时,您可以通过键入 phy << new TxJanusFrameReq() 进行传输,并在调制解调器旁边放置一个水听器,将传输的信号记录为 wav 文件。
    但是,我假设您更愿意在调制解调器上进行录音,而不是使用外部水听器。为此,您可以在调制解调器上启用环回模式,并设置调制解调器记录接收到的信号:
    phy.loopback = true       # enable loopback
    phy.fullduplex = true # enable full duplex so we can record while transmitting
    phy[3].basebandRx = true # enable capture of received baseband signal
    subscribe phy # show notifications from phy on shell
    现在,如果您进行传输,您应该会看到带有捕获信号的 RxBasebandSignalNtf:
    > phy << new TxJanusFrameReq()
    AGREE
    phy >> RxFrameStartNtf:INFORM[type:#3 rxTime:492455709 rxDuration:1100000 detector:0.96]
    phy >> TxFrameNtf:INFORM[type:#3 txTime:492456016]
    phy >> RxJanusFrameNtf:INFORM[type:#3 classUserID:0 appType:0 appData:0 mobility:false canForward:true txRxFlag:true rxTime:492455708 rssi:-44.2 cfo:0.0]
    phy >> RxBasebandSignalNtf:INFORM[adc:1 rxTime:492455708 rssi:-44.2 preamble:3 fc:12000.0 fs:12000.0 (13200 baseband samples)]
    该通知以基带复合格式显示您的信号。您可以将其保存到文件中:
    save 'x.txt', ntf.signal, 2
    要转换为 wav 文件,您需要加载此信号并转换为通带。下面是一些用于执行此操作的示例 Python 代码:
    import numpy as np
    import scipy.io.wavfile as wav
    import arlpy.signal as asig

    x = np.genfromtxt('x.txt', delimiter=',')
    x = x[:,0] + 1j * x[:,1]
    x = asig.bb2pb(x, 12000, 12000, 96000)
    wav.write('x.wav', 96000, x)
    注意:您需要用调制解调器 fd 中的 fc12000 字段分别替换 fsfcRxBasebandSignalNtf 。对于 Unet 音频,两者都是 12000,但对于 Subnero M25 系列调制解调器,它可能是 24000。
    现在您的 wav 文件速度为 96 kSa/s!
    您还可以绘制频谱图来检查您是否想要:
    import arlpy.plot as plt
    plt.specgram(x, fs=96000)

    JANUS frame spectrogram

    关于unetstack - 我如何将 JANUS 信号记录为 wav 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65027940/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com