欢迎光临
我们一直在努力

开源一个 MATLAB 水声通信调制工具箱:支持 BPSK/QPSK/8PSK/QAM/DSSS/OFDM

开源一个 MATLAB 水声通信调制工具箱:支持 BPSK/QPSK/8PSK/QAM/DSSS/OFDM

GitHub:https://github.com/ZoperIOT/underwater-acoustic-modulation

最近整理了一个面向水声通信发射端实验的 MATLAB 调制信号生成工具箱,主要用于快速生成 BPSK、QPSK、8PSK、QAM、DSSS 和 OFDM 等常见水声通信发射波形。

这个项目的目标不是做一个完整通信系统,而是先解决水声实验中一个非常基础、却常常容易混乱的问题:如何稳定、规范、可复现地生成发射端调制信号。

它适合通信原理课程设计、水声通信仿真入门、声学换能器发射波形生成、MATLAB 信号处理实验等场景。

在这里插入图片描述

1. 为什么先把“信号源”做规范?

做水声通信实验时,很多问题并不从信道开始,而是从发射端就已经埋下了:

  • BPSK、QPSK、QAM 的比特映射和相位偏置各写各的;
  • 载波频率、符号率、采样率在不同脚本里不统一;
  • 成形滤波后波形长度、幅度归一化和 WAV 输出格式不一致;
  • 换一个调制方式就要重新改一套脚本;
  • 想把仿真信号送到 DAC、功放和换能器时,才发现输出格式没有统一。

对于后续的同步、信道估计、均衡、BER 测试而言,发射端波形是共同起点。先把这个起点固定下来,后面的实验会轻松很多。

这个工具箱将典型发射流程统一为:

Bits → Modulation → Pulse Shaping → Carrier Modulation → WAV Output → Acoustic Experiment

其中,信息比特先映射为复基带符号,再经过根升余弦脉冲成形,上变频为实值声学通带信号,最后可以保存为 WAV 文件,用于播放或接入实际发射链路。

2. 目前支持哪些调制方式?

函数调制方式默认载波 / 速率
BPSK BPSK 10 kHz / 200 Baud
QPSK QPSK 10 kHz / 200 Baud
pad_8PSK 8PSK 10 kHz / 200 Baud
QAMtrain 方形 QAM(默认 16QAM) 10 kHz / 200 Baud
DSSS DSSS-BPSK(m 序列扩频) 11 kHz / 37.8 bit/s
OFDM 导频辅助 QPSK-OFDM 10 kHz / 7.5 Hz 子载波间隔

所有调制函数都会返回:

  • waveform:归一化到 [-1, 1] 的实值通带波形;
  • info:包含实际使用的比特、基带符号、参数、采样率和持续时间等元数据。

这意味着同一套调用方式可以快速切换调制体制,也方便后续统一接入接收机或信道模型。

3. 最小可运行示例:生成 QPSK 水声发射波形

下面这段代码可以直接生成 128 bit 的 QPSK 声学发射波形,并写出为 WAV 文件:

addpath('src');

bits = randi([0 1], 1, 128);
[waveform, info] = QPSK(bits);

audiowrite('qpsk_10k.wav', waveform, info.sampleRate);

默认配置下,采样率为 96 kHz,载波频率为 10 kHz,符号率为 200 Baud。实际实验中可根据换能器工作带宽、声道条件、功放和 DAC 的满量程范围调整参数。

例如,生成 12 kHz 载波、400 Baud 的 BPSK 波形:

opt = struct('sampleRate', 96000, 'carrierFrequency', 12000,
'symbolRate', 400, 'rolloff', 0.5);
[waveform, info] = BPSK(randi([0 1], 1, 256), opt);

也可以通过统一入口切换调制方式:

[waveform, info] = generate_signal('ofdm', [],
struct('carrierFrequency', 12000, 'numberOfOFDMSymbols', 10));

4. 输出波形是什么样的?

仓库中提供了一张由实际 QPSK 示例生成的诊断图,包含三部分:

  • 通带波形:展示最终送入播放/发射链路的实值波形;
  • 发射频谱:观察能量是否集中在预期的载波附近;
  • 理想星座图:检查调制映射是否符合预期。
  • 在这里插入图片描述

    在 MATLAB 中运行下面的脚本即可重新生成图片:

    run('examples/generate_visualizations.m')

    如果需要导出所有调制方式的音频样例,可以运行:

    run('examples/generate_examples.m')

    生成的 WAV 文件会保存在 examples/output/ 目录中。

    5. 这个项目适合哪些场景?

    通信原理课程设计

    可以直接从 BPSK、QPSK、QAM 等基础体制开始,对比不同星座映射、带宽占用和波形特征,再逐步加入信道与接收机。

    水声通信仿真入门

    先用规范的发射波形搭建基线,再加入多径、噪声、多普勒等水声信道因素,会比从零散脚本开始更容易定位问题。

    声学换能器与播放实验

    通过 audiowrite 输出 WAV 后,可将波形送入音频接口或自定义 DAC 链路,配合功放和换能器进行水池或台架发射实验。

    MATLAB 信号处理实验

    项目不依赖 Communications Toolbox。根升余弦滤波器已在仓库内实现,适合希望理解调制流程、又想快速得到可运行结果的同学。

    6. 使用时需要注意什么?

    • 该项目当前只覆盖发射端波形生成,不包含解调、帧同步、信道估计或 BER 计算。
    • 单载波体制需满足 sampleRate / symbolRate 为整数;DSSS 还需满足 sampleRate / (symbolRate * spreadingFactor) 为整数。
    • QPSK、8PSK、QAM 的输入比特数应能被每符号比特数整除;OFDM 会自动补零并在 info.paddingBits 中记录。
    • 波形虽然归一化到 [-1, 1],但真正接入硬件前仍需按 DAC 格式、功放增益和换能器带宽做幅度与频率校准。

    7. 项目地址与后续计划

    项目地址:https://github.com/ZoperIOT/underwater-acoustic-modulation

    目前已经发布 v0.1.0,包含项目总览、可复现示例和输出诊断图。

    如果你正在做通信原理课程设计、水声通信仿真、MATLAB 调制信号生成,欢迎参考这个开源项目。后续我会继续更新解调、同步、信道建模和 BER 测试相关内容。


    推荐标签: MATLAB 水声通信 通信原理 数字调制 QPSK OFDM 信号处理 开源项目

    赞(0)
    未经允许不得转载:171主机测评 » 开源一个 MATLAB 水声通信调制工具箱:支持 BPSK/QPSK/8PSK/QAM/DSSS/OFDM
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址