Effektivwertberechnung

OP (Firma: student) #2598568
Lesenswert?

hallo,

ich möchte gerne RMS in VHDL umwandeln.
Formel lautet:

RMS= sqrt( 1/n * sum(x^2))

ich habe versucht es zu programmieren, aber es hat nicht ganz geklappt.
ich hoffe kann mir jemand dabei helfen.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
use IEEE.math_real.all;

Package rms is

  function effektiv ( rms : real) return real is;

end rms;

Package body rms is

  function effektiv ( rms : real) return real;

  variable sum : real;
begin
  sum := 0; -- ???

  for i in rms'Range loop

    sum := sqrt(sum + rms(i)**2);

  end loop;

  return sum;
end rms;
OP (Firma: student) #2599222
Lesenswert?

Hallo Lothar,

ja, es soll in Hardware laufen.


Ich weiß nicht, ob die Funktion richtig eingesetzt ist.

ich habe eine Bsp. gefunden und diese versuche ich in VHDL umwandeln.

--------------------------------------------------
Ada
--------------------------------------------------
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
with Ada.Numerics.Elementary_Functions;
use Ada.Numerics.Elementary_Functions;

procedure calcrms is

  type float_arr is array(1..10) of Float;

  function rms(nums : float_arr) return Float is
    sum : Float := 0.0;
    begin
    for p in nums'Range loop
      sum := sum + nums(p)**2;
    end loop;
    return sqrt(sum/Float(nums'Length));
  end rms;

  list : float_arr;
begin
list := (1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0);
put( rms(list) , Exp=>0);
end calcrms;

Output:
 6.20484
-----------------------------------------------------
Moderator (Firma: Titel) Persönliche Seite #2599251
Lesenswert?

Martin Reizing schrieb:
> ja, es soll in Hardware laufen.
Hoppla.... :-o

real in Hardware. Viel Spass...
sqrt in Hardware und dann noch als real. Dabinichmalgespannt...

> ich habe eine Bsp. gefunden und diese versuche ich in VHDL umwandeln.
Du kannst nicht so einfach so ein Programmschnipsel aus einer 
sequentiellen Programmiersprache in eine /parallele 
Hardwarebeschreibung/ übertragen.

> Package rms is
Warum machst du da gleich ein Package auf? für erste Tests kannst du das 
einfach direkt in die Testbench schreiben. Aber wie gesagt: so wird das 
nie&nimmer was...

Das ist z.B. eine integer-Wurzel:
http://www.lothar-miller.de/s9y/archives/73-Wurzel-in-VHDL.html
Und dort habe ich auch mal das C-Original und die beiden Hardware 
Lösungen mit dabei...
Moderator (Firma: Titel) Persönliche Seite #2601681
Lesenswert?

Martin Reizing schrieb:
> Was ist daran falsch?
Jede Abbildung eines analogen Signals auf ein digitales Signal MUSS 
ZWINGEND zeitdiskret sein!

Martin Reizing schrieb:
> Hier wird kein digitale Signale bearbeitet, sondern analoge
Es wird ein digitalisiertes analoges Signal verarbeitet. Und dieses 
digitalisierte Signal zerlegt das analoge Signal in kleine 
Zeitabschnitte und verliert dabei Information (Shannon+Nyqiust lassen 
grüßen).

Diese Technik ist aber aus dem letzten Jahrtausend und in vielen Bücher 
gut und ausreichend beschrieben. Dein Problem ist also nicht VHDL, 
sondern das fehlende Verständnis für digitale Signalverarbeitung.

Martin Reizing schrieb:
> RMS-Berechnung soll nicht zeitdiskret sein.
Dann kannst du keine (schrittweise) for-Schleife nehmen, sondern du 
brauchst ein (durchgehendes) Integral!
Moderator (Firma: Titel) Persönliche Seite #2601956
Lesenswert?

G.M. schrieb:
> RMS= sqrt( 1/n) geht auch nach Heron
Es geht (am Rande bemerkt) hier (noch) nicht ums Wurzelziehen. Es geht 
zuerst mal um das grundlegende Verständnis zeitdiskreter Betrachtungen 
und Berechnungen.

Christian R. schrieb:
> Beschreib doch mal deine gesamte Aufgabe.
Am besten mit einer Skizze, was wo wie gewandelt und übertragen wird. 
Und was daraus werden soll. Und wohin die Daten dann gehen sollen...
Moderator (Firma: Titel) Persönliche Seite #2602856
Lesenswert?

Martin Reizing schrieb:
> Die Schaltung habe ich so grob skizziert.
Nachdem du dort schon eine Summe ins FPGA gezeichnet hast, muss das 
Ganze zeitdiskret sein. Denn sonst hätte da ein Integral reingehört.

Und jetzt hast du wie gesagt erst mal ein logisches Problem mit dem 
Verständnis zum Thema "Signalverarbeitung", nicht mit der Realisierung 
im FPGA!

BTW: in dem Bild passt noch einiges nicht zusammen.
1. Warum werden 30 Bit deserialisiert, wenn am Anfang der Kette nur 14 
Bit eingespeist werden?
2. Warum sind nach dem Deserializer immer noch LVDS-Signale? Gehst du da 
parallel mit LVDS ins FPGA? Das bäuchte aber einige Pins:
20 Kanäle *30 Bit *2 LVDS Leitungen = 1200 Pins... :-o
OP (Firma: student) #2602897
Lesenswert?

> Ganze zeitdiskret sein. Denn sonst hätte da ein Integral reingehört.
Ja hast recht. Es ist Zeitdiskret.

> 1. Warum werden 30 Bit deserialisiert, wenn am Anfang der Kette nur 14
> Bit eingespeist werden?
kommen zusätzlich 16 Bits dazu über Serializer.

> 2. Warum sind nach dem Deserializer immer noch LVDS-Signale?
ja. es wird parallel mit LVDS ins FPGA gegangen.
Moderator (Firma: Titel) Persönliche Seite #2604759
Lesenswert?

Martin Reizing schrieb:
> Die Frage ist, brauche ich in FPGA diese Effektivwertberechnung?
Ja, sagen wir mal so: ich brauche sie nicht. Ob du sie brauchst, 
hängt doch von deiner eigentlichen Aufgabe ab...

> Ich will einfach wissen, ob das nötig ist oder nicht.
Das sollte aus der Aufgabenstellung hervorgehen.

Aber das wars auch, was schon Christian R. schrieb:
>> Ob du einen RMS brauchst, weiß ich nicht. Beschreib doch mal deine
>> gesamte Aufgabe. Welche Ströme sollen gemessen werden?
#2628795
Lesenswert?

Ich empfehle dir einfach, das Semester oder vielleicht doch besser das 
ganze Studium nochmal zu wiederholen... Denn von eigenständigem Lernen 
hast du wohl noch überhaupt nichts gehört. Müssen wir dir hier alles 
Vorkauen?

Die beiden Fragen, die du gestellt hast, sind ohne weitere Angaben 
überhaupt nicht zu beantworten. Es kommt halt einfach darauf an, wie du 
das ganze implementierst. Wenn du schlau wärest (wovon ich leider im 
Moment noch nicht so ganz überzeugt bin), dann würdest du dich in deine 
von dir bevorzugte FPGA-Entwicklungsumgebung setzen und einfach ein paar 
verschiedene Versionen der RMS-Berechnung implementieren. Dann bekommst 
du ein Gefühl dafür, wie viele Logik-Primitive du benötigst und wie lang 
die gesamte Berechnung dauert. Ein paar Stichworte mit denen du dich 
befassen solltest: Pipelining, Parallelität usw.

Gruß
Marius
Moderator (Firma: Titel) Persönliche Seite #2628839
Lesenswert?

Marius Wensing schrieb:
> dann würdest du dich in deine
> von dir bevorzugte FPGA-Entwicklungsumgebung setzen und einfach
> ein paar verschiedene Versionen der RMS-Berechnung implementieren
Zuvor jedoch ...
... würdest du dir das Ganze einfach mal auf ein Blatt Papier zeichnen. 
Und überall dort, wo Fragezeichen sind (und das ist derzeit an jeder 
Stelle auf diesem Blatt), Informationen sammeln.

Martin Reizing schrieb:
> 1. wie viele logische Operatoren bwz. wie viele Addition, multiplikation
> und FF brauche ich?
Wie würdest du den Effektivwert auf einem Blatt Papier ausrechnen? 
Ersat, wenn du das kannst, dann macht "Weitermachen" überhaupt Sinn. 
Denn sonst ist es, wie wenn ein Blinder ein Auto fährt: Er kann zwar Gas 
geben, Schalten und Bremsen, er weiß aber gar nicht, WARUM und WOFÜR 
eigentlich?

> 2. wie viele zwischen Speicher wird in FPGA benötigt?
Wenn du einen RMS-Wert in Echtzeit berechnest, brauchst du nur das 
Summenregister z.B. mit 53 Bit Breite...
Moderator (Firma: Titel) Persönliche Seite #2630023
Lesenswert?

Darius schrieb:
> VHDL IST eime Programmiersprache und *90%* sind synthetisierbar.
ROTFL...
Das ist der beste Witz in diesem Jahrtausend. Der dürfte kaum zu toppen 
sein. Ich sage nur File_IO, Text_IO, Zeiten und Attribute...

Ich sage: etwa 5% sind synthetisierbar.
Oder andersrum: hole 100 Anfänger und gib ihnen ein VHDL-Buch. Dann lass 
sie eine Ampel programmieren. Und dann wirst du bestenfalls 5 
Beschreibungen bekommen, die es über den Simulator raus schaffen. Eher 
weniger!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren