hier ist ein Ausschnitt aus meiner Delphi-Simulation. In C wird das noch etwas kompakter.
- Abtasten mit der passenden Taktfrequenz
- wenn Flag gesetzt, dann Pegel invertieren
- Flag invertieren
- Tiefpassfiltern
was fehlt ist hier nur noch die Gleichrichtung
Die multiplikation mit 31 mache ich indem ich das Datenwort um 5 Bit nach links schiebe, dann den Ursprungswert subtrahiere Division durch 32 dann durch 5 Bit nach Rechts schieben.
------------------- snip -----------------------------------------
while t < 10E-3 do // t ist der Zeitpunkt, hier 1ms betrachten begin
// Signal alle 48 Mikrosekunden abtasten
if vz then y := - y; // jeden zweiten Abtastwert invertieren
if vz=true then vz := false // Vorzeichenflag invertieren else vz := true;
series4.AddXY(t*1E6,y,'',clred); // Mischprodukt plotten
y0 := (31*y0 + y)/32; // Tiefpassfilter series5.AddXY(t*1E6,y0*16,'',clyellow); // plotten
end;