Frequenz shift

Gast #418734
Lesenswert?

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 ?
Gast #418735
Lesenswert?

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.
Gast #418737
Lesenswert?

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.
Gast #418738
Lesenswert?

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.
Gast #418739
Lesenswert?

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).
Gast #418740
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren