//zalaczanie bibliotek #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> //deklaracja struktury struct sygnal { double amp, fs, ts, *taby, *tabx; int fp, lp; }; //prototypy funkcji double szum(); void wykres(int, double*, double*, char*); double funkcja (double, double); void zamien (double*, double*); void sortuj(int); void odszum(double*, int t, int, int); int main () { //deklaracje zmiennych struct sygnal s; char rs; int i, a, t; double T, tm, tn; int o=0; //program działa w petli, dopoki uzytkownik nie zdecyduje o zakonczeniu dzialania while(1) { s.amp=0; s.fp=0; s.ts=0; s.fs=0; //uzytkownik wybiera sygnal badz konczy dzialanie programu printf("Wybierz rodzaj sygnal do narysowania: \n a - sygnal nr 10;\n b - sygnal nr 15\n x - zakoncz dzialanie programu\n\n "); //warunek wyjścia z pętli if(rs=='x') break; //pobranie wartosci zmiennych od uzytkownika //obliczanie potrzebnych wartosci s.lp=(int)s.ts*s.fp+1; T=1/s.fs; // okres sygnału, upraszcza zapis a=s.amp*s.fs*4;// współczynik kierunkowy prostej będącej fragmentem sygnału //dynamiczna allokacja pamięci //pentla zapisujaca wartosci argumentow do tablicy for (i=0; i<s.lp; i++) { s.tabx[i]=(double)i*(1.0)/(double)s.fp; } //obliczanie wartosci dla argumetow w zaleznosci od wybranego sygnalu switch (rs){ case 'a': //pentla "liczy" numer okresu, w którym maja byc liczone wartosci for (o=0; o<=(s.ts*s.fs); o++) { for (i=0; i<s.lp; i++) { //warunek przedziału, dla którego wartości są liczone wg odpowiedniej funkcji if ((s.tabx[i]>=0+(T*o)) && (s.tabx[i]<(T/4)+(T*o))) { //wywołanie funkcji liczącej wartości dla argumentów z tabx i zapisującej je w taby } if ((s.tabx[i]>=(T/4)+(T*o)) && (s.tabx[i]<(T/2+T*o))) { } if ((s.tabx[i]>=(T/2)+(T*o)) && (s.tabx[i]<(3*T/4)+(T*o))) { } if ((s.tabx[i]>=(3*T/4)+(T*o)) && (s.tabx[i]<(7*T/8)+(T*o))) { } if ((s.tabx[i]>=(7*T/8)+(T*o)) && (s.tabx[i]<=(T+T*o))) { } } } break; case 'b': for (o=0; o<=(s.ts*s.fs); o++) { for (i=0; i<s.lp; i++) { if (s.tabx[i]>=(0+T*o) && s.tabx[i]<((T/2)+T*o)) { } if (s.tabx[i]>=((T/2)+T*o) && s.tabx[i]<=(T*(o+1))) { } } } break ; } //wywołanie funkcji rysującej wykres wykres(s.lp, s.tabx, s.taby,"wykres.html"); //petla podczas ktorej do wartosci taby[i] dodawana jest losowa wartosc, zaszumia wykres for(i=0; i<s.lp; i++) { s.taby[i]=s.taby[i]+szum(); } //wywołanie funkcji rysującej wykres zaszumiony wykres(s.lp, s.tabx, s.taby,"wykres_zaszumiony.html"); //pobranie od uzytkownika liczby probek do odszumiania //wywolanie funkcji odszumajacej wykres odszum (s.taby, t, s.lp, s.fp); } return 0; } // DEKLARACJE FUNKCJI //funkcja zaszumiajaca wykres double szum() { double z=0; int i; for (i=0; i<12; i++) { } z=z/600; return z; } //funkcja "rysująca prostą o zadanym kącie nachylenia" double funkcja (double a, double tx) { double ty; ty = a * (tx); return ty; } //funkcjia zamieniajaca miejscami 2 liczby, konieczna do sortowania void zamien(double *m, double *n) { double temp; temp=*m; *m=*n; *n=temp; } //funkcja sortujaca tablice t-elementowa void sortuj (int t, double tx[]) { int i, j; for (j=0; j<t; j++) { for (i=0; i<t-1; i++) { //jezeli wartosc po "lewej stronie" tablicy jest wieksza nastepuje zamiana miejsc if (tx[i]>tx[i+1]) { zamien (&tx[i], &tx[i+1]); } } } } //funkcja odzszumiajaca wykres void odszum (double *ty, int t, int lp, int fp) { double *ntx, *nty, *sty; int i,j; //allokacja dodatkowych tablic /*petle, w których do tablicy sty wpisywanych jest, w kazdym przebiegu zewnetrzenej petli, t-kolejnych wartosci z tablicy ty, a mediana z nich jest zapisywana po kolei do tabeli nty*/ for (i=0; i<(lp-t+1); i++) { for (j=0; j<t; j++) { sty[j]=ty[i+j]; } sortuj(t, sty); ntx[i]=(double)i/fp; if (t%2==0) nty[i]=(sty[t/2-1]+sty[t/2+1])/2; else nty[i]=sty[t/2]; } // wygenerowanie odszumionego wykresu wykres (lp-t+1, ntx, nty, "wykres_odszumiony.html"); //zwolnienie pa } //funkcja generujaca kod html dla wykresu Google Chart void wykres(int l,double *tx, double *ty, char nazwa[]){ FILE *fp; int i; for(i=0;i<l;i++){ } fprintf(fp,"var chart = new google.visualization.LineChart(document.getElementById('chart_div'));\n"); }