• 画饼也充饥,使用声卡替代昂贵的SDR设备实现实验


    昨天有朋友问我,如果作为学生,家庭条件不好,买不起SDR设备,又想业余时间玩玩SDR,如何是好?我建议他使用声卡进行基带实验。实际上,我也经常使用声卡实验——因为虽然声卡简单,但它确实是一个支持双路IO的AD/DA设备,具备构造基带波形的完整能力。

    使用声卡进行SDR实验有两种方法。

    1. 电缆直连。本文要讨论的方法。使用两根直通线,直连两台计算机的扬声器与线路输入(Linein)
    2. 声波传递。后续准备尝试的方法。直接利用扬声器与麦克风进行数据传输。

    对于一般的高频无线电波形,特别是相位调制波形,建议使用声卡有线直连直接处理基带数据。未来尝试用喇叭和麦来做声波的无线传播,会遇到很多有趣的问题,需要使用OFDM、二次调制等专门的补偿技术。

    • 非线性失真。大部分音箱和麦克会引入非线性的畸变,使得QAM等波形的相位恶化。
    • 环境失真。空气介质,室内噪声的影响很大。多径叠加、回声都很显著。
    • 频率失真。如果一方是便携设备,拿在手里,则一旦移动,频率会随着距离远近变化而降低或者升高。

    1. 连接方式

    使用声卡发射、接收数据,处理的是基带波形,少了SDR的上变频环节。当然,也可以把0-96KHz的频段继续细分,构造多路载波,那样就需要在软件层面进行数字上变频、数字下变频。

    只需要购买两根立体声数据直连线,分别连接两台计算机的声音输出、线路输入口,如下图所示:
    Connect

    2. 范例实验

    我们依旧使用taskBus继续进行实验,相关知识参考前一系列的文章。由于没有购买专用的SDR设备,工程的源、宿均使用声卡。

    2.1 捕获网络数据并封装发射

    • 声卡模式:2声道,替代I、Q路,左I右Q
    • 采样率:192000

    工程连接关系如下图所示:

    Emit

    1. pcap_src 模块抓取网络包
    2. a1frame_encap 模块进行封装、纠错编码
    3. a1frame_askmod 模块进行 DASK 差分幅度键控调制
    4. sink_soundcard 模块通过声卡产生192000Hz采样率的基带IQ波形。

    2.2 接收线路输入波形并还原

    接收的工程连接关系如下图:

    Recv

    1. 声卡使用LineIn线路输入设备接收输入的声波
    2. a1frame_askdem进行检测、解调
    3. a1frame_decap模块进行纠错还原
    4. pcap模块把对应的数据还原到网卡上。

    3. 注意事项

    通过测试,可以发现使用直接电缆连接的两台计算机,在声卡的192000Hz采样率(立体声)下工作良好。但需要注意一些问题:

    1. 在Linux下,普通用户没有CAP的权限,需要用setcap打开:
    $ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip'  bin/modules/sink_pcap
    $ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip'  bin/modules/source_pcap
    
    • 1
    • 2
    1. root用户,有时声卡无法工作。因此,建议还是使用普通用户来执行。
    2. 采样率要匹配,声道数要匹配。

    4. 后续研究

    研究多状态符号,提高单个符号的比特传输效率。如使用 16QAM,256QAM进行传输。

  • 相关阅读:
    项目中索引的真实应用场景-2022新项目
    【frontend】如何横向排列?
    关于c++中数据sqrt() 精度问题
    hwk4:C++ 运算符重载
    Ribbon 服务调用与负载均衡
    Loadrunner结合Fiddler实现脚本的录制
    《找对英语学习方法的第一本书》
    css多个物体椭圆旋转
    【Java学习】JavaWeb---Request & Response
    当你认为Python程序慢时,几个方法你使用了吗
  • 原文地址:https://blog.csdn.net/goldenhawking/article/details/126941243