Mit einem ARM7 als Low-Cost DSP versuche ich gerade einen Voice Changer zu programmieren. Dafür gibt es zwei Ansätze: - Samplerate zwischen Ein und Ausgang unterschiedlichen wählen. Das ist sehr einfach und schnell, hat aber den nachteil dass es bei den Daten einen Sprung gibt, da der Samplepuffer über oder unterläuft. Man kann den Übergang zwar etwas entschärfen indem man die Werte langsam überblendet, aber man hört dies trotzdem. Bei diesem Verfahren werden die Frequenzen mit einem Faktor multipliziert, also faus=fein*x - Das Frequenzspektrum mit einem Einseitenbandmodulator verschieben. Dazu verwendet man meist eine Hilberttranformation um das Eingangssignal komplex zu machen. Anschließen mischt man das Signal mit der zu verschiebenden Frequenz. Die Frequenz wird also nru verschoben: faus=fein+x; Gibt es sonst noch einen nicht alzu komplizierten Ansatz, der etwas weniger Rechenaufwendiger ist als die Hilberttransformation, sich aber besser anhört als die erste Methode ? Da ich die Hilbertranformation mit einem FIR Filter mit 126 Werten mache, ist der ARM nämlich ziemlich ausgelastet. Für Real und Imaginärteil ist je ein FIR Filter nötig, um das Eingangssignal komplex zu machen. Die Koeffizienten habe ich aus einem Beispielprogramm von einem dsPIC Board übernommen. Bei den Koeffizienten ist jeder zweite Wert 0. Die Werte für Real und Imaginärteil sind gleich, nur ist die Richtung umgekehrt. Da 126 Werte sehr viel Rechenaufwand sind, habe ich versucht mit Matlab neue Werte für eine Hilbert Transformation zu erzeugen, aber damit funktioniert das ganze nicht (es ist dann ein DSB Modulator und kein SSB). Die mit Matlab erzeugten Werte sind in der ersten Hälfte negativ und in der zweiten positiv, sehen also etwas anderst aus. Was mache ich falsch, bzw. was habe ich übersehen ?
Hallo Benedikt, ichh habe mir gerade den "Voice-Changer"-Bausatz von ELV geleistet, da ist ein OKI-Chip drin, der alles enthält (MSM6722 ?), aber das Datenblatt sagt nicht viel über die Methode aus. Die Samplerate ist für das Heruntersetzen um eine Oktave auch nur etwa 4 kHz. Bei der konventionellen SSB-Erzeugung gibt es drei Methoden, die (üböliche) Filtermethode mit steilflankigem Quarzfilter, dann die Phasenmethode, das entspricht der Hilpertfunktion, und schließlich die sogenannte dritte Methode nach Weaver, die benutzt eine doppelte Umsetzung mit zwei sin/cos-Frequenzen, zunächst auf eine niedrige Zwischenfrequenz, die sogar im NF-Bereich liegen kann. Damit spart man sich den breitbandigen Niederfrequenz-90Grad-Phasenschieber.
ein englichscher Wikipedia-Artikel http://en.wikipedia.org/wiki/Single_sideband führt zur Seite http://www.microtelecom.it/ssbdex/ssbdex-e.htm wo die SSB-Erzeugung nach der Weavermethode in einem Spartan II-FPGA gezeigt wird
Die ELV Schaltung arbeitet nach dem Samplerate-Umwandlungs Prinzip. Das ist das einzige was sich billig und ohne großen Aufwand machen lässt, man benötigt (im einfachsten Fall) nur einen Ringpuffer Schreib/Lese pointern die mit unterschiedlicher Taktfrequenz laufen.
Die Ringpufferlänge muß wohl so groß sein, dass die Übergangsknackse im Infraschallberich liegen. Ich habe schon mal hier erwähnt, in Heinz Richters Buch "Tonaufnahme für alle" wird ein Diktiergerät beschrieben, das mit rotierenden Tonköpfen sozusagen einen elektromechanischen Ringpuffer benutzt, um variable Abspielgeschwindigkeiten bei konstanter Tonhöhe zu erreichen.
Wenn man den Ringpuffer aber zu groß macht, kann es passieren dass einzelne Stücke komplett übersprungen werden. Die optimale Länge liegt bei wenigen 10 Milisekunden, und dieses Brummen hört man mehr oder weniger (je nach Filteraufwand).
Zwischen Ringpuffer und SSB besteht aber der prinzipielle Unterschied: Der Ringpuffer multipliziert alle Frequenzen mit einem konstanten Faktor, während SSB einen konstanten Frequenzversatz addiert. Die Harmonischen liegen danach nicht mehr auf ganzzahligen Vielfachen der Grundfrequenz, alles bekommt einen röhrenden Glockenklang. Der Ringpuffer klingt natürlicher. Bei geringem Versatz z.B. gegen akustische Rückkopplung, fällt das vermutlich nicht auf.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.