Piszę program c, aby wygenerować falę sinusoidalną, która powoli zwiększa częstotliwość od f1 do f2 przez pewien przedział czasu.Fala sinusoidalna, która powoli zwiększa częstotliwość od f1 do f2 dla danego czasu
Napisałem ten program c, aby zwiększyć częstotliwość od 0 do 10 Hz, ale problem polega na tym, że częstotliwość zmienia się po ukończeniu 360 stopni. Jeśli spróbuję zmienić częstotliwość między 0 a 360 stopni, to przejście nie jest płynne i jest nagłe.
Jest to równanie sin że użyłem y = Amplituda * sin (freq * faza)
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;
}
- Jak płynnie zmieniać częstotliwość dla danego okresu?
- Czy powinienem zaglądać w transformacje Fouriera?
Aby wygenerować "prawdziwą" częstotliwość fali grzechu żądanego Hz, należy użyć liczników i timerów. Używając wzoru sin, wygenerowana częstotliwość zależy od prędkości, z jaką program wykonuje. – katta