Según el post de Jim Dearden, armé un convertidor de voltaje a frecuencia.
Lasalidasetransfieremediantelaentradademicrófonojack3.5alteléfonointeligente.DeLM331estoyobteniendounaondacuadradasinciclodetrabajodel50%.Quierodemodularlaondayobtenerunvoltajeenelteléfonointeligente(Android).
Encontréuncódigoquefuncionabienparael50%delasondasdelciclodetrabajoycalculélafrecuencia,perosiingresolasalidadelLM331,obtengovaloreserróneos.
algunaidea?
Gracias!
Elesquemaylaondadesalida:
El código:
double[] preRealData = new double[tmpBufferSize];
double PI = 3.14159265359;
for (int j = 0; j < tmpBufferSize; j++) {
double multiplier = 0.5 * (1 - Math.cos(2*PI*j/(tmpBufferSize-1)));
preRealData[j] = multiplier * audioData[j];
}
DoubleFFT_1D fft=new DoubleFFT_1D(tmpBufferSize);
double[] realData=new double[tmpBufferSize*2];
for (int j=0;j<tmpBufferSize;j++) {
realData[2*j] = preRealData[j];
realData[2*j+1] = 0;
}
fft.complexForward(realData);
double magnitude[] = new double[tmpBufferSize / 2];
for (int j = 0; j < magnitude.length; j++) {
double R = realData[2 * j];
double I = realData[2 * j + 1];
magnitude[j] = Math.sqrt(I*I + R*R);
}
int maxIndex = 0;
double max = magnitude[0];
for(int j = 1; j < magnitude.length; j++) {
if (magnitude[j] > max) {
max = magnitude[j];
maxIndex = j;
}
}
double frequency = sampleRates[i] * maxIndex / tmpBufferSize;