Hallo zusammen,
ich möchte die Daten eines Sensors auswerten und habe dazu Daten
eingelesen, DFT transformiert (mit evtl. Befensterung) und möchte die
Daten nun per inverser Fourier rücktransformieren. Code für diese
Funktion befindet sich unten.
Funktioniert auch alles ganz gut, allerdings stimmt das Ergebnis der
iDFT nicht. Bekomme dabei das Bild im Anhang (1. Input, 2. Platzhalter,
3. DFT, 4. iDFT. dh Bild 4 stimmt nicht). Hier müsste ja ohne
Befensterung die selbe Funktion erhalten werden wie auch der Input war,
stattdessen habe ich einen merkwürdigen Phasenverschiebung und eine
niedrigere Amplitude. Kann jemand einen Fehler erkennen?
Habe in einem Matlab-Skript das Ganze nachgebaut, da funktioniert alles
wie es soll.
Vielen Dank im Voraus.
1 | // Durchführung der inversen DFT
|
2 | void DFT_C::do_inv_dft(void)
|
3 | {
|
4 | int i,k;
|
5 | double temp_r_inv,temp_i_inv;
|
6 |
|
7 | if (!data_in) return;
|
8 |
|
9 | data_out_r_inv=new double[d_length];
|
10 | data_out_i_inv=new double[d_length];
|
11 | data_out_b_inv=new double[d_length];
|
12 |
|
13 | if (data_out_r_inv&&data_out_i_inv&&data_out_b_inv) data_out_flag=1;
|
14 | else return;
|
15 |
|
16 | for (i=0;i<d_length;i++)
|
17 | {
|
18 | temp_r_inv=0;
|
19 | temp_i_inv=0;
|
20 | for (k=0;k<d_length;k++)
|
21 | {
|
22 | temp_r_inv+=data_out_r[k]*cos(2*M_PI*k*i/d_length); //data_out kommt aus der DFT
|
23 | temp_i_inv+=data_out_i[k]*sin(2*M_PI*k*i/d_length);
|
24 | }
|
25 | data_out_r_inv[i]=temp_r_inv;
|
26 | data_out_i_inv[i]=temp_i_inv;
|
27 | data_out_b_inv[i]=sqrt(pow(temp_r_inv,2)+pow(temp_i_inv,2));
|
28 | }
|
29 | }
|