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?
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?
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.
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
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.
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?
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 --> ?????
Sorry, 8192 - i war schon richtig. Das ist nunmal das was rauskommt wenn du 21 Sinusse mit der gleichen Phase überlagerst. Wenn du die Phase zufällig wählst, dann bekommst du eher das was du willst. Aber das in C auszuprobieren ist sehr mühselig, probier's mal mit Matlab oder octave.
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?
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
Nun, es funktioniert. Ist nur nicht das was ich haben möchte (gleich bleibenden Pegel). Es scheint nur so zu sein, das es leider gar nicht anders geht. Also Danke an alle.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.