Gast
#418734
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 ?