Mam do napisania program, który będzie miał za zadanie wygenerowanie sinusa z parametrami zadanymi przez użytkownika. Program ma również zaszumić ten sygnał otworzyć i zapisać go z pliku, albo odczytać dane z pliku i na tej bazie robić na razie mam fragmenty kodu, ale jak zwykle utknęłam, bo jakoś C jest dla mnie ciężkie do zrozumienia. Czy ktoś mógłby pomóc?
Plik main:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "parametry.h"
#include "sygnal.h"
#include "zapisiodczyt.h"
int main(void)
{
FILE *plik;
plik=fopen("sygnal.txt", "w");
Parametry p={1,0,1,0,10,1};
Sygnal s;
wczytaj(&p);
generuj(Parametry *p, Sygnal *s);
wyswietlParametry(&p);
fclose(plik);
fflush(stdout);
return 0;
}
Parametry.h:
#ifndef PARAMETRY_H
#define PARAMETRY_H
#endif // PARAMETRY_H
#pragma once
#include <stdio.h>
typedef struct Parametry
{
double A, A0, fs, fi, fp;
int t;
}Parametry;
void wczytaj(Parametry *p);
void wyswietlParametry(Parametry *p);
void wczytaj(Parametry *p)
{
printf("Podaj amplitude sygnalu: ");
scanf("%lf", &p->A);
printf("Podaj czas trwania sygnalu: ");
scanf("%d", &p->t);
printf("Podaj czestotliwosc sygnalu: ");
scanf("%lf", &p->fs);
printf("Podaj przesuniecie: ");
scanf("%lf", &p->fi);
printf("Podaj amplitude A0: ");
scanf("%lf", &p->A0);
printf("Podaj czestotliwosc probkowania: ");
scanf("%lf", &p->fp);
}
void wyswietlParametry(Parametry *p)
{
printf("Amplituda sygnalu: %.1lf\n", p->A);
printf("Czas trwania sygnalu: %d\n", p->t);
printf("Czestotliwosc sygnalu: %.1lf\n", p->fs);
printf("Przesuniecie sygnalu: %.1lf\n", p->fi);
printf("Amplituda A0: %.1lf\n", p->A0);
printf("czestotliwosc probkowania: %.1lf\n", p->fp);
}
Sygnał.h - generowanie:
#ifndef SYGNAL_H
#define SYGNAL_H
#include "parametry.h"
#include <math.h>
typedef struct Sygnal
{
double *tablicaczasu;
double *tablicawartosci;
}Sygnal;
void generuj(Parametry *p, Sygnal *s)
{
int i;
int czas = p->fp * p->t;
s->tablicaczasu= malloc(sizeof(double)*czas);
s->tablicawartosci= malloc(sizeof(double)*czas);
for (i = 0; i<czas; i++)
{
p->tablicaczasu[i]=(double)i / p->fp;
p->tablicawartosci[i]=(sin(2.0*3.14159*i*p->fs / p->fp + p->fi) + p->A0);
}
}
void wyswietlSygnal(Sygnal *s)
{
//printf("Czas trwania sygnalu: %.11f\n", p->t);
//printf("Wartosc sygnalu: %.1lf\n", p->fs);
}
#endif // SYGNAL_H
Zapis i odczyt:
#define ZAPISIODCZYT_H
#endif // ZAPISIODCZYT_H
#include "sygnal.h"
void zapis(Sygnal *s)
{
FILE* plikdozapisywania;
plikdozapisywania=fopen("plikdozapisywania.txt", "w");
free(plikdozapisywania);
}
void odczyt(Sygnal *s)
{
FILE* plikdoodczytu;
plikdoodczytu=fopen("plikodczytu.txt","r");
free(plikdoodczytu);
}