ddd

Dependencies:   mbed CMSIS_DSP_5

main.cpp

Committer:
javiervicente
Date:
2019-10-17
Revision:
7:b5d028a49c98
Parent:
6:2a9b1cc25f1b

File content as of revision 7:b5d028a49c98:

#include "mbed.h"
#include "datos.h"
#include "arm_math.h"

Timer timer;
int tiempo;

float resultado;

float calcularRMS(int16_t *datos, int longitud);
float calcularRMS2(int16_t *datos, int longitud);
float calcularRMS3(int16_t *datos, int longitud);

int main()
{

    timer.reset();
    timer.start();
    resultado=calcularRMS(datos, 500);
    timer.stop();
    printf("****El valor Vrms es %f calculado en %d us ****\n",resultado,timer.read_us());


    timer.reset();
    timer.start();
    resultado=calcularRMS2(datos, 500);
    timer.stop();
    printf("****El valor Vrms2 es %f calculado en %d us ****\n",resultado,timer.read_us());
    
    timer.reset();
    timer.start();
    resultado=calcularRMS3(datos, 500);
    timer.stop();
    printf("****El valor Vrms3 es %f calculado en %d us ****\n",resultado,timer.read_us());
}

float calcularRMS(int16_t *datos, int longitud)
{
    int64_t sumatorio=0;
    int32_t producto;
    float constante=0.1007080078125e-03; //3.3/2^15
    for (int n=0; n<longitud; n++) {
        producto=datos[n]*datos[n];
        sumatorio+=producto;
    }

    return sqrt((float)sumatorio/longitud)*constante;
}

float calcularRMS2(int16_t *datos, int longitud)
{
    float constante=1.007080078125000e-04; //3.3/(2^15)
    q15_t resultado=0.0;
    arm_rms_q15 ((q15_t *)(datos), longitud, &resultado);
    return resultado*constante;
}


float calcularRMS3(int16_t *datos, int longitud)
{

    int32_t producto;
    float constante=0.1007080078125e-03; //3.3/2^15
    int64_t sumatorio=datos[0]*datos[0];
    for (int n=1; n<longitud; n++) {
        producto=datos[n]*datos[n];
        sumatorio+=producto;
    }

    return sqrt((float)sumatorio/longitud)*constante;
}