Problem polega na tym, że robie coś nie tak w algorytmie dotyczącym filtrowania zaszumionej funkcji sinus.
Chodzi o funkcję filtr medianowy. W skrócie bierzemy 5 kolejnych wartości, sortujemy je i bierzemy wartość środkową czyli medianę i to jest nasza przefiltrowana wartosc. Coś się dzieje, ze wywala mi same 0. Do tego Program ma zapisywać wartosci do csv, jednak floaty zapisuje mi z kropką a excel czyta przecinki. Ktoś ma pomysł jak te 2 problemy rozwiązać?
void filtr_medianowy(int p, float *sinus_szum, float *filtr_on)
{
int i, j ;
int a,b ;
float y ;
float pomoc[5] ;
for(i=3; i<=p; i++)
{
for(j=0; j<=5; j++)
{
pomoc[j]=sinus_szum[i-2] ;
}
for( a=0; a<5; a++)
for( b=1; b<p-a; b++)
{
if(pomoc[b]>pomoc[b+1])
{
y=pomoc[b] ;
pomoc[b]=pomoc[b+1] ;
pomoc[b+1] = y ;
}
{
pomoc[3]=filtr_on[i] ;
}
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
void tablica_czasu(int p, float tp, float m, float *czas)
{
int i ;
for(i=0 ; i<=p ; i++)
czas[i] = tp+ i*m ;
}
void tablica_sinusa(int p, float A, float *czas, float *sin1, float cz, float fi)
{
int i ;
for(i=0; i<=p; i++)
sin1[i]= A*sin(2*M_PI*(czas[i])/cz+fi) ;
}
void filtr_medianowy(int p, float *sinus_szum, float *filtr_on)
{
int i, j ;
int a,b ;
float y ;
float pomoc[5] ;
for(i=3; i<=p; i++)
{
for(j=0; j<=5; j++)
{
pomoc[j]=sinus_szum[i-2] ;
}
for( a=0; a<5; a++)
for( b=1; b<p-a; b++)
{
if(pomoc[b]>pomoc[b+1])
{
y=pomoc[b] ;
pomoc[b]=pomoc[b+1] ;
pomoc[b+1] = y ;
}
{
pomoc[3]=filtr_on[i] ;
}
}
}
}
void tablica_szumu(int p, float *tablica_szumu)
{
srand(time(NULL));
int i ;
for(i=1; i<p; i++)
{
tablica_szumu[i]=(rand()%10 );
}
int max;
max=tablica_szumu[0];
for(i=0; i<p; i++)
{
if(tablica_szumu[i]>max)
max=tablica_szumu[i];
}
for(i=1; i<p; i++)
{
tablica_szumu[i]=(tablica_szumu[i] / max);
}
}
void drukuj(float *tablica, int p)
{
int i ;
for(i=0; i<p; i++)
{
printf("%f", tablica[i]) ;
puts("") ;
}
}
void zapisuj(int p, float *czas, float *szum, float *sinus)
{
int i;
FILE*plik;
plik=fopen("plik.csv", "w");
for(i=0; i<p; i++)
{
fprintf(plik, "%f;%f;%f;%f\n", szum[i], sinus[i],czas[i],sinus[i]+szum[i] );
}
fclose(plik);
}
int main()
{
int i ;
float a,tp,tk,f,fi ;
float cz,p,m,fo;
puts("PODAJ AMPLITUDE") ;
scanf("%f", &a);
puts("PODAJ CZAS POCZATKOWY") ;
scanf("%f", &tp);
puts("PODAJ CZAS KONCOWY") ;
scanf("%f", &tk);
puts("PODAJ CZESTOTLIWOSC");
scanf("%f", &f);
puts("PODAJ PRZESUNIECIE");
scanf("%f", &fi);
fo=2*f ;
m=1/fo ;
cz=tk-tp ;
p = cz/m ;
int y = p ;
float *sinus ;
float *czas ;
float *szum ;
float *filtr_on ;
float *sinus_szum ;
filtr_on=calloc(p,sizeof(float));
czas=calloc(p, sizeof(float));
sinus=calloc(p,sizeof(float));
szum=calloc(p, sizeof(float));
sinus_szum=calloc(p,sizeof(float)) ;
tablica_czasu(y,tp,m,czas) ;
tablica_sinusa(y,a,czas,sinus,cz,fi) ;
tablica_szumu(y,szum) ;
zapisuj( y,czas,szum,sinus) ;
for(i=0; i<=p; i++)
{
sinus_szum[i]=sinus[i]+szum[i] ;
}
drukuj(sinus_szum,y) ;
puts("***") ;
drukuj(filtr_on,y) ;
return 0 ;
}