DOC

tinyos fft

By Curtis Bennett,2014-05-27 09:45
9 views 0
tinyos fft

Signor Balvis,

    una prima (grezza) controprova potrebbe essere quella di (se conosce

    quanto deve essere il valore

    corretto del risultato in anticipo) accendere dei led se il valore è

    quello giusto. Del tipo:

if (zz.s[0] == <VALORE CORRETTO>) && (zz.s[1] == < VALORE CORRETTO >) &&

    .. )

     call Leds.redOn();

Se il led si accende il risultato è corretto ma ci sono dei problemi

    nell'invio. In questo caso

    il problema è quasi sicuramente nel buffer di invio. Perchè accede a

    partire dalla posizione 10

    di data ? Provi da 0.

    Inoltre ha allocato un messaggio di tipo Tos_Msg a cui poi farà puntare

    il puntatore

    radio_msg_ptr ?

    Si assicuri che tutto funzioni mettendo nel pacchetto quantità note e

    vedendo se vengono

    visualizzate correttamente.

Cordiali saluti

    Andrea

balvis at pte.enel.it wrote:

>Hy,

    >I've implemented an algorithm of integer FFT for micaz, but I've some

    >problems:

    >

    >1) I tested the FFT with TOSSIM for check the correct result and it works

    >

    >2) I tested the FFT on micaz, but I can't read the result of the

    >computation, because I put the result in a int32_t variable and when I

    go

    >to write this variable in the packet (to read the packet with

    >MessageCenter java) it writes "zero". I thought that the problem was in

    >the different data types: the value in the packet must be int16_t, the

    >result is in int32_t. Then I used a type union:

    >

    >typedef union {

> int8_t s[4];

    > int32_t i;

    > } UDATA;

    >

    >UDATA z;

    >

    >

    >In this way I can put the result in: >

    >z.i=(int32_t)result;

    >

    >and when I go to write the result in the packet I use the union:

    >

    >radio_msg_ptr->data[10] = zz.s[0]; >radio_msg_ptr->data[10+2] = zz.s[1]; >radio_msg_ptr->data[10+4] = zz.s[2]; >radio_msg_ptr->data[10+6] = zz.s[3]; >

    >But it still doesn't work. Why?? >Can anybody help me? Thanks in advance. >

    >PS: I put the code of the FFT computation >

    >

    >int16_t FFT(int16_t kk[], int16_t fr[], int16_t isign, int16_t *Ampl,

    >int16_t *Freq) {

    >

    >

    > //variables for trigonometric recurrences > int32_t a,b,c,d,i,m;

    > int16_t idx,max,rms;

    > a = b = c = 0;

    >

    > call Leds.yellowOn();

    > BinaryInversion(datas); > Danielson(datas,isign); > max = 0; idx = 0;

    > rms = 1414L;

    > for (i=0,m=0;i<NSIGNAL;i+=2,m++) { > a=(int32_t)(kk[i]*kk[i]); > b=(int32_t)(kk[i+1]*kk[i+1]); > c = sqrt(c);

    > c=(a+b);

    > c=sqrt(c);

    > d=((c*100)/NSIGNAL)/100; > fr[m]=(d*rms)/1000; > if(fr[m]>max) { > max=fr[m]; > z.i=fr[m]; > idx=m;

    > }

    > }

    >

    > *Ampl = max; //memorizzati il valore di picco e la

    >componente relativa li memorizzo nel pacchetto

    > *Freq = idx;

    > call Leds.yellowOff(); > post send_radio_msg(); > return(0);

    > }

    >

    >

Report this document

For any questions or suggestions please email
cust-service@docsford.com