Könnte es sein, dass du ab und an eine ungerade Anzahl an Samples in der While-Schleife aus dem Puffer ausliest? Dann wäre im nächsten Durchlauf im ersten Element des Arrays die Breite des Low-Pulses, nicht des High-Pulses drin. Das erklärt dann den Fehler.
Vorschlag also: Entweder immer eine gerade Anzahl an Samples auslesen oder, wenn du immer alle Samples auslesen willst, bei einer ungeraden Anzahl an Samples den letzten Wert per Shift-Register in den nächsten Schleifendurchlauf verschieben.
Gruß, Jens