Oh, danke.
Ja, im Moment ärgere ich mich immer noch mit einer Verbesserung der Tonhöhenerkennung rum. Mein Design filtert Signal mittels eines adaptiven LPF auf eine unizyklische Wellenform herunter und misst dann die zero crossings. "Adaptiv" bedeutet dass das Signal am Ausgang des LPF mit einem Envelope Follower ausgemessen wird, welcher rückkoppelnd dann die Frequenz ebendieses Filters invertiert steuert. Ist eine Erfindung von mir, aber sie funktioniert erstaunlich gut
, und man kann es durch Justage des Filters, des Mod-Ranges und des Env-Followers gut feintunen. Das Problem ist nur, dass durch das Filtern die zero-crossings phasenverschoben werden, sodass man diese nicht mehr zum Antriggern des wavecycle-basierten Pitchshifters verwenden kann, sondern hierfür nochmals eine zweite Abtastung vornehmen muss. Not good enough.
Bin also auf der Suche nach einer Schaltung, die auch mehrzyklische Wellenformen (d.h. mehr als 1 zero crossing pro Grundschwingung) als solche erkennt, und auch so immun als möglich ist gegenüber Störsignalanteilen. Habe mich hierzu in die Thematik eingelesen und auf patentstorm.us ein paar Patente angesehen. Ist ein interessantes Gebiet, geht zurück bis in die Anfänge der Nachrichtentechnik (Stichwort PLL), kann man eine Menge lernen.
Die mit Abstand beste Methode in der time domain ist zweifellos die Autokorrelation (das Audiosignal wird von verzögerten Kopien seiner selbst subtrahiert, die Auslöschungsmaxima bestimmen die Periode). Nur sehe ich keinen Weg, diese auf dem G2 zu implementieren, da alle Verzögerungen (in Samples) mit einer Schleife auf einmal abgearbeitet werden müssten (was eh auch relativ rechenintensiv ist). (Mein Experiment mit einer PLL-Delayline scheiterte kläglich
.) Schade. Eine andere Technik, "zero crossing max gradient detection" (A.Szalay), d.h. die Anstiegsgeschwindigkeiten der Wellenform bei den Nulldurchgängen auszuwerten, hat nicht gehalten was sie versprach. Tja, und nun... warte ich auf Inspiration.
2b continued.