ChaN FFT auf dem XMega

Gast #3414209
Lesenswert?
• ▲
▼
Hallo,

bin gerade dabei eine FFT für Audiosignale zum laufen zu bekommen.
Davon bin ich aber noch weit entfernt... erstmal hab ich mit 
unterschiedlichen Eingangsparametern gespielt...

Eine C Implementierung hat mir vom Quellcode und der Ausgabe zugesagt. 
Leider war diese deutlich langsamer als der von ChaN...

Okay, nun bin ich bei seiner gelandet und kann mir das Ausgabespektrum 
in folgendem Source nicht ganz erklären:
1
void test_fft2(void)
2
{
3
  
4
  int16_t capture[FFT_N];    /* Wave captureing buffer */
5
  complex_t bfly_buff[FFT_N];    /* FFT buffer */
6
  uint16_t spektrum[FFT_N/2];    /* Spectrum output buffer */
7
  
8
  memset(capture,0x00,sizeof(capture));
9
  memset(bfly_buff,0x00,sizeof(bfly_buff));
10
  memset(spektrum,0x00,sizeof(spektrum));
11
  
12
  for (uint16_t i=0; i<FFT_N; i++)
13
  {
14
//    capture[i] = 1000*sin(i*((2*3.1415926535)/32));
15
    if(i < FFT_N/2) {
16
      capture[i] = 1000;
17
      } else {
18
      capture[i] = -1000;
19
    }
20
  }
21
  
22
  gpio_toggle_pin(STATE_LED_IR);
23
  
24
  fft_input(capture, bfly_buff);
25
  fft_execute(bfly_buff);
26
  fft_output(bfly_buff, spektrum);
27
  
28
  gpio_toggle_pin(STATE_LED_IR);
29
  
30
  for (uint16_t i = 0; i < FFT_N/2; i++)
31
  {
32
    udi_cdc_write_buf(&capture[i],2);
33
    udi_cdc_putc(0x00);
34
    udi_cdc_write_buf(&spektrum[i],2);
35
  }
36

37
  delay_ms(1000);
38
  
39
}

Eingangswert - Nullbyte - Spektrumausgabe
1
E8 03 00 0A 00 
2
E8 03 00 AF 02 
3
E8 03 00 86 01 
4
E8 03 00 E4 00 
5
E8 03 00 9C 00 
6
E8 03 00 89 00 
7
E8 03 00 64 00 
8
E8 03 00 62 00 
9
E8 03 00 4A 00 
10
E8 03 00 4D 00 
11
E8 03 00 3A 00 
12
E8 03 00 3E 00 
13
E8 03 00 32 00 
14
E8 03 00 36 00 
15
E8 03 00 2A 00

c0 ist hier fast 0... aber auch nicht wirklich...
bei dem Rechtecksignal, sollte es doch nur gradzahlige Harmonische 
geben. Wieso sind hier immer welche da?

Bei der C FFT hat das selbe Rechtecksignal wunderbar funktioniert...

Beim Sinus passt soweit alles, außer das der Peak etwas breiter und 
gleichmäßiger in die Ränder geht, was der C Code vorher auch nicht getan 
hat.

Muss ich noch irgendwas einstellen, oder was mach ich hier falsch?

Ein paar digitale Rundungsfehler okay, aber das Rechteck ist nicht so 
wie vorgesehen...

Danke,

Basti
Gast #3415388
Lesenswert?
• ▲
▼
Hm, weiß keiner was darüber? Ich habe irgendwie die Vermutung, dass die 
"Seitenbänder" einer Art Rundung/Mittelwertbildung zum Opfer fallen...

Man sieht, dass die gerade Harmonischen kleiner sind als die 
benachbarten ungeraden...

Evtl. ist das sogar für meine Anwendung nicht weiter schlimm... 
verstehen würde ich es trotzdem gern... ;)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.