Primeira versao

Dependencies:   mbed EthernetInterface mbed-rtos

Committer:
rebonatto
Date:
Wed Jun 25 14:56:54 2014 +0000
Revision:
0:6218d050b1b9
Child:
1:6c73db131ebc
Captura em 1Hz

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rebonatto 0:6218d050b1b9 1 #include "mbed.h"
rebonatto 0:6218d050b1b9 2 #include "stdio.h"
rebonatto 0:6218d050b1b9 3
rebonatto 0:6218d050b1b9 4 #define CONVERSAOAD 0.000021
rebonatto 0:6218d050b1b9 5
rebonatto 0:6218d050b1b9 6 #define CICLO 1
rebonatto 0:6218d050b1b9 7 #define AMOSTRAS 2048
rebonatto 0:6218d050b1b9 8 //#define INTERVALO (float) (1/CICLO)/AMOSTRAS
rebonatto 0:6218d050b1b9 9 #define INTERVALO 0.0004882812
rebonatto 0:6218d050b1b9 10
rebonatto 0:6218d050b1b9 11 #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
rebonatto 0:6218d050b1b9 12 #define PI 3.14159265358979323846F
rebonatto 0:6218d050b1b9 13
rebonatto 0:6218d050b1b9 14 LocalFileSystem local("local");
rebonatto 0:6218d050b1b9 15
rebonatto 0:6218d050b1b9 16 AnalogIn captura(p16);
rebonatto 0:6218d050b1b9 17
rebonatto 0:6218d050b1b9 18 DigitalOut myled(LED1);
rebonatto 0:6218d050b1b9 19
rebonatto 0:6218d050b1b9 20 float RMS(float *vet, int amostras);
rebonatto 0:6218d050b1b9 21 int gravaAmostras(float *vet, int amostras);
rebonatto 0:6218d050b1b9 22 void CalculateFFT(float *buffer, float *sen, float *cos, float *vm, int sign, int ch);
rebonatto 0:6218d050b1b9 23 float* ComplexFFT(float* data, int sign, int ch);
rebonatto 0:6218d050b1b9 24 float DFT(float *data, float *seno, float *coss);
rebonatto 0:6218d050b1b9 25 int gravaDFT(float *seno, float *coss, int amostras);
rebonatto 0:6218d050b1b9 26
rebonatto 0:6218d050b1b9 27 int main() {
rebonatto 0:6218d050b1b9 28 float vet[AMOSTRAS];
rebonatto 0:6218d050b1b9 29 //float controle[AMOSTRAS];
rebonatto 0:6218d050b1b9 30 float seno[AMOSTRAS];
rebonatto 0:6218d050b1b9 31 float coss[AMOSTRAS];
rebonatto 0:6218d050b1b9 32 float vm;
rebonatto 0:6218d050b1b9 33 int i, flag =0;
rebonatto 0:6218d050b1b9 34 Timer t;
rebonatto 0:6218d050b1b9 35 unsigned short int valor, maior=0, menor=0;
rebonatto 0:6218d050b1b9 36 float espera,rms;
rebonatto 0:6218d050b1b9 37 float media = 0;
rebonatto 0:6218d050b1b9 38
rebonatto 0:6218d050b1b9 39 printf("CONVERSAOAD %1.10f\n", CONVERSAOAD);
rebonatto 0:6218d050b1b9 40 printf("PORTA p16 Diferencial 2\n");
rebonatto 0:6218d050b1b9 41 printf("Ciclos (HZ) %d\n", CICLO);
rebonatto 0:6218d050b1b9 42 printf("Amostras %d\n", AMOSTRAS);
rebonatto 0:6218d050b1b9 43 printf("Intervalo %1.10f\n", INTERVALO);
rebonatto 0:6218d050b1b9 44
rebonatto 0:6218d050b1b9 45 for(int j =0; j < 50; j++){
rebonatto 0:6218d050b1b9 46 t.start();
rebonatto 0:6218d050b1b9 47 for(i=0; i < AMOSTRAS; i++){
rebonatto 0:6218d050b1b9 48 //controle[i] = t.read();
rebonatto 0:6218d050b1b9 49 valor = captura.read_u16();
rebonatto 0:6218d050b1b9 50 vet[i] = (float) (valor - 33575) / 10830; //acquire the value and convert the analog to digital
rebonatto 0:6218d050b1b9 51 /*
rebonatto 0:6218d050b1b9 52 if(i == 0)
rebonatto 0:6218d050b1b9 53 maior = menor = valor;
rebonatto 0:6218d050b1b9 54 if (valor > maior)
rebonatto 0:6218d050b1b9 55 maior = valor;
rebonatto 0:6218d050b1b9 56 if (valor < menor)
rebonatto 0:6218d050b1b9 57 menor = valor;
rebonatto 0:6218d050b1b9 58 */
rebonatto 0:6218d050b1b9 59 espera = (INTERVALO * (i+1)) - t.read();
rebonatto 0:6218d050b1b9 60 wait(espera);
rebonatto 0:6218d050b1b9 61 }
rebonatto 0:6218d050b1b9 62 printf("Acabou captura. Tempo %1.10f\n", t.read() );
rebonatto 0:6218d050b1b9 63
rebonatto 0:6218d050b1b9 64 //printf("Tempo de Captura %1.10f\n", t.read());
rebonatto 0:6218d050b1b9 65
rebonatto 0:6218d050b1b9 66 media=0;
rebonatto 0:6218d050b1b9 67 for(i=0; i < AMOSTRAS; i++){
rebonatto 0:6218d050b1b9 68 if(i == 0)
rebonatto 0:6218d050b1b9 69 maior = menor = valor;
rebonatto 0:6218d050b1b9 70 if (vet[i] > maior)
rebonatto 0:6218d050b1b9 71 maior = (unsigned short int) vet[i];
rebonatto 0:6218d050b1b9 72 if (vet[i] < menor)
rebonatto 0:6218d050b1b9 73 menor = (unsigned short int) vet[i];
rebonatto 0:6218d050b1b9 74 media += vet[i];
rebonatto 0:6218d050b1b9 75 }
rebonatto 0:6218d050b1b9 76
rebonatto 0:6218d050b1b9 77 //t.reset();
rebonatto 0:6218d050b1b9 78 //vm = DFT(vet, seno, coss);
rebonatto 0:6218d050b1b9 79 //CalculateFFT(vet, seno, coss, &vm, 1, 0);
rebonatto 0:6218d050b1b9 80 //gravaDFT(seno, coss, AMOSTRAS);
rebonatto 0:6218d050b1b9 81 //printf("Calculou DFT em %fs\n", t.read());
rebonatto 0:6218d050b1b9 82 rms = RMS(vet, AMOSTRAS);
rebonatto 0:6218d050b1b9 83 if (rms > 0.6){
rebonatto 0:6218d050b1b9 84 flag++;
rebonatto 0:6218d050b1b9 85 if (flag > 1){
rebonatto 0:6218d050b1b9 86 gravaAmostras(vet, AMOSTRAS);
rebonatto 0:6218d050b1b9 87 break;
rebonatto 0:6218d050b1b9 88 printf("Gravou amostras\n");
rebonatto 0:6218d050b1b9 89 flag = -1000;
rebonatto 0:6218d050b1b9 90 }
rebonatto 0:6218d050b1b9 91 }
rebonatto 0:6218d050b1b9 92 printf("[%d] RMS %1.8f Menor %d Maior %d Media %1.8f VM %1.8f\n", j, RMS(vet, AMOSTRAS), menor, maior, vm, (float) media/AMOSTRAS);
rebonatto 0:6218d050b1b9 93
rebonatto 0:6218d050b1b9 94 //wait(5);
rebonatto 0:6218d050b1b9 95 /*
rebonatto 0:6218d050b1b9 96 for(i=0; i < AMOSTRAS; i++){
rebonatto 0:6218d050b1b9 97 printf("[%d] Valor %f\tTempo %1.10f\n", i, vet[i], controle[i]);
rebonatto 0:6218d050b1b9 98 }
rebonatto 0:6218d050b1b9 99 float maior =-10;
rebonatto 0:6218d050b1b9 100 float media = 0;
rebonatto 0:6218d050b1b9 101 for(i=2; i < AMOSTRAS; i++){
rebonatto 0:6218d050b1b9 102 espera = (controle[i] - controle[i-1] - INTERVALO);
rebonatto 0:6218d050b1b9 103 media += espera;
rebonatto 0:6218d050b1b9 104 if (espera > 0.000001){
rebonatto 0:6218d050b1b9 105 //printf("[%d] Diferenca %f\n", i, espera);
rebonatto 0:6218d050b1b9 106 if (espera > maior)
rebonatto 0:6218d050b1b9 107 maior = espera;
rebonatto 0:6218d050b1b9 108 }
rebonatto 0:6218d050b1b9 109 }
rebonatto 0:6218d050b1b9 110 printf("[%d] MAior difrenca %1.10f Media %1.10f\n", j, maior, (float) media/AMOSTRAS);
rebonatto 0:6218d050b1b9 111 */
rebonatto 0:6218d050b1b9 112 }
rebonatto 0:6218d050b1b9 113 printf("FINAL");
rebonatto 0:6218d050b1b9 114 while(1) {
rebonatto 0:6218d050b1b9 115 myled = 1;
rebonatto 0:6218d050b1b9 116 wait(0.2);
rebonatto 0:6218d050b1b9 117 myled = 0;
rebonatto 0:6218d050b1b9 118 wait(0.2);
rebonatto 0:6218d050b1b9 119 }
rebonatto 0:6218d050b1b9 120 }
rebonatto 0:6218d050b1b9 121
rebonatto 0:6218d050b1b9 122 void CalculateFFT(float *buffer, float *sen, float *cos, float *vm, int sign, int ch)
rebonatto 0:6218d050b1b9 123 {
rebonatto 0:6218d050b1b9 124 int i;
rebonatto 0:6218d050b1b9 125 //float value[256];
rebonatto 0:6218d050b1b9 126 /*
rebonatto 0:6218d050b1b9 127 printf("Tamanho float %lu\n", sizeof(float));
rebonatto 0:6218d050b1b9 128 printf("Tamanho double %lu\n", sizeof(double));
rebonatto 0:6218d050b1b9 129 printf("Tamanho unsigned short int %lu\n", sizeof(unsigned short int));
rebonatto 0:6218d050b1b9 130 printf("Tamanho unsigned long %lu\n", sizeof(unsigned long));
rebonatto 0:6218d050b1b9 131 printf("Tamanho unsigned long long %lu\n", sizeof(unsigned long long));
rebonatto 0:6218d050b1b9 132
rebonatto 0:6218d050b1b9 133
rebonatto 0:6218d050b1b9 134 for(int i=0; i < Settings::get_Samples(); i++)
rebonatto 0:6218d050b1b9 135 printf("%d*",buffer[i]);
rebonatto 0:6218d050b1b9 136 printf("\n");
rebonatto 0:6218d050b1b9 137 */
rebonatto 0:6218d050b1b9 138 //printf("[0] %d %d %d %d\n", buffer[0], buffer[100], buffer[200], buffer[255]);
rebonatto 0:6218d050b1b9 139 /*
rebonatto 0:6218d050b1b9 140 for(i=0; i<Settings::get_Samples();i++)
rebonatto 0:6218d050b1b9 141 value[i]= (float) ( (buffer[i] - Settings::get_Offset(ch)) / Settings::get_Gain(ch) );
rebonatto 0:6218d050b1b9 142 */
rebonatto 0:6218d050b1b9 143
rebonatto 0:6218d050b1b9 144 printf("Chegou chamada\n");
rebonatto 0:6218d050b1b9 145 float* fft = ComplexFFT(buffer,1, 0); //deve desalocar memoria do ptr retornado
rebonatto 0:6218d050b1b9 146
rebonatto 0:6218d050b1b9 147 /*
rebonatto 0:6218d050b1b9 148 Mapa do vetor fft.
rebonatto 0:6218d050b1b9 149 O vetor tem 2 vezes o no. de amostras. Cada par de valores (portanto n e n+1), representam, respectivamente
rebonatto 0:6218d050b1b9 150 COS e SEN.
rebonatto 0:6218d050b1b9 151 Os dois primeiros valores reprensetam a frequencia 0Hz, portanto sao atribuidas ao valor medio.
rebonatto 0:6218d050b1b9 152 Os demais pares de valores representam a fundamental e suas harmonicas,
rebonatto 0:6218d050b1b9 153 sendo que se a fundamental for 60Hz, teremos: 60,120,180,240...
rebonatto 0:6218d050b1b9 154 Para a nossa aplicacao apenas as 12 primeiras harmonicas serao utilizadas (720Hz)
rebonatto 0:6218d050b1b9 155 */
rebonatto 0:6218d050b1b9 156
rebonatto 0:6218d050b1b9 157 //*vm = DFT(value, sen, cos);
rebonatto 0:6218d050b1b9 158 *vm = fft[0];
rebonatto 0:6218d050b1b9 159
rebonatto 0:6218d050b1b9 160 for(int i=1;i<AMOSTRAS/2;i++)
rebonatto 0:6218d050b1b9 161 {
rebonatto 0:6218d050b1b9 162 cos[i-1] = fft[i*2];
rebonatto 0:6218d050b1b9 163 sen[i-1] = fft[i*2+1];
rebonatto 0:6218d050b1b9 164 }
rebonatto 0:6218d050b1b9 165
rebonatto 0:6218d050b1b9 166 for(int i=0;i<AMOSTRAS;i++)
rebonatto 0:6218d050b1b9 167 {
rebonatto 0:6218d050b1b9 168 printf("[%dHz]\tsen %.4f\tcos %.4f\n", (i+1)*60, sen[i], cos[i]);
rebonatto 0:6218d050b1b9 169 if (i > 100)
rebonatto 0:6218d050b1b9 170 break;
rebonatto 0:6218d050b1b9 171 }
rebonatto 0:6218d050b1b9 172
rebonatto 0:6218d050b1b9 173 free(fft);
rebonatto 0:6218d050b1b9 174 //printf("[3] %d %d %d %d\n", buffer[0], buffer[100], buffer[200], buffer[255]);
rebonatto 0:6218d050b1b9 175 }
rebonatto 0:6218d050b1b9 176
rebonatto 0:6218d050b1b9 177
rebonatto 0:6218d050b1b9 178 float* ComplexFFT(float* data, int sign, int ch)
rebonatto 0:6218d050b1b9 179 {
rebonatto 0:6218d050b1b9 180
rebonatto 0:6218d050b1b9 181 //variables for the fft
rebonatto 0:6218d050b1b9 182 unsigned long n,mmax,m,j,istep,i;
rebonatto 0:6218d050b1b9 183 //double wtemp,wr,wpr,wpi,wi,theta,tempr,tempi;
rebonatto 0:6218d050b1b9 184 float wtemp,wr,wpr,wpi,wi,theta,tempr,tempi;
rebonatto 0:6218d050b1b9 185 float *vector;
rebonatto 0:6218d050b1b9 186 //the complex array is real+complex so the array
rebonatto 0:6218d050b1b9 187 //as a size n = 2* number of complex samples
rebonatto 0:6218d050b1b9 188 //real part is the data[index] and
rebonatto 0:6218d050b1b9 189 //the complex part is the data[index+1]
rebonatto 0:6218d050b1b9 190
rebonatto 0:6218d050b1b9 191 //new complex array of size n=2*sample_rate
rebonatto 0:6218d050b1b9 192 //if(vector==0)
rebonatto 0:6218d050b1b9 193 //vector=(float*)malloc(2*SAMPLE_RATE*sizeof(float)); era assim, define estava em Capture.h
rebonatto 0:6218d050b1b9 194
rebonatto 0:6218d050b1b9 195 printf("Chegou compex\n");
rebonatto 0:6218d050b1b9 196
rebonatto 0:6218d050b1b9 197 vector=(float*)malloc(2*AMOSTRAS*sizeof(float));
rebonatto 0:6218d050b1b9 198 if (vector == NULL)
rebonatto 0:6218d050b1b9 199 printf("Sem memoria\n");
rebonatto 0:6218d050b1b9 200 memset(vector,0,2*AMOSTRAS*sizeof(float));
rebonatto 0:6218d050b1b9 201
rebonatto 0:6218d050b1b9 202 //put the real array in a complex array
rebonatto 0:6218d050b1b9 203 //the complex part is filled with 0's
rebonatto 0:6218d050b1b9 204 //the remaining vector with no data is filled with 0's
rebonatto 0:6218d050b1b9 205 //for(n=0; n<SAMPLE_RATE;n++)era assim, define estava em Capture.h
rebonatto 0:6218d050b1b9 206
rebonatto 0:6218d050b1b9 207 printf("Alocou\n");
rebonatto 0:6218d050b1b9 208
rebonatto 0:6218d050b1b9 209 for(n=0; n<AMOSTRAS;n++)
rebonatto 0:6218d050b1b9 210 {
rebonatto 0:6218d050b1b9 211 if(n<AMOSTRAS){
rebonatto 0:6218d050b1b9 212 vector[2*n]= (float) data[n] ;
rebonatto 0:6218d050b1b9 213 // printf("%.4f$", vector[2*n]);
rebonatto 0:6218d050b1b9 214 }
rebonatto 0:6218d050b1b9 215 else
rebonatto 0:6218d050b1b9 216 vector[2*n]=0;
rebonatto 0:6218d050b1b9 217 vector[2*n+1]=0;
rebonatto 0:6218d050b1b9 218 }
rebonatto 0:6218d050b1b9 219
rebonatto 0:6218d050b1b9 220 printf("\n");
rebonatto 0:6218d050b1b9 221
rebonatto 0:6218d050b1b9 222 //printf("[1] %d %d %d %d\n", data[0], data[100], data[200], data[255]);
rebonatto 0:6218d050b1b9 223
rebonatto 0:6218d050b1b9 224 //binary inversion (note that the indexes
rebonatto 0:6218d050b1b9 225 //start from 0 witch means that the
rebonatto 0:6218d050b1b9 226 //real part of the complex is on the even-indexes
rebonatto 0:6218d050b1b9 227 //and the complex part is on the odd-indexes)
rebonatto 0:6218d050b1b9 228 //n=SAMPLE_RATE << 1; //multiply by 2era assim, define estava em Capture.h
rebonatto 0:6218d050b1b9 229 n=AMOSTRAS << 1; //multiply by 2
rebonatto 0:6218d050b1b9 230 j=0;
rebonatto 0:6218d050b1b9 231 for (i=0;i<n/2;i+=2) {
rebonatto 0:6218d050b1b9 232 if (j > i) {
rebonatto 0:6218d050b1b9 233 SWAP(vector[j],vector[i]);
rebonatto 0:6218d050b1b9 234 SWAP(vector[j+1],vector[i+1]);
rebonatto 0:6218d050b1b9 235 if((j/2)<(n/4)){
rebonatto 0:6218d050b1b9 236 SWAP(vector[(n-(i+2))],vector[(n-(j+2))]);
rebonatto 0:6218d050b1b9 237 SWAP(vector[(n-(i+2))+1],vector[(n-(j+2))+1]);
rebonatto 0:6218d050b1b9 238 }
rebonatto 0:6218d050b1b9 239 }
rebonatto 0:6218d050b1b9 240 m=n >> 1;
rebonatto 0:6218d050b1b9 241 while (m >= 2 && j >= m) {
rebonatto 0:6218d050b1b9 242 j -= m;
rebonatto 0:6218d050b1b9 243 m >>= 1;
rebonatto 0:6218d050b1b9 244 }
rebonatto 0:6218d050b1b9 245 j += m;
rebonatto 0:6218d050b1b9 246 }
rebonatto 0:6218d050b1b9 247 //end of the bit-reversed order algorithm
rebonatto 0:6218d050b1b9 248
rebonatto 0:6218d050b1b9 249 //Danielson-Lanzcos routine
rebonatto 0:6218d050b1b9 250 mmax=2;
rebonatto 0:6218d050b1b9 251 while (n > mmax) {
rebonatto 0:6218d050b1b9 252 istep=mmax << 1;
rebonatto 0:6218d050b1b9 253 theta=sign*(2*PI/mmax);
rebonatto 0:6218d050b1b9 254 wtemp=sin(0.5*theta);
rebonatto 0:6218d050b1b9 255 wpr = -2.0*wtemp*wtemp;
rebonatto 0:6218d050b1b9 256 wpi=sin(theta);
rebonatto 0:6218d050b1b9 257 wr=1.0;
rebonatto 0:6218d050b1b9 258 wi=0.0;
rebonatto 0:6218d050b1b9 259 for (m=1;m<mmax;m+=2) {
rebonatto 0:6218d050b1b9 260 for (i=m;i<=n;i+=istep) {
rebonatto 0:6218d050b1b9 261 j=i+mmax;
rebonatto 0:6218d050b1b9 262 tempr=wr*vector[j-1]-wi*vector[j];
rebonatto 0:6218d050b1b9 263 tempi=wr*vector[j]+wi*vector[j-1];
rebonatto 0:6218d050b1b9 264 vector[j-1]=vector[i-1]-tempr;
rebonatto 0:6218d050b1b9 265 vector[j]=vector[i]-tempi;
rebonatto 0:6218d050b1b9 266 vector[i-1] += tempr;
rebonatto 0:6218d050b1b9 267 vector[i] += tempi;
rebonatto 0:6218d050b1b9 268 }
rebonatto 0:6218d050b1b9 269 wr=(wtemp=wr)*wpr-wi*wpi+wr;
rebonatto 0:6218d050b1b9 270 wi=wi*wpr+wtemp*wpi+wi;
rebonatto 0:6218d050b1b9 271 }
rebonatto 0:6218d050b1b9 272 mmax=istep;
rebonatto 0:6218d050b1b9 273 }
rebonatto 0:6218d050b1b9 274 //end of the algorithm
rebonatto 0:6218d050b1b9 275
rebonatto 0:6218d050b1b9 276 // Ajustes a FFT
rebonatto 0:6218d050b1b9 277 for(i = 0; i < AMOSTRAS; i++ ){
rebonatto 0:6218d050b1b9 278 vector[i] = (float) ((2 * vector[i]) / AMOSTRAS );
rebonatto 0:6218d050b1b9 279 /*
rebonatto 0:6218d050b1b9 280 if (i % 2 == 1)
rebonatto 0:6218d050b1b9 281 vector[i] = vector[i] * -1;
rebonatto 0:6218d050b1b9 282 */
rebonatto 0:6218d050b1b9 283 }
rebonatto 0:6218d050b1b9 284
rebonatto 0:6218d050b1b9 285 //printf("[2] %d %d %d %d\n", data[0], data[100], data[200], data[255]);
rebonatto 0:6218d050b1b9 286
rebonatto 0:6218d050b1b9 287 return vector;
rebonatto 0:6218d050b1b9 288 }
rebonatto 0:6218d050b1b9 289
rebonatto 0:6218d050b1b9 290 float DFT(float *data, float *seno, float *coss){
rebonatto 0:6218d050b1b9 291 int i, j;
rebonatto 0:6218d050b1b9 292
rebonatto 0:6218d050b1b9 293 printf("Entrou DFT\n");
rebonatto 0:6218d050b1b9 294
rebonatto 0:6218d050b1b9 295 for(i=0; i < AMOSTRAS; i++)
rebonatto 0:6218d050b1b9 296 seno[i] = coss[i] = 0;
rebonatto 0:6218d050b1b9 297
rebonatto 0:6218d050b1b9 298 for(i=0; i < AMOSTRAS; i++){
rebonatto 0:6218d050b1b9 299 for(j = 0; j < AMOSTRAS; j++ ){
rebonatto 0:6218d050b1b9 300 coss[j] += (data[i] * (cos( (2 * PI * i * j) / AMOSTRAS ) ) ) ;
rebonatto 0:6218d050b1b9 301 seno[j] += (data[i] * (sin( (2 * PI * i * j) / AMOSTRAS ) ) ) ;
rebonatto 0:6218d050b1b9 302 }
rebonatto 0:6218d050b1b9 303 }
rebonatto 0:6218d050b1b9 304 printf("Primeiro Laco\n");
rebonatto 0:6218d050b1b9 305 for(j = 1; j < AMOSTRAS; j++ ){
rebonatto 0:6218d050b1b9 306 coss[j] = 2 * coss[j] / AMOSTRAS;
rebonatto 0:6218d050b1b9 307 seno[j] = 2 * seno[j] / AMOSTRAS ;
rebonatto 0:6218d050b1b9 308 }
rebonatto 0:6218d050b1b9 309
rebonatto 0:6218d050b1b9 310 printf("Segundo Laco\n");
rebonatto 0:6218d050b1b9 311 coss[0] = coss[0] / AMOSTRAS;
rebonatto 0:6218d050b1b9 312 seno[0] = seno[0] / AMOSTRAS;
rebonatto 0:6218d050b1b9 313 return (float) (coss[0] + seno[0] );
rebonatto 0:6218d050b1b9 314 }
rebonatto 0:6218d050b1b9 315
rebonatto 0:6218d050b1b9 316 int gravaDFT(float *seno, float *coss, int amostras){
rebonatto 0:6218d050b1b9 317 int i;
rebonatto 0:6218d050b1b9 318 FILE *f = fopen("/local/resultados.txt","w");
rebonatto 0:6218d050b1b9 319
rebonatto 0:6218d050b1b9 320 if(f == NULL)
rebonatto 0:6218d050b1b9 321 {
rebonatto 0:6218d050b1b9 322 printf("Error creating file resultados.txt\r\n");
rebonatto 0:6218d050b1b9 323 return 0;
rebonatto 0:6218d050b1b9 324 }
rebonatto 0:6218d050b1b9 325
rebonatto 0:6218d050b1b9 326 fprintf(f, "Arquivo de Resultados\n");
rebonatto 0:6218d050b1b9 327 for(i=0; i < amostras; i++){
rebonatto 0:6218d050b1b9 328 fprintf(f,"%1.4f\t%1.4f\n", seno[i], coss[i]);
rebonatto 0:6218d050b1b9 329 }
rebonatto 0:6218d050b1b9 330 fprintf(f,"\r\n");
rebonatto 0:6218d050b1b9 331 fclose(f);
rebonatto 0:6218d050b1b9 332 return (1);
rebonatto 0:6218d050b1b9 333 }
rebonatto 0:6218d050b1b9 334
rebonatto 0:6218d050b1b9 335
rebonatto 0:6218d050b1b9 336 int gravaAmostras(float *vet, int amostras){
rebonatto 0:6218d050b1b9 337 int i;
rebonatto 0:6218d050b1b9 338 FILE *f = fopen("/local/amostras.txt","w");
rebonatto 0:6218d050b1b9 339
rebonatto 0:6218d050b1b9 340 if(f == NULL)
rebonatto 0:6218d050b1b9 341 {
rebonatto 0:6218d050b1b9 342 printf("Error creating file amostras.txt\r\n");
rebonatto 0:6218d050b1b9 343 return 0;
rebonatto 0:6218d050b1b9 344 }
rebonatto 0:6218d050b1b9 345
rebonatto 0:6218d050b1b9 346 fprintf(f, "Arquivo de Amostras\n");
rebonatto 0:6218d050b1b9 347 for(i=0; i < amostras; i++){
rebonatto 0:6218d050b1b9 348 fprintf(f,"%1.4f\n", vet[i]);
rebonatto 0:6218d050b1b9 349 printf("%1.4f*", vet[i]);
rebonatto 0:6218d050b1b9 350 }
rebonatto 0:6218d050b1b9 351 fprintf(f,"\r\n");
rebonatto 0:6218d050b1b9 352 fclose(f);
rebonatto 0:6218d050b1b9 353 return (1);
rebonatto 0:6218d050b1b9 354 }
rebonatto 0:6218d050b1b9 355
rebonatto 0:6218d050b1b9 356
rebonatto 0:6218d050b1b9 357 float RMS(float *vet, int amostras){
rebonatto 0:6218d050b1b9 358 int i;
rebonatto 0:6218d050b1b9 359 float aux, soma=0;
rebonatto 0:6218d050b1b9 360
rebonatto 0:6218d050b1b9 361 for(i=0; i < amostras; i++){
rebonatto 0:6218d050b1b9 362 aux = vet[i] * vet[i];
rebonatto 0:6218d050b1b9 363 soma += aux;
rebonatto 0:6218d050b1b9 364 }
rebonatto 0:6218d050b1b9 365 soma = (float) soma / amostras;
rebonatto 0:6218d050b1b9 366 return (sqrt(soma));
rebonatto 0:6218d050b1b9 367 }