2013-07-03 3 views
3

음성 탐지기를 프로그래밍하려고합니다. 지금까지 필자는 audiorecord를 사용하여 오디오 데이터를 읽을 수 있었지만 이상한 주파수 응답을 얻었습니다.Android AudioRecord 비활성화 필터

I로이 데이터를 판독하고있어 :

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); 

보정하기 위해, I는 FFT를 사용하여 주파수 도메인으로 입력 오디오 변환의 최대 값을 얻었다. 그런 다음 여기에 How do you generate dual tone frequencies in MATLAB?과 같이 Matlab에서 오디오 톤을 생성하고 있습니다. 나는 300에서 20000 Hz까지 좋은 판독 값을 얻는다. 300Hz 이전에 나는 좋은 결과를 얻지 못했고, 단지 진동 값이었습니다. 이것은 저에게 어떤 종류의 밴드 필터가 있다고 생각하게 만듭니다.

또한 다른 문제에 직면 해 있습니다. 주파수 응답은 또한 더 낮은 주파수에서 이득을 얻습니다.

음성 및 배경 잡음이있는 총 조용함으로 오디오를 녹음했으며 이것이 주파수 응답입니다. 나는 침묵 시나리오에 따라 기록 할 때

난이 얻을 : 이 그림에서 볼 수 있듯이 voice

, 1000과 같은 아주 작은 이득이있다 : Total Silence

나는이 녹음 된 음성을 얻을 ~ 7000Hz.

내 질문은 안드로이드가 기본적으로 가지고있는 가능한 이득이나 필터를 피하거나 없애는 방법이 있다면 제 질문입니다.

참고 : 미디어 레코더를 음성 인식 (MediaRecorder.AudioSource.VOICE_RECOGNITION)으로 변경하려고했는데 동일한 동작을합니다.

참고 : Nexus 7 장치를 사용하고 있습니다.

답변

0

로우 패스 필터 또는 다른 평활 필터를 사용하여 스파이크를 걸러 낼 수 있습니다.

관련 문제