Hallo,
da ich leider kein DSP Mathematiker bin, such ich mal hier um Hilfe.
Ich will für ein kleines Projekt eine Einseitenbandmodulation mit dem
IQ-Mischer realisieren. Dazu brauche ich einen Phasenschieber, der das
oder die Signale um 90 Grad verschiebt. Nun steht mal so im Raum eine
Hilberttransformation, All-pass, IIR oder Ähnliches.
Ich habe schon einige IIR-Filter realisiert und auf einem ARM7
umgesetzt. Jetzt steht ein Cortex M4F zur Verfügung, der um einiges
schneller ist.
Ich habe leider im WEB keine Implementierung dafür gefunden. Nur etliche
verzettelte Theorien. Ich konnte bis jetzt nichts brauchbares ableiten.
Gerne bin ich dann auch Bereit den Code hier fürs Forum offen zu legen.
Programmieren tu ich in Assembler mit FPU oder Fixpoint, je nach....
Frequenzspektrum ca. 200Hz...5KHz
Samplefrequenz 22,32,44KHz je nach
Quantisierung der ADC-Werte 16Bit
Gruß Sascha
Hallo Johannes,
ja ganz einfach ich suche nach einem Lösungsweg um einen solchen
Phasenschieber programmieren zu können.
Gibt es Berechnungsprogramme für die Faktoren?
Welche Art von Filter eignet sich dafür am besten?
Hat jemand Erfahrung damit?
Gruß Sascha
Sascha schrieb:> Gibt es Berechnungsprogramme für die Faktoren?
Für eine Hilbert-Transformation braucht man einen FIR-Filter, die
Filterkoeffizienten kann man z.B. mit Scilab berechnen, die Funktion
heist "hilb()".
Die Implementierung eines FIR-Filters auf einen Controller/DSP ist im
Prinzip relativ einfach, wenn man schon mal einen IIR-Filter
programmiert hat.
Eine fertige Implementierung, die man im Internet herunterladen kann,
kenne ich allerdings auch nicht.
Hier ist ein Beispiel-Skript für Scilab:
(Koeffizientenberechnung und Simulation)
1
L=500;
2
t=[0:1:L-1];
3
x=sin(2*%pi*0.02*t);
4
5
n=40;
6
c_hilb = hilb(n);
7
8
z=poly(0, 'z');
9
h=poly(c_hilb, 'z', "coeff")/z^(n-1);
10
11
y=flts(x, h);
12
x_delay = [zeros(1,n/2), x(1:L-n/2)];
13
clf();
14
plot([x_delay', y']);
Die Filterkoeffizienten stehen in der Variablen c_hilb.
Das sind Fließkommazahlen, für Festkomma-Rechnung muss man die
entsprechend normieren und umwandeln.
Hallo Johannes,
das ist ja super, werde ich morgen ausprobieren.
FIR filter ist kein Problem, kann ich sogar als Fixed Point mit 64 Bit
durchlaufen lassen. Oder mit der FPU als 32 Bit IEEE754.
Ich habe gerade bei Freescale die AN4265 gefunden, hier gehts zwar um
Stromzähler, aber es ist auch eine recht intresannte Vorlage dafür.
Habe im Web gesehen das ein FIR Filter mit 64 Taps ausreichend genug
ist.
Gruß Sascha
Hallo,
ja sieht auch sehr interessant aus, man kann sich sogar die zweite
Tabelle einsparen, ist ja nur eine Spiegelung der ersten.
Die Faktoren scheinen sehr intressant aufgebaut zu sein, muss ich mal
unbedingt testen.
Gruß Sascha
Christoph Kessler (db1uq) schrieb:> Ich habe zum Thema mal Literatur gesucht und diesen Artikel angefangen:
Das ist ein sehr interessanter Artikel, da habe ich einige noch dazu
gelernt. Danke für den Hinweis.
Ja, der Artikel ist sehr Interessant, nur mit IIR-Filter bin ich noch
etwas vorsichtig, da wie auch im Artikel zu lesen ist schwingt die
Sache.
Es ist sicherlich einfacher mit einem IIR-Filter einen wirksamen
Tiefpassfilder zu bauen, aber Phasenshieber mit IIR sehe ich immer sehr
kritisch. Aber ich arbeite mich stetig an das Thema heran.
Folgende Anforderungen habe ich jetzt auch ausfindig machen können:
Der Phasenfehler muss (sollte) unter 1 Grad liegen, der Amplitudenfehler
sollte bei 1dB liegen. Das müsste doch zu schaffen sein.
Gruß Sascha