IFFT liefert keine sauberes Signal

Gast #390534
Lesenswert?

Hallo.
Ich baue ein Signal (1,0 - 1,1 kHZ) mit einer IFFT und das Ergebnis
liefert einen falschen Pegel. Nun wie soll ich das beschreiben.
Der Pegel ist meistens bei ca. 10% und dann kommt eine volle Welle mit
einem Pegel von 100%. Hat jemand eine Idee was ich hier falsch mache?
Gast #390535
Lesenswert?

Nein, kann aber auch an der Problembeschreibung liegen :)

"falschen Pegel" - etwas genauer
"bei ca. 10%"    - von was?

Wieviel Werte verwendest du, welche IFFT-Routine, welche Software?
Kannst du nicht einfach ne Grafik posten?
Gast #390536
Lesenswert?

Signal wurde auf einem Pc erzeugt (in C) und ausgegeben.
Gemessen mit einen Oszi.
10% von 100% -- ist doch egal, Fakt ist das der Pegel gleich sein muß.
Entweder hat die eine Welle zu viel Pegel oder der Rest zu wenig.
Meine IFFT arbeitet mit 8192 Punkten und kommt aus dem Audacity
Projekt. Grafik müsste ich erst malen, wird glaube ich aber auch nicht
verständlicher.
Gast #390537
Lesenswert?

Vielleicht hilft es, wenn ich mal meinen Code zeige:

for (i=0; i< 8192; i++) // Alles erstmal Löschen
{
 In_r [i] = 0;       In_i [i] = 0;
}
for (i=170; i< 190; i++) // Frequenzen einschalten
{
 In_r [i] = 200;         In_i [i] = 200;
 In_r [8192- i] = 200;   In_i [8192- i] = -200;
}
IFFT (In_r, In_I, Out_r,Out_i);  // 8192 Punkte FFT
Out_r ---> ausgeben     Out_i liegt bei ca. 0.0
Admin Persönliche Seite #390538
Lesenswert?

Ich vermute bei dir sieht es so aus wie im Anhang (Realteil)? Das passt
schon: du hast im Frequenzbereich ein verschobenes Rechteck, das ergibt
eine modulierte sinc-Funktion.

> In_r [8192- i] = 200;   In_i [8192- i] = -200;

Dein Index geht von 0 bis 8191, also muss da 8191 stehen. Aber das
macht keinen großen Unterschied für das Ergebnis.
Angehängte Dateien:
Gast #390539
Lesenswert?

Habe es nur auf dem Oszi gesehen und da habe ich die Daten halt in einem
Loop ausgegeben. Und wenn ich es richtig gesehen habe, passt Dein Bild.

Nur ich wollte eigentlich ein Siganl mit einem gleich bleibenden Pegel
haben!!!!!

Wenn ich bei einer Frequenz(i=170 == ca. 1kHz)  "8191- i" oder
"8193- i" mache hört man sofort das der Sinus nicht sauber ist.
Also bin ich davon ausgegangen das "8192 -i" das richtige ist.
Wenn ich also nur eine Frequenz ausgebe ist alles super keine hörbaren
Pegel schwankungen, und wenn ich dann wie im Beispiel 20 ausgebe kommt
so ein mist raus.  Warum? Was mache ich falsch?
Gast #390540
Lesenswert?

Achso, was heist den eigentlich:
"du hast im Frequenzbereich ein verschobenes Rechteck, das ergibt
eine modulierte sinc-Funktion."

modulierte sinc-Funktion --> ist das was ich nicht will!
verschobenes Rechteck  --> ?????
Gast #390542
Lesenswert?

Ich brauche das leider in "C" weil es in ein Program rein kommt.
Und der Benutzer die Frequenzen und den Pegel angeben können soll.

In welcher Variable und Position (vordere oder hintere hälft) ist die
Phase versteckt?
ALso was muß ich mit dem Random Generator duchdrehen?
#390543
Lesenswert?

Hi
>ALso was muß ich mit dem Random Generator duchdrehen?
die Phasen.

>In welcher Variable und Position (vordere oder hintere hälft) ist die
>Phase versteckt?

Im Verhältnis von beiden. In_r[i]+(sqrt(-1)*In_i[i] IST ne komplexe
Zahl mit Betrag und Phase. http://de.wikipedia.org/wiki/Komplexe_Zahl

// Phasen drehen, Multiplikation mit einer komplexen
// Zufallszahl des Betrages 1
for (i=170; i< 190; i++) // Frequenzen einschalten
{
 In_r [i] = 200;         In_i [i] = 200;
 w=2.0*pi*zufall(); // zufall() macht nen float 0..1
 rrr=In_r[i]*cos(w)-In_i*sin(w);
 iii=In_r[i]*sin(w)+In_i*cos(w);
 In_r[     i]=rrr;In_i [i     ]= iii;
 In_r[8192-i]=rrr;In_i [8192-i]=-iii;
}

Dann sollte tendenziell son Signal rauskommen wie angehängt.
Cheers
Detlef
Angehängte Dateien:
#390545
Lesenswert?

Na, geht doch. Es ist eine Eigenschaft von discrete multitone Signalen,
auch z.B. DSL, daß sie einen hohen crest-factor haben, also Verhältnis
von Spitzenwert zum root-mean-square, sprich keinen 'gleich bleibenden
Pegel'. Allerdings bist Du in der Wahl der Phasen frei, lass Deinen
3GHz Pentium mal ne Woche laufen und probier viele Phasen aus, dann
findest Du sicherlich nen Zeitsignal, daß einen gleichmäßigeren Pegel
hat als ein Signal mit irgendwelchen Zufallsphasen. Mir ist kein
Algorithmus bekannt (außer ausprobieren), der die Phasen so berechnet,
daß der crestfaktor minimal wird.

Cheers
Detlef

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