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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.