ich bin eine Sinuswelle mit dem folgende Verfahren zu erzeugen -Sinuswellenerzeugungsphase unter Verwendung
sampling rate = 22050;
theta = 0;
for (i = 0; i < N; i++)
{
theta = phase * 2 * PI;
signal[i] = amplitude * sin(theta);
phase = phase + frequency/sampling rate;
}
Wenn I ein Signal mit einer Frequenz von 8000 Hz zu erzeugen, wird eine Verzerrung in der Ausgabe. Frequenzen darunter (z. B. 6000 Hz) werden korrekt erzeugt. Das 8000-Hz-Signal korrekt erzeugt, wenn ich eine Überprüfung der Phase platzieren wie so -
if (phase > 1)
{
float temp = phase - 1;
phase = temp;
}
Ich denke, es ist etwas zu tun mit der Sinusfunktion in Xcode hat, wahrscheinlich eine Reihe von Werten kann es annehmen? Derselbe Code mit und ohne Phasenumbruch hat keinen Unterschied in Matlab. Kann mir jemand erklären, was hier passiert?
Wenn Sie an XCode interessiert sind, müssen Sie uns sagen, welche Typen die verschiedenen Variablen sind. Das könnte etwas zeigen. So wie es ist, kann ich nur den Typ von 'temp' sehen. –
Hallo Peter, PI ist wie ein Doppel erklärt, und Theta in float. Ich habe Theta auf Double umgestellt und der Code erzeugt das 8K-Signal ohne Verzerrung. Vielen Dank! – Naveen
Gut zu hören. Ich werde diese Frage jedoch als off-topic schließen und nach SO migrieren. –