Onda de demodulación por teléfono inteligente de Jack 3.5

0

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;
    
pregunta Anna

0 respuestas

Lea otras preguntas en las etiquetas