1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| //bibliotheques
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//prototypes des fonctions
int Modif_Ecg(float Largeur_P,float Amplitude_P,float Largeur_H,float Amplitude_H,float Distance_S_T,float Largeur_T,float Amplitude_T,float Pulses_Minute);
int Interpolation(float Buff[], long * Taille_Buff);
//fonction main
void main(void)
{
//appel a la fonction Modif_Ecg
Modif_Ecg(1,2,3,4,5,6,7,9);
}
//fonction Modif_Ecg
int Modif_Ecg(float Largeur_P,float Amplitude_P,float Largeur_H,float Amplitude_H,float Distance_S_T,float Largeur_T,float Amplitude_T,float Pulses_Minute)
{
//declaration des variables
float fin_echantillon =301;
float debut_p =44;
float fin_p =103;
float debut_q =104;
float fin_q =114;
float debut_r =115;
float fin_r =130;
float debut_s =131;
float fin_s =143;
float debut_t =144;
float fin_t =243;
FILE * Pointeur_Fichier;
long Taille_Buffer=2000;
float * Buffer;
char * Chaine;
int i=0;
int j=0;
int k=0;
//ouverture du fichier contenant le signal echantillonné
Pointeur_Fichier =fopen("echantillons_ecg.dat", "r");
if (Pointeur_Fichier==NULL) return (1);
//allocation de memoire pour le buffer
Buffer = (float *) malloc (Taille_Buffer*sizeof(float));
if (Buffer == NULL) return (2);
//allocation de memoire pour la chaine de caractere
Chaine = (char *) malloc (20);
if (Chaine == NULL) return (3);
//recuperation des float stockes dans le fichier texte
while(fgets(Chaine, 20, Pointeur_Fichier)!=NULL)
{
if(Chaine!=NULL)
{
if (i==Taille_Buffer) Taille_Buffer=Taille_Buffer*2;
Buffer = (float *) realloc (Buffer, Taille_Buffer*sizeof(float));
Buffer[i]= (float) (atof(Chaine));
}
i++;
}
//allocation de memoire au plus juste pour le buffer
Taille_Buffer=i;
Buffer = (float *) realloc (Buffer, Taille_Buffer*sizeof(float));
//fermeture du fichier
fclose (Pointeur_Fichier);
//affichage du buffer
for(j=0;j<Taille_Buffer;j++)
{
printf("%f\n",Buffer[j]);
}
printf("\n\n\n");
//interpolation entre les points du buffer existant
for(j=0;j<1;j++)
{
Interpolation(Buffer, &Taille_Buffer);
}
//affichage du buffer apres interpolation
for(k=0;k<Taille_Buffer;k++)
{
printf("%f\n",Buffer[k]);
}
//liberation de la memoire du buffer
free (Buffer);
return (0);
}
//fonction d'interpolation pour doubler la taille du buffer
int Interpolation(float * Buff, long * Taille_Buff)
{
//declaration des variables
long Taille_Buff_Temp;
float * Buff_Temp;
int i=0;
//recopie du buffer existant et de sa taille dans des variables temporaires.
Taille_Buff_Temp = *Taille_Buff;
Buff_Temp = (float *) malloc (Taille_Buff_Temp*sizeof(float));
for(i=0;i<*Taille_Buff;i++)
{
Buff_Temp[i]=Buff[i];
}
//on double la taille du buffer pour inserer les valeurs moyennes
*Taille_Buff=(*Taille_Buff)*2-1;
Buff = (float *) realloc (Buff, (*Taille_Buff)*sizeof(float));
//remplissage du buffer (anciennes et nouvelles valeurs)
for(i=0;i<(*Taille_Buff);i++)
{
//recopie des valeurs existantes
if((i%2)==0)
{
Buff[i]=Buff_Temp[i/2];
}
//ajout des valeurs intermediaires
else
{
Buff[i]= ( Buff_Temp[(i-1)/2] + Buff_Temp[(i+1)/2] ) /2;
}
}
//affichage du nouveau buffer avant retour a la fonction principale
for(i=0;i<(*Taille_Buff);i++)
{
printf("%f\n",Buff[i]);
}
//liberation memoire
free(Buff_Temp);
return (0);
} |
Partager