Sto scrivendo un programma c per generare un'onda sinusoidale che aumenta lentamente la frequenza da f1 a f2 per un intervallo di tempo di consegna.onda sinusoidale che aumenta lentamente la frequenza da f1 a f2 per un dato tempo
Ho scritto questo programma c per aumentare la frequenza da 0 a 10 Hz, ma il problema è che la frequenza cambia dopo il completamento di 360 gradi. Se provo a cambiare la frequenza tra 0 e 360 gradi, la transizione non è fluida ed è brusca.
Questa è l'equazione il peccato che ho usato y = Ampiezza * sin (freq * fase)
int main(int argc, char *argv[]) {
double y, freq,phase;
int count; // for convenience of plotting in matlab so all the waves are spread on x axis.
for (freq = 0; freq < 10; freq+=1) {
for (phase = 0; phase < 360; phase++) { // phase is 360 degrees
y = 3 * sin((count*6.283185)+(freq*(phase*(3.14159/180))));
printf("%f %f %f \n", freq, phase, y);
}
count++;
}
return EXIT_SUCCESS;
}
- Come posso cambiare la frequenza senza problemi per un dato periodo di tempo?
- devo esaminare le trasformazioni di Fourier?
Per generare una frequenza di onda sin "reale" di Hz desiderati utilizzare contatori e timer. Usando la formula sin la frequenza generata dipende dalla velocità con cui il programma viene eseguito. – katta