我正在录制带有初步提示音的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/