Forum: FPGA, VHDL & Co. Normierung nicht möglich: dynamischer Schwellwert in Hardware


von Tobias (Gast)


Lesenswert?

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

von numeri (Gast)


Lesenswert?

Hää?

von Tobias (Gast)


Lesenswert?

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.

von Olga (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von daniel__m (Gast)


Lesenswert?

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ß

von Lattice User (Gast)


Lesenswert?

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.

von Schlumpf (Gast)


Lesenswert?

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.

von Strubi (Gast)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.