安卓AudioRecord禁用增益滤波器

3

我能够读取声音数据使用audiorecord,但是我获得了一个奇怪的频率响应。我正在尝试编写一个语音检测器。

我读取的数据如下:

private int channelConfiguration = AudioFormat.CHANNEL_IN_MONO;
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
private int sampleRate = 44100;
private int frameByteSize = 1024;
short[] buffer;

int recBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfiguration, audioEncoding);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, channelConfiguration, audioEncoding, recBufSize);
buffer = new short[frameByteSize];

audioRecord.read(buffer, 0, frameByteSize);

为了校准,我使用FFT将输入音频转换为频域,并获得最大值。 然后,我在Matlab中创建音频音调,如这里所示,并播放它们。 我从300到20000 Hz获取良好的读数。 在300 Hz之前,我并未获得良好的结果,只有振荡值。 这使我认为存在某种带通滤波器。
另外,我还遇到了其他问题。 频率响应在较低频率时也具有增益。
我记录了总沉默、声音和背景噪音的音频,并进行了频率响应分析。
我在沉默情况下记录时获取了以下内容: Total Silence 当我录制声音时,我获取到了以下内容: voice 正如图表所显示的那样,在1000到7000Hz之间有一个非常小的增益。
我的问题是是否有一种方法可以避免或禁用Android默认的可能增益或滤波器。
注意:我已经尝试将媒体记录器更改为语音识别(MediaRecorder.AudioSource.VOICE_RECOGNITION),但其行为相同。
注意:我正在使用NEXUS 7设备。
1个回答

0

您可以使用低通滤波器或其他平滑滤波器来过滤掉峰值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接