gpt4 book ai didi

android - 安卓上的声波通讯

转载 作者:太空狗 更新时间:2023-10-29 15:38:32 31 4
gpt4 key购买 nike

我想在安卓手机上通过声波传输数据,我找到了这个例子: https://github.com/JesseGu/SinVoice

这个项目工作正常,传输数据时,能听到声音,传输数据成功。

问题是如何修改它传输数据的代码,但我听不到声音?
如果是高频音,请告知如何修改,谢谢。

最佳答案

iPhone 的 Chirp 是解决难题的一种廉价方法。他们实际上上传了要在线发送的数据,“chirp”似乎只是一个独特的音符序列,它索引到在线数据库中上传的数据。话虽如此,我对真正的音频数据传输感兴趣已有一段时间了。如果你打算做这个项目,你需要自己担心代码,我可以向你展示的是一堆你可能想融入到你的设计中的技术。我的建议是从头开始,但如果您真的愿意,也可以尝试构建此 Github 代码。

要检测和过滤掉声音,请使用 Goertzel 算法。对于输入声音,Goertzel 算法过滤传入声音样本流并生成输出值的复数值流 (a+bi)。值的大小 ( sqrt((a^2)+(b^2)) ) 给出了给定时间点特定频率的强度。值的角度 ( atan2(b,a) ) 给出该频率在给定时间点的相位。您可以选择要过滤的频率,特别是使用 Goertzel 算法的多个实例来检测多个频率。

http://www.mstarlabs.com/dsp/goertzel/goertzel.html

您可以简单地使用一种音调播放模式,打开或关闭,使用 Goertzel 算法过滤通过麦克风传入的声音,并使用它来检测播放的模式,从而恢复您发送的信息位。这种技术是一种简单的调幅形式,非常容易受到背景噪声的影响。您的数据传输速率将非常慢。

https://www.princeton.edu/~achaney/tmve/wiki100k/docs/Amplitude_modulation.html

您可以过滤多个不同的音符,并让您的程序监听音符序列。这很可能是 Chirp 内部的工作方式,而且非常可靠。您的数据传输速率可以有所提高。

您还可以使用频率调制或相位调制。使用 Goertzel 算法意味着相位调制比频率调制更容易一些。我没有对这种方法进行过广泛的测试,但它似乎非常可靠,而且比特率可能高于幅度调制。我曾经编写过一个使用相位调制发送图片的程序。数据没有数字化,我只是按相位确定像素强度并扫描图像中的所有像素。即使播放嘈杂的音乐,画面也相当清晰。请注意,图像相当小,发送仍需要几分钟,所有音频通信的比特率都将非常低。

http://www.circuitstoday.com/modulation

一个简短的建议。考虑这两种计算正弦波的方式来播放

double output[length];
double t=0;
double samplerate=44100.0;
double frequency=440.0;
double w=2*pi*frequency;
double time_increment=1.0/samplerate;
for(n=0;n<length;n++) {
output[n]=sin(w*t);
t+=time_increment;
}

第二种方式

double output[length];
double samplerate=44100.0;
double frequency=440.0;
double phase=0;
double phase_increment=2*pi*frequency/samplerate;
double tau=2*pi;
for(n=0;n<length;n++) {
output[n]=sin(phase);
phase=(phase+phase_increment)%tau;
}

对于第一种方式,当 t 的值很大时,sin 中的值将失去精度。从本质上讲,你弹奏音符的时间越长,它听起来就越糟糕。不久之后,它开始听起来很不纯净。

第二种方法通过随时间对相位进行积分并将其修改 (%) 为 2*pi (tau) 来避免此问题,将值保持在 0 到 2pi 的范围内。

关于android - 安卓上的声波通讯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012618/

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