Datum: 04.05.2008 15:39
Bei einem aktuellen Projekt welches ich jüngst an die Wand gefahren habe, hat sich nun herausgestellt, daß eine Autokorrelation über ein Signal von etwa 4kbytes die Lösung aller Probleme darstellen würde. Dummerweise habe ich in der Hardware dazu nicht die korrekten Resourcen berücksichtigt. (jaja, hinterher ist man immer etwas gescheiter). Zur Autokorrelation von 4000 bytes sind etwa 2000 8x8 Multiplikationen mit Aufsummierung der Ergebnisse für eine Spalte als 32 bit Resultat erforderlich. Das Ganze dann etwa 2000 mal, also insgesamt etwa 2000 x 2000 = 4 Mio Operationen. Mein momentan verbauter Prozessor (Risc mit 62,5nS/Befehl) würde dazu unakzeptable 10 Sekunden vertrödeln. Abgesehen davon habe ich aber auch nicht genug Ram um die berechnete Kurve aus 32 bit Werten zur anschliessenden Analyse der Ergebnisse abzulegen, so daß auch hier Kompromisse mit einer sofortigen Interpretation von Teilintervallen des Resultats erforderlich wären. Nun stehe ich vor der Entscheidung, entweders einen PLD oder einen größeren Prozessor einzusezten. Dazu habe ich mir einen Arm9 (966E-S) mit genügend RAM ausgesucht was aber auch ein mittelgroßes Projekt scheint weil ich damit noch nie was gemacht habe. Als Alternative dazu käme evtl. ein programmierbarer Baustein mit RAM in Frage. 4kbyte für die Eingangsdaten, evtl. noch 16kbyte dazu um die Resultate abzuholen. Ram Ankopplung an CPU z. Bsp. über 10 Mhz SPI. Etwas unklar scheint mir auch die Realisierung. Ein Sequenzer würde pro Takt eine 8x8 Multiplikation und eine 32 Bit Addition machen. Nach 2000 Takten wäre eine (von 2000) Spalten berechnet. Um dies abzukürzen könnte man n gleiche Sequenzer parallel betreiben womit n Resultate nach 2000 Takten gleichzeitig fertig wären. Problem scheint, daß ein Auslesen des Rams pro Takt immer nur an einer Adresse möglich scheint, weil man sonst ein Ram mit n gleichwertigen Adressdekodern und Datenbussen brauchen würde. Welcher programmierbare Baustein scheint für sowas geeignet, bzw. gibt es weitere Lesetipps dazu ?
Datum: 04.05.2008 16:21
Nachdem die Autokorrelation ja auch nur eine Faltung ist, bin ich so frei und werfe noch das Stichwort "fast convolution" in den Ring.
Datum: 05.05.2008 16:29
Das Problem mit den RAMs selbst kannst du dadurch lösen, dass du mehrere RAMs mit den selben Daten initialisierst und dadurch an mehreren Stellen gleichzeitig lesen kannst. Außerdem sind z.B. die Block-RAMs in Xilinx FPGAs sowieso schon über zwei Ports gleichzeitig ansprechbar, was die Zugriffsrate nochmal verdoppelt. Überleg dir auch schonmal, ob es bei den Multiply-Accumulate Einheiten nicht auch ähnliche Probleme (und Lösungen dafür) gibt.
Datum: 11.05.2008 16:06
ok, wenn ich das in Wikipedia richtig verstanden habe wird die Autokorrelation über die inverse Fouriertransformation des Autoleistungsspektrums berechnet. Schaue ich beim Autoleistungsspektrum (zuvor nie gehört) nach, so scheint dies das Quadrat der FFT zu sein (?). Demnach müsste ich zuerst eine FFT Transformation machen, dann das Quadrat berechnen und dann invers FFT machen. Kann das jemand bestätigen oder geht es ganz anders ?
Datum: 11.05.2008 16:27
Würde sagen, dass kommt schon so hin. Autokorrelation ist ja ne Faltung im Zeitbereich. FFT transformiert in den Frequenzbereich, dort ist eine Multiplikation auch eine Faltung im Zeitbereich, IFFT drauf und gut. Unter Umständen muss man noch ein wenig Zero-Padding betreiben. Einige Stichworte wären dann "overlap-add" und "overlap-save" (oder -store, bin mir da nicht mehr so sicher).
Datum: 11.05.2008 17:32
ok, es scheint nicht das Quadrat der FFT sondern die Multiplikation mit der komplex konjugierten FFT zu sein. Zentrale Frage bleibt dann aber weiterhin ob es mit einem (realen) Produkt wie diesem: http://www.latticesemi.com/documents/doc28236x55.pdf oder diesem: http://www.altera.com/literature/ug/ug_fft.pdf oder einem so ähnlichen machbar ist und was dabei für eine Zeit bzw. ein Baustein rauskommen würde.
Datum: 11.05.2008 23:45
Janvi wrote: > ok, es scheint nicht das Quadrat der FFT sondern die Multiplikation mit > der komplex konjugierten FFT zu sein. Das ist das gleiche.
Datum: 12.05.2008 09:23
Fuer die Xilinx-Chips gibt's via CoreGen schon fertige FFT-Module, allerdings bin ich mir nicht sicher, ob diese IP-Cores kostenpflichtig sind. Auf nem DSP oder ARM waere sicher die FFT weniger rechenlastig, man bedenke aber, dass bei der ueblichen, eher simpel implementierten FFT die Anzahl Samples 'ne 2er-Potenz sein muessen. Wenn janvi aber 4kB als 4096 Bytes auslegt, passt's wieder :-) Fragt sich nun, welcher Aufwand groesser ist. Im FPGA haette ich es sogar mal ohne FFT probiert, und die Autokorrelation einfach "von Hand" implementiert. Resourcen sind ja meist genug da, und man kann in der Tat so einiges parallelisieren (mal eben 16 MACs instanzieren) oder mit Pipelining in der Anzahl der benoetigten Takte reduzieren. Bei einer so geringen Anzahl Samples bringt die FFT nicht extrem viel Ersparnis, der Aufwand der Implementierung duerfte hingegen erheblich hoeher sein (ausser, man hat mit CoreGen Glueck) Das nur so ein paar Gedanken.. Gruss, - Strubi
Datum: 12.05.2008 16:25
> Das ist das gleiche.
Nein, das ist das Betragsquadrat und nicht das Quadrat.
Datum: 12.05.2008 17:11
Morin wrote:
> Nein, das ist das Betragsquadrat und nicht das Quadrat.
Bitte was? Das ist gemeint, das wird gemacht, das ist beabsichtigt, das
ist das gleiche. Und natürlich gilt

http://en.wikipedia.org/wiki/Spectral_density
Datum: 12.05.2008 19:28
Eben. Schau doch nochmal nach was du oben behauptet hast ;)
Datum: 12.05.2008 21:21
1. Gefordert: Faltung. 2. Vorgeschlagen: Umweg über Spektrum. 3. Das macht man mit Betragquadraten. 4. TS wundert sich über konj. komplex. 5. Hinweis: Ist das selbe mit mathematisch korrekter Formulierung und bewusst unverfälschtem Zitat vom TS. Ist doch albern, aber typisch für hier. Für jewöhnlich isset so jerejelt, dass der Kopp nich nache Beene kejelt. In diesem Sinne.
Datum: 12.05.2008 22:03
Du hast recht, das ist wirklich exterm albern. Macht aber nix, ein jeder Leser wird deine Behauptung, Quadrat und Bestragsqudrat seien dasselbe, leicht wiederfinden. In diesem Sinne: Machs gut!
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [vhdl]VHDL-Code[/vhdl]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel