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);

}