Numerischer Sinusoszillator in einer Zeile C

Hi

Läuft so auf allen Arduinos:

Code:
double osc = 100, osc0;

void setup() {
    Serial.begin (9600);
}

void loop() {
          
    osc0 = osc0 -  0.01 * ( osc0 - (osc = (osc - osc0) * 1.010101) );
    
    // For serialPlotter
    Serial.print (osc0);
    Serial.print ("\t");
    Serial.println (osc);
}
 
Hi

Läuft so auf allen Arduinos:

Code:
double osc = 100, osc0;

void setup() {
    Serial.begin (9600);
}

void loop() {
          
    osc0 = osc0 -  0.01 * ( osc0 - (osc = (osc - osc0) * 1.010101) );
    
    // For serialPlotter
    Serial.print (osc0);
    Serial.print ("\t");
    Serial.println (osc);
}

Na ja, Multiplikationen sind schon sehr zeitintensiv. Dann auch noch double als Datenformat... Armer Arduino. Ich rechne die Sinuswerte in eine Tabelle und greife um himmels willen NICHT über einen Index zu, sondern über einen Pointer, den ich entspechend inkrementiere.
Wenn alles gut gegangen ist, siehst Du im Assembler nur noch einen einfachen Tabellenfetch, einen Offset der inkrementiert wird und eine Basisadresse für die Tabelle. Der Inkrement erledigt durch den überlauf auch gleich das zyklische des Sinus.
Bis auf den Tabellensetup hast Du dann auch alles in einer Zeile.

n'Guten Rutsch
 
Na ja, Multiplikationen sind schon sehr zeitintensiv. Dann auch noch double als Datenformat... Armer Arduino.

Ich habe ja nicht behauptet, dass es von irgendeinem Nutzen ist.

Das ganze war ein Unglück/Zufall mit vertauschten Variablennamen als ich mit Savitzky-Golay Filtern für einen Luftdrucksensor experimentiert habe.
Dann habe ich das Oszillatorprinzip mit einem IIR Tiefpass 1. Ordnung auf ein Minimum an C-Code gebracht.
 
Ich habe ja nicht behauptet, dass es von irgendeinem Nutzen ist.

Das ganze war ein Unglück/Zufall mit vertauschten Variablennamen als ich mit Savitzky-Golay Filtern für einen Luftdrucksensor experimentiert habe.
Dann habe ich das Oszillatorprinzip mit einem IIR Tiefpass 1. Ordnung auf ein Minimum an C-Code gebracht.

...ok dann ist es cool :-)
 
Ansicht hell / dunkel umschalten
Oben Unten