|
Zurück zur Homepage |
Um die lang- bzw. kurzfristigen Maxima zu bestimmen und auszugeben werden vier interne Register, mit einer Breite von je vier Bit, zur Speicherung von Zwischenwerten verwendet. Das sind:
Um die kurzfristigen Maxima zu bestimmen werden bei jeder fallenden Flanke des Signals FLAG die Werte von LOG_R und LOG_L eingelesen und jeweils mit dem zwischengespeicherten Wert verglichen. Ist der zwischengespeicherte Wert kleiner als der neu eingelesene, so wird er durch den neuen Wert überschrieben. Nach 0,05 Sekunden wird der Wert des Registers ausgegeben und das Register auf "0000" zurückgesetzt. Die Ausgabe erfolgt für die kurzfristigen Maxima des rechten Kanals über MAX_R bzw. über MAX_L für die des linken Kanals. Wurden noch keine Werte von LOG_R und LOG_L eingelesen, so haben die Register den Wert "0000".
Um die langfristigen Maxima zu bestimmen werden nach jeweils 0,05s, unmittelbar vor der Ausgabe der kurzfristigen Maxima, die zwischengespeicherten Werte für die langfristigen Maxima mit den Werten der kurzfristigen Maxima verglichen (jeweils für den linken und den rechten Kanal getrennt). Ist der Pegelwert des kurzfristigen Maxima größer -12 db und auch größer oder gleich dem zwischengespeicherten Wert für das entsprechende langfristige Maxima, so wird der zwischengespeicherte Wert für das langfristige Maxima durch den Wert des kurzfristigen Maximums ersetzt.
Wurde der zwischengespeicherte Wert für das langfristige Maxima eines Kanals seit 2s nicht ersetzt, so wird er durch den Wert des kurzfristigen Maximums für den entsprechenden Kanal ersetzt, sofern der Pegelwert des kurzfristigen Maximums größer -12 db ist, andernfalls wird der zwischengespeicherte Wert für das langfristige Maxima auf "0000" gesetzt.
Wurde noch kein Vergleich durchgeführt, so haben die zwischengespeicherte Wert für das langfristige Maxima den Wert "0000". Die Ausgabe der Werte für die langfristigen Maxima erfolgt zeitgleich mit der Ausgabe der Werte für die kurzfristigen Maxima über PEAK_R, für den rechten, und PEAK_L, für den linken Kanal.
Für die notwendigen Zeitmessungen werden insgesamt 3 Zähler verwendet, das sind:
Um die Dauer von 0,05s messen zu können werden die fallenden Flanken des FLAG Signals gezählt. Da dieses Signal eine Frequenz von 44,1 kHz aufweist, läßt sich dieser Zeitraum wie folgt ermitteln: Der Zähler hat den Startwert 0. Mit jeder fallenden Flanke des FLAG Signals wird der Zähler inkrementiert und zwar so lange bis er den Wert 2204 annimmt (1/44100s * 2205 = 0,05s), dann wird er auf 0 zurückgesetzt. Immer wenn der Zähler den Wert 0 annimmt sind dann 0,05 Sekunden vergangen.
Um die Zeit zu messen die die zwischengespeicherten Werte für die langfristigen Maxima nicht verändert wurden werden die Zähler (für den linken und den rechten Kanal) immer dann, wenn der Zähler für die 0,05 s den Wert 0 annimmt, inkrementiert. Der Startwert der beiden Zähler ist 0. Der Zähler wird immer dann zurückgesetzt (die Zähler sind unabhängig von einander) wenn der Wert des Zählers 39 ist (40 * 0,05s = 2s). Gleichzeitig wird der zwischengespeicherte Wert für das entsprechende langfristigen Maxima zurückgesetzt (siehe oben). Der Zähler wird aber immer auch dann zurückgesetzt, wenn der zwischengespeicherte Wert für das entsprechende langfristigen Maxima geändert wird.
|
Zurück zur Homepage |
Die Aufgabenstellung definiert den Lösungsweg bereits relativ genau. Es wäre allerdings möglich die Zeitmessung über einen internen Timer durchzuführen. Dies hätte unter Umständen zwar den Vorteil einer höheren Genauigkeit bei der Zeitmessung wäre aber mit einem unverhältnismäßigen Mehraufwand bei der Implementierung verbunden. Insbesondere ist es sehr schwierig den Timer mit dem Flag Signal zu synchronisieren.
|
Zurück zur Homepage |
Die Implementierung erfolgt in ALDEC Active VHDL Version 3.2. unter Windows NT 4.0 mit ServicePack 4. Es steht ein IBM-kompatibler PC mit K6-2 Prozessor von AMD mit 300MHz und einem Hauptspeicher von 64MB sowie ein Notebook mit PII-266 und 64MB zur Verfügung.
|
Zurück zur Homepage |
|
Zurück zur Homepage |
Der Test der Implementierung erfolgt mittels eines Testbenches in ALDEC Active VHDL Version 3.2. Um Übersichtlichkeit der auszugebenden Waveforms zu erhöhen und den Rechenaufwand für die Simulation zu verringern wird der Zähler für die kurzfristigen Maxima so modifiziert das er schon nach 16 steigenden Flanken des FLAG Signals zurückgesetzt wird.
Mittels geeigneter Testdatensätze wird dabei überprüft:
|
Zurück zur Homepage |