本次 Project 采用了 C# 的 NAudio 库,其包含了对 ASIO 的驱动分装。 ASIO可实现低延迟、高同步、高吞吐率以及对声卡的直接访问,而不用承担系统音频接口的 overhead。
对于收到的每一个音频信号 (sample),该音频库可以通过事件的方式来激活一个函数,并传入对应的浮点值。
对于传入的 bit array, 我们采用自制与里的所罗门混合的校验与纠错机制
其中,对于要传入的数据,我们按照
这样对于收到的 frames,只要接受到对的数据块至少14个,就可以还原出原本的 98 bits。在完成这一步之后,数据传输正确率可以做到几乎每次 100%。
通过观察,我们发现 Athernet 的错误特点是传输过程中会有连续数据的错误,因此对于我们的设计,横向数据(即每个 frame 中的数据)连续错误的概率较大。因此我们设想如果我们能“竖着”对其做里的所罗门算法可以提高对错误发生的针对性。
由于我们的传输效率较高,因此我们还采用了在规定时间内两倍发送数据的方式来增加冗余。当里的所罗门算法发现当前 frame 出现错误后会采用第二次收到的 frame 值。
我们的 frames 必须保证严格对齐,因为我们是根据收到的顺序进行还原。未来的改进可以设计一个协议,在传输的 frame 中加入对应的 index