作为我毕业论文的一部分,我正在实现基于自由空间中音频传输的数字通信系统(STMF401RE + 模拟麦克风)。我正在使用 BPSK 调制,并且我已经实现了用于频率和相位恢复的 costas 循环,并且符号(在这种情况下是字节)使用相关性和已知前导码(巴克码)启动检测器,但是尽管有很多时间,但它是一个机会游戏. 我是 DSP 新手,谁能检查我的代码和概念并给我一些建议(尤其是 costas 循环)。回购链接:https ://github.com/asiemasz/AcousticDataTransmitter
基于BPSK的音频数字通信系统
我的意思是它只是通过空气的声波
不,这不对。除非您在消声室中操作(这不太可能),否则不会。您的频道的总传递函数可能非常复杂。你有
- 驱动程序和编解码器(如果有)
- D/A & 放大器。您必须确保获得不错的信噪比,并且不会过度驱动或削波任何东西
- 扬声器:电动扬声器本质上是非线性的。便宜的扬声器也可能有令人讨厌的分手模式。
- 房间本身就是一个非常复杂的系统。你有直接的声音,但也有成千上万的反射。除非扬声器非常靠近麦克风,否则反射能量通常高于直接声音能量。通道传递函数高度依赖于房间内所有墙壁、表面和其他材料的几何形状和声学特性。
- 住宅房间也有相当多的背景噪音,特别是在较低频率下。
- 麦克风:这些通常表现良好,除非您超速驱动它们。
- 前置放大器、电源和 A/D:确保它们具有良好的信噪比,但也没有过驱动或削波。
您的问题可能不在于代码,而在于您的频道的物理属性。我将从要求开始:您想要达到什么比特率,您需要适应麦克风和扬声器之间的最大距离,房间的最大混响时间是多少,作为频率函数的最大背景噪声水平等然后根据这个要求设计算法。
首先:我 100% 支持 Hilmar。我真的不是声学专家,但我记得我帮助学生构建了一个最小的音频数据传输系统,收获真的是这些;您可以,如果您将音量限制为“很好且远低于系统的最大音量”,实际上可以忽略 1.、2. 和 6.,并且如果您在接收器处对谐波进行了足够好的过滤,则 3..
但是你必须知道你的频道。我首先通过信道探测测量信道脉冲响应,例如使用伪白噪声序列。在您希望工作的不同类型的房间中执行这些操作。由此产生的估计可以让您限制系统所需的均衡器的长度/复杂性。
我已经为频率和相位恢复实现了 costas 循环
相位恢复:这是一个采样率机制中的数字系统,“计算上很简单”,我不会使用 costas 循环,而是一个简单的基于前导的相位估计和校正。
您可能根本不需要频率恢复。
为什么?因为您的振荡器已经足够好:25 ppm 几乎是这样的标准,并且在您可以使用的带宽下,您会得到低符号率(肯定小于 16 kSym/s),所以在组合频率误差之前接收器和发射器已将您的星座图旋转到足以导致显着错误概率的程度,几秒钟将过去 - 到那时,您的通道均衡器无论如何都必须随着事情的发展而更新。
这并不是说使用 Costas 循环的跟踪阶段不是一个好主意——你的均衡器可能是自适应的,并且在运行时也会自我更新——这只是你以后可以很好地添加以稍微提高错误性能的东西。首先,您需要解决的真正问题是补偿房间脉冲响应(导致符号间干扰),而最简单的方法(至少在我看来)是发送已知的符号前导码,并使用它们来初始化均衡器抽头——在前导码之后,决策反馈均衡器继续使用这些抽头。
只有在均衡器之后,您才能进行相位恢复。
我是 DSP 新手,谁能检查我的代码和概念并给我一些建议(尤其是 costas 循环)
不要从科斯塔斯循环开始。编写单元测试,并在您的 PC 上使用合成信号进行测试;毕竟,C 代码可以为 PC 本地编译!首先,您的 BPSK 接收器应解调没有任何噪声、相位偏移或 ISI 的纯净、干净的信号。然后,添加模拟噪声。然后,添加模拟相位偏移。然后,添加模拟房间脉冲响应。稍后,使用真实房间的录音进行测试。
只有在最小可行产品的模拟工作之后(不,不是任何一分钟之前),您才会开始将东西移植到您的微控制器。微控制器编程和 DSP 对自己来说都足够难,专业人士首先编写他们的硬件模拟器,然后再将经过验证的正确算法移植到他们的硬件平台上。与您的 PC 相比,在微控制器板上进行测试和调试要困难得多,您可以将数兆字节的数据保存到硬盘驱动器,没有任何问题,您的调试器可以在同一台机器上运行,并且您拥有 CPU 和一种操作系统,它会在您访问内存时告诉您不能意外访问。
您需要解决三个问题:
- 事物的信号/DSP方面(“算法”)
- 事物的嵌入式/编程方面(“代码”)
- 软件工程方面(什么是“最小可行产品”?您如何编写测试以便实际测试稍后将在微控制器上运行的代码?...)
你真的需要从写下你的要求开始:你需要达到什么数据速率?在哪些房间?哪个噪音?哪些误码率?