Hallo, ich versuche zur Zeit eine Detektion in Hardware zu entwickeln. Es geht eigentlich um Folgendes: Wenn eine (in Realtime stattfindende) Korrelation einen gewissen Wert überschreitet, wird ein Frame detektiert. Eigentlich wollte ich den Korrelationswert normieren (auf die Energie), dass der Ausgangswert dann eben immer zwischen 0 und 1 ist, aber die Divison übersteigt einfach alle Zeitbedingungen. Daher muss ich mit eine Alternative überlegen: - Gibt es eine Alternative zur Divison bei einer Normierung? - Hat jemand schon mal erfolgreich eine Divison (nicht nur Simulation sondern komplette Implementierung) realisiert? - Hatte jemand schon mal ähnliche Probleme oder einen passenden Ansatz ? Herzlichen Dank im Vorraus, Grüße, Tobias
numeri schrieb: > Hää? Also eigentlich habe ich eben das Problem, in einem Empfänger die Empfangsdaten in Echtzeit auf einen Wert (eine Korrelation über einige Symbole) zu untersuchen. Dieser ändert sich ständig, steigt aber bei einer richtigen Detektion hoch an und kann daher unterschieden werden. Das Problem ist nun, das dieser Piekwert eben nicht immer derselbe ist. Ich habe versucht den Korrelationswert zu normieren um den Schwellwert genau auf einen fixen Wert zu bekommen. Diese Normierung hab ich aber nicht hinbekommen. Hat das schon mal jemand geschafft oder ist Divison allgemein nicht möglich? Hoffe es ist verständlich geschrieben.
Tobias schrieb: > Hat jemand schon mal erfolgreich eine Divison (nicht nur Simulation > sondern komplette Implementierung) realisiert? Nein, du wärst der erste. Der erste, der es jemals geschafft hat, eine Division im FPGA zu implementieren.
Tobias schrieb: > Hat jemand schon mal erfolgreich eine Divison (nicht nur Simulation > sondern komplette Implementierung) realisiert? Du kannst so was bei Altera direkt hinschreiben, dann kommt eine kombinatorische Division heraus. Du brauchst dann eben Zeit und ein großes FPGA. Oder du nimmst einen der Divisionsalgorithmen die herumgeistern oder du nimmst einen IP-Core... Ich z.B. mach das so: http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html
Tobias schrieb: > Hat das schon mal jemand geschafft oder ist Divison allgemein nicht > möglich? Eine Division ist durchaus möglich, sei es float oder integer. Die Frage nach dem wie hängt jedoch vom Zahlentyp und der zur Verfügung stehenden Zeit (Takte zwischen 2 Eingangswerten) ab. Xilinx (die Anderen sicher auch) bietet performate Cores dafür an. Ich habe eine 32-bit float Division am laufen, der ich jeden Takt neue Werte eingeben kann. Kostet aber ordentlich Resourcen. gruß
Tobias schrieb: > Hallo, > > ich versuche zur Zeit eine Detektion in Hardware zu entwickeln. Es geht > eigentlich um Folgendes: Wenn eine (in Realtime stattfindende) > Korrelation einen gewissen Wert überschreitet, wird ein Frame > detektiert. Eigentlich wollte ich den Korrelationswert normieren (auf > die Energie), dass der Ausgangswert dann eben immer zwischen 0 und 1 > ist, aber die Divison übersteigt einfach alle Zeitbedingungen. > Daher muss ich mit eine Alternative überlegen: > - Gibt es eine Alternative zur Divison bei einer Normierung? > - Hat jemand schon mal erfolgreich eine Divison (nicht nur Simulation > sondern komplette Implementierung) realisiert? > - Hatte jemand schon mal ähnliche Probleme oder einen passenden Ansatz ? > Korrelation/Energie > Schwellwert ist äquivalent zu Korrelation > Schwellwert*Energie Und eine Multiplikation braucht wesentlich weniger Resourcen.
Poste doch mal dein konkretes Problem. Aus deiner Beschreibung bin ich leider nicht wirklich schlau geworden. Also welche Werte korrelieren? Wie korrelieren sie? Was ist die Energie? Oder was ist der Korrelationswert? Ist er das Verhältnis aus zwei Eingangsgrößen? Wie wird er ermittelt? Von welchen Wertebereichen reden wir bei den einzelnen Größen? Welche Genauigkeit der Ergebnisse sind gefordert? Vielleicht gibt es ja auch einen anderen Ansatz, der ganz ohne Division auskommt.
Hi Tobias, > - Gibt es eine Alternative zur Divison bei einer Normierung? Ja, shiften :-) (Bin überrascht, dass das noch keiner genannt hat) > - Hat jemand schon mal erfolgreich eine Divison (nicht nur Simulation > sondern komplette Implementierung) realisiert? Ja, das geht auch ohne fertigen Core nach Schema "Schriftlich dividieren im Binärsystem". Aber da es zuviele Zyklen braucht, würde ich es in diesem Fall nicht einsetzen. > - Hatte jemand schon mal ähnliche Probleme oder einen passenden Ansatz ? > Ich hatte insbesondere bei IIR-Filtern bzw. FFTs das Problem, dass ein Overflow stattfindet, aber die Genauigkeit in den unteren Bits nicht verschütt gehen darf. Floating point will man aber u.U. (oder insbesondere auf dem FPGA) während der Rechenprozedur vermeiden. Jetzt kann man natürlich die ALU von vornherein auf die maximale Bitbreite aufbohren, oder die Norm für jeden "bin" separat mitführen. D.h. wenn Overflow stattfindet, hat man faktisch, in Pseudocode: init: q[0..N] = [1, 1, 1, .., 1] p[i] >>= 1 // Akkumulatorwert /= 2 q[i] <<= 1 // Norm * 2 D.h. du evaluierst immer in der Rechnung das Tupel (p[i],q[i]) (siehe dazu: der gute alte Bresenham-Algo fürs Linienzeichnen). Lässt sich für fast alle Berechnungen nutzen, wo Division nur stört. Und man hat immer den binären Fehler im Griff - im Gegensatz zu float-Rechnungen. Wie das im Detail für deine Berechnung anwendbar ist, musst Du halt selber herauskriegen. Schwierig wird's dann, wenn Du innerhalb der Berechnung Werte mit unterschiedlicher Norm verwursten musst, da wirds dann mit den Rundungsalgorithmen recht "akademisch", besonders bei IIR-Algos mit schlechter Stabilität (Quantisieriungseffekte bei Polen nahe am Einheitskreis). Viel Erfolg & Gruss, - Strubi
Tobias schrieb: > - Gibt es eine Alternative zur Divison bei einer Normierung? Multiplikation mit einer rationalen Zahl, deren Nenner eine (glatte) Zweierpotenz ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.