Ich habe jetzt meine Hardcover Ausgabe des DSP-Guides bekommen und experimentiere gerade mit den einfachen Beispielen von DFT und IDFT (in dem Buch als table 8-1 und 8-2). Natürlich habe ich das erstmal in C übersetzt. Eine wichtige Sache habe ich aber noch nicht verstanden bzw. in dem Buch nicht gefunden. Ist es richtig, dass die Anzahl der Eingangssamples immer eine gerade Zahl sein muss? Bei allen Beispielen ist das so, aber es wird (bisher) nirgends explizit erwähnt. In einem ordentlichen Programm müsste ich bei den Eingabedaten diese Bedingung ggf. ja überprüfen.
Gast
#4151778
Nein, die Anzahl der Samples kann auch ungerade sein.
Das habe ich befürchtet und dadurch bekomme ich ein Problem. Wie viele komplexe Ergebniswerte bekomme ich dann? Es heisst ja (N/2)+1 aber es gibt keine halben Abtastwerte.
Gast
#4152465
Dann hast du eine andere Formel als ich und als wikipedia. Aus n Abtastwerten kommen n Frequenzen raus. Aber vielleicht benutzt du eine spezielle DFT, die ausschließlich für reelle Eingangswerte funktioniert? Sofern die Abtastwerte reell sind (was ja in der Regel der Fall ist), kann man nach der DFT N/2-1 bzw. (N-1)/2 Frequenzenpaare wiederum zusammenfassen, da die DFT sowohl Amplituden für negative als auch für positive Frequenzen ausspuckt.
Der Autor (die Quelle hatte ich ja bereits angegeben) erwähnt tatsächlich, dass die komplexe DFT in einem späteren Kapitel behandelt wird. Aber ich glaube ich habe jetzt des Rätsels Lösung gefunden. Es ist tatsächlich (N/2)+1. Aber es muss eine Integer Division sein. Ich habe die Berechnung einfach mal weiter laufen lassen, um zu sehen was passiert. Und man sieht tatsächlich, wie das Spektrum fortgesetzt wird:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
Die Eingangswerte sind 32 Samples, die genau 4 Sinusschwingungen ergeben, was dann bei 31 Samples natürlich nicht mehr passt.
Gast
#4152680
Ich kann das nicht richtig nachvollziehen. Was genau sind die einzelnen Spalten der Tabellen? Machen wir doch mal eine einfache Probe, ob du das gleiche rausbekommst wie ich nach dem zusammenfügen von positiven und negativen Frequenzen: x = [2 3 -4] X = [1 2,5-i*6,06 2,5+i*6,06] XReal = [0,33 1,67-i*4,04] x[k] = 0,33 + 4,37 * cos(2*pi*k/3-1,18)
Ich bin leider noch nicht soweit, das ich den Test jetzt komplett nachvollziehen kann. Aber der Reihe nach. Die Spalten sind: Index des Ausgabewertes Betrag (skaliert mit Anzahl Ausgabewerte) Realteil Imaginärteil Der verwendete Algorithmus ist von hier: http://www.dspguide.com/ch8/6.htm (TABLE 8-2). Die Testwerte habe ich jetzt mal eingegeben. Es sind gewisse Ähnlichkeiten im Ergebnis erkennbar, aber ich bin nicht sicher ob Du das auch so siehst.
1 | |
2 | |
(diesmal ohne Skalierung)
Gast
#4153038
Deine DFT Formel scheint einfach nach der Hälfte der errechneten Werte abzubrechen. Warum auch nicht, wenn die andere Hälfte die konjugiert komplexen Zahlen von bereits berechneten Ergebnissen sind... Um jetzt auf das Signal x wieder zu kommen, musst du anscheinend von allen Zeilen außer der ersten den Real- und Imaginärteil jeweils mit 2 multiplizieren und alle Zeilen, inklusive der ersten durch die Anzahl teilen. Dann erhälst du die gleichen Werte wie in meinem XReal Array und kannst daraus schließlich den Test mit der / den cos-Funktion(en) machen, ob das ursprüngliche x Array aus dem errechneten Spektrum wieder herauskommt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.