Hi!
Obwohl ich erst letztens mit halbwegs erfolg eine Prüfung in Signal- und
Systemtheorie geschrieben hab, brauche ich Hilfe bei der Interpretaiton
einer DFT.
Hier der betroffene Code als Referenz. Ich habe recht stur die diskrete
Transformation in Summenbildung umgesetzt, keinerlei FFT o.ä.
1 | int test_chars[16];
|
2 | float dft_values_dc_off[] = {2,12,2,-8, 2,12,2,-8, 2,12,2,-8, 2,12,2,-8};
|
3 |
|
4 | for(count = 0; count < 16; count++)
|
5 | test_chars[count] = ((int)easyDFT(dft_values_dc_off,16,count))/16;
|
sowie
1 | float easyDFT(float *values, unsigned char N, unsigned char omega){
|
2 | unsigned int count;
|
3 | float result_a = 0, result_b = 0, *temp;
|
4 | temp = values;
|
5 |
|
6 | for(count = 0; count < N; count++){
|
7 | result_a += *temp * cos(2*PI*omega/N*count);
|
8 | temp++;
|
9 | }
|
10 | for(count = 0; count < N; count++){
|
11 | result_b += *values * sin(2*PI*omega/N*count);
|
12 | values++;
|
13 | }
|
14 | return sqrt(result_a*result_a+result_b*result_b);
|
15 | }
|
Die DFT macht 16 Punkte. Wenn ich mir jetzt über ein Display als
Balkengrafik die Werte von test_chars, also die durch 16 geteilten Werte
der Transformation, anschaue, zeigt es mir bei n=0 den Gleichanteil von
2. Das find ich schon mal toll.
Jetz hab ich noch zwei weitere Balken: '5' bei n=4 und '4' bei n=12. Der
nicht genannte Rest zw. n=0 und n=15, jeweils inklusive, ist 0.
Jetzt stelle ich mir vor, dass die Messwerte, die ich aktuell noch fest
in dft_values_dc_off vorgebe, einen Sinus beschreiben mit der Periode
4*T wobei T die Samplingzeit ist. Dann liegen sie ja entweder immer im
Nulldurchgang oder einem Max/Min.
Was ist jetzt aber der Wert bei n=12? Ist das der Aliasing Wert der
komplexen Frequenz von n=-4? Denn -4 + 16 wäre ja gerade 12. Ist das
das, was das Nyquist Theorem zu beachten gibt?
Wenn das zutrifft eine weitere Frage: Muss ich 16 Punkte transformieren,
um danach nur 8 nutzen zu können?
Falls alles nicht zutrifft, würde ich mich über eine Klarstellung freuen
:)