我正在尝试记录赛车的声音,并使用FFT分析录制的音频并找到引擎频率。 如果我只吹口哨,一切正常,我可以看到一个清晰的图形,对应于我的低音和低音等等。我创建了一个不同颜色的热图,用于我从FFT获得的频率与时间的不同幅度。 音频记录如下:
private class RecordAudio extends AsyncTask<Void, float[], Void> {
@Override
protected Void doInBackground(Void... params) {
try {
int bufferSize = AudioRecord.getMinBufferSize(sampleRateMain,
channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord(
MediaRecorder.AudioSource.DEFAULT, sampleRateMain,
channelConfiguration, audioEncoding, bufferSize);
short[] buffer = new short[blockSize];
audioRecord.startRecording();
float[] audioData = new float[blockSize];
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());
BufferedWriter writer;
String pathtemp = Environment.getExternalStorageDirectory().getAbsolutePath();
String filename ="/"+currentDateandTime;
path = pathtemp +filename;
writer = new BufferedWriter (new FileWriter(path,false));
int i2=0;
while (started) {
if(i2==10){
datastructures tempdata = new datastructures();
i2=0;
audioRecord.read(buffer, 0, blockSize);
float sum = 0;
for (int i = 0; i < blockSize; i++) {
audioData[i] = (float) ( buffer[i]);
writer.write(audioData[i]+" ");
if (audioData[i] <= 0) {
audioData[i] = audioData[i] * (-1);
}
sum = sum + audioData[i];
}
writer.newLine();
tempdata.freqsum = sum;
mainData.add(tempdata);
}
i2++;
}
writer.close();
}
catch(IOException e){
e.printStackTrace();
}
audioRecord.stop();
} catch (Throwable t) {
Log.e(TAG, "Audio recording Failed");
}
return null;
}
}
所以我将audiodata存储在SD卡上。为了减少数据i循环通过i2并且仅在i2 = 0 ... 10中记录一次; 在应用程序的下一部分中,我让用户剪切出一部分audiodata,并仅将此部分加载到一个名为trimmed的向量中。 然后我对这些频率进行FFT。但似乎数据中只有过载。
录制时是否可以触发麦克风的自动增益?
如何将录制和保存的audiodata加载到Audacity中? (我为原始数据尝试了不同的导入设置,但它似乎不起作用) Here is an example file
我实现了一个butterworth滤波器,如果我做对了滤波器应该在FFT之前应用?
答案 0 :(得分:0)
我无法回答你的麦克风增益问题,但至于你的过滤器问题:这取决于你如何实现你的过滤器。 Butterworth滤波器通常通过Z变换(recurrence relation)实现为IIR(无限脉冲响应,即滤波器的输出取决于先前的输出)滤波器。如果您以这种方式实现了滤波器,那么您应该在进行FFT之前将滤波器应用于时域采样。
如果你需要一个滤波器,并且你正在进行FFT,你可能最好通过卷积和Convolution theorem而不是使用butterworth或其他s / z域滤波器来实现FIR滤波器。 / p>