android - 检测音频信号中的频率变化点

标签 android audio fft frequency-analysis

我正在录制带有初步提示音的fsk信号。采样率为8000(采样/秒),预备音调的频率为440Hz(代表8192个采样-播放大约1秒钟)。数据信号包含两个频率,“1”为934Hz,“0”为510Hz,编码后的消息为char'8'(00111000),每个位使用8192个样本表示,数据信号在初步语气。我使用以下代码捕获音频字节,唯一的区别是我将它们写入ByteArrayOutputStream。 https://stackoverflow.com/questions/23432398/audio-recorder-in-android-process-the-audio-bytes

我试图找到一个频率,该频率从初始音调的440Hz变为代表位“0”的频率(510Hz)。我正在做的一般想法是解码消息。我正在使用带有Hann窗口和HPS方法(http://cnx.org/contents/8b900091-908f-42ad-b93d-806415434b46@2/Pitch_Detection_Algorithms)的FFT算法(我知道这不是最好的方法,还有其他一些性能更好的算法,但这只是我的指示)。

有什么办法可以检测到这一点吗?我可以使用FFT吗?

最佳答案

3个长度为8192的滑动Goertzel过滤器将起作用。将频率转换/更改时间估计为在任意两个滑动滤波器的幅度输出之间的差值中找到最大值的点。

另外,请检查您的音频发声器和麦克风,看看它们是否具有如此低的频率响应,这可能就是您检测泛音的原因。

关于android - 检测音频信号中的频率变化点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29458183/

相关文章:

android - 计算音频文件的声级会导致dB值降低

signal-processing - 使用 FFT 检测小号的音高

GPU的OpenCL FFT库?

java - 处理-覆盖音频

ios - AVAudioPlayer Swift 3 不播放声音

matlab - 自己的快速傅里叶变换算法的实现不起作用

java - 由于无法读取源文件,该项目未构建

java - 如何在 Android 项目中使用 JavaFX Activity ? (Kokos 示例项目)

android - 如何在 Android Studio 中使用相应的应用内购买 API 为亚马逊应用商店和谷歌 Play 商店构建 apk

java - 如何在 GraphRequest.newMeRequest 上获取用户电子邮件