I’m trying to sample a signal but I can’t made it work continuously and tell me the RMS value once a second. There is a delay somewhere and it takes 3 seconds…
I saw in the examples that this should be possible, but I don’t understand why it is not working, can anyone help me?
The Code::
`
buffer1 <- blob(6000);
buffer2 <- blob(6000);
Total_avg<-0;
Total_rms<-0;
AVG<-1.678;
b<-0;//nº buffer
function Actuacion(V_AVG,V_RMS){ //RUIDO
server.log (V_AVG+" "+V_RMS);
agent.send("SendSound", V_RMS)
}
function Signal_Procesing(buffer, length){
if (length > 0) {
::b++;//nº de buffer
local avg=0;
local rms=0
for (local i=0;i<length;i+=2) {
local MuestraI = buffer[i]+buffer[i+1]*256;
MuestraI = MuestraI/65536.0*3.3;//volts
local MuestraRMS=(MuestraI-AVG)*(MuestraI-AVG);
avg=avg+MuestraI;
rms=rms+MuestraRMS
}
::Total_avg+=avg/(buffer.len()/2.0);
::Total_rms+=rms
if(b==16){
::Total_avg=::Total_avg/b;
::AVG=::Total_avg;
::Total_rms=math.sqrt(::Total_rms/(::b*buffer.len()))
Actuacion(::Total_avg,::Total_rms);
::b=0;
::Total_avg=0;
}
}}
hardware.pinA.configure(ANALOG_IN);
hardware.sampler.configure(hardware.pinA, 48000, [buffer1,buffer2], Signal_Procesing);
//FREC_SAMPLEO:=48KHz*2bytes/sampleo/[16 buffer *1 sampleos/sec] ==6000 bytes/buffer x sec;
hardware.sampler.start();`