Engineering School, 2nd year
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
2.6 KiB

#include <string.h>
#include "algo1.h"
#include "buffer.h"
static Energy localAverageEnergy = 0;
static FILE * gnuplotDataFile = NULL;
static char * baseName = NULL;
static char gpDataFile[256];
static void computeInstantEnergy(int nb) {
Energy e = 0;
int i;
Block * b = block(nb);
for (i = 0; i < N; i++) {
e += b->samples[i][LEFT] * b->samples[i][LEFT]
+ b->samples[i][RIGHT] * b->samples[i][RIGHT];
}
b->instantEnergy = e;
}
static void computeLocalAverageEnergy() {
int i;
Energy avgEnergy = 0;
Block * b = NULL;
for (i = 0; i < N_BLOCKS; i++) {
b = block(i);
avgEnergy += b->instantEnergy;
}
localAverageEnergy = avgEnergy / N_BLOCKS;
}
void initAlgo1(char * bn) {
char str[256];
baseName = bn;
strncpy(str, baseName, 255)[255] = '\0';
strncat(str, ".dat", 255 - strlen(str));
/* backup file name */
strncpy(gpDataFile, str, 255)[255] = '\0';
gnuplotDataFile = fopen(gpDataFile, "w");
fprintf(gnuplotDataFile, "# Gnuplot data file\n");
fprintf(gnuplotDataFile, "# block nb, instant energy, local avg energ, ratio, der1(ratio)\n");
}
void stepAlgo1(void) {
int i = curBlock();
static double prevR = 0;
computeInstantEnergy(i);
if (isBufferFull()) {
double ratio = (double) block(i)->instantEnergy / (double) localAverageEnergy;
fprintf(gnuplotDataFile, "%8d %16lu ", blocksRead(), block(i)->instantEnergy);
computeLocalAverageEnergy();
fprintf(gnuplotDataFile, "%16lu ", localAverageEnergy);
fprintf(gnuplotDataFile, "%.3f ", ratio);
fprintf(gnuplotDataFile, "%.3f ", ratio - prevR);
fprintf(gnuplotDataFile, "\n");
prevR = ratio;
}
}
void finalizeAlgo1(void) {
char str[256];
fclose(gnuplotDataFile);
strncpy(str, baseName, 255)[255] = '\0';
strncat(str, ".plot", 255 - strlen(str));
FILE * gpFile = fopen(str, "w");
fprintf(gpFile, "# GnuPlot instruction file\n");
fprintf(gpFile, "set xlabel \"samples\"\n");
fprintf(gpFile, "set ylabel \"relative sound energy\"\n");
fprintf(gpFile, "set style data lines\n");
fprintf(gpFile, "set terminal pdf enhanced\n");
strncpy(str, baseName, 255)[255] = '\0';
strncat(str, "-ratio.pdf", 255 - strlen(str));
fprintf(gpFile, "set output \"%s\"\n", str);
fprintf(gpFile, "plot \"%s\" using 1:4 title 'Relative sound energy of %s'\n", gpDataFile, baseName);
strncpy(str, baseName, 255)[255] = '\0';
strncat(str, "-dratio.pdf", 255 - strlen(str));
fprintf(gpFile, "set output \"%s\"\n", str);
fprintf(gpFile, "set ylabel \"variation of relative sound energy\"\n");
fprintf(gpFile, "plot \"%s\" using 1:5 title 'Relative sound energy (1st der) of %s'\n", gpDataFile, baseName);
fclose(gpFile);
}