Es gibt da so eine Regel in der digitalen Nachrichtentechnik: Der Takt kann nur aus dem Signal gewonnen werden. Um dazu bietet sich eine PLL ( oder ähnliches an ).

Bisher geht der alte Code hin und achtet primar auf Nulldurchgänge ( Flanken ). Diese markieren den Anfang eines Bits. Soweit erscheint es einfach: Nulldurchgang = Bit startet, Hälfte der Dauer eines Bits warten, dann Wert auslesen. Man müßte ja in der Mitte vom Bit stehen. Und ist schon fertig.

Da so schöne Signal nicht auftreten ist es dann doch schwieriger. Die Flanken könnte man per Schmitt-Trigger verbessern. Verrauschte Signal haben vielleicht mal zwischendurch einen Nulldurchgang. Und weiss der Geier, was noch auftreten kann.

Der alte Algo ist nicht sehr komplex, wenn man ihn aus dem bestehenden Source erstmal rausgearbeitet hat. Da er aber Probleme hat einer langen Übertragung zu folgen vermute ich, liegt es daran, daß Auswerter und Signal irgendwann auseinanderdriften.

Generell zum PLL: Du hast da einen Anwendung genannt ( Frequenzerzeugung ). Eine andere ist eben die Sync auf ein empfangenes Signal ( wo ich ja erstmal nicht weiss wann die Übetragung startet - Mir also die Phasenlage nicht bekannt ist - ebenso muss ich meinen Empfänger natürlich im Sync halten ).

Bei einer Samplerate von 22,050 kHz ist ein Bit bei 512 Baud übrigens 43,0664 Samples lang. Wenn man also alle 43 Samples einen Wert aufnimmt driftet man schon aus dem Takt ...

Ergänzung: POCSAG ist ein NRZ Signal. Technisch wird die Trägerfrequenz selbst verändert. Nicht das aufmodulierte Signal. Was im Empfänger aber egal ist. Der sieht im besten Fall tolle Rechtecke :-)