Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Technische Informatik » Gaussverteilung » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Gaussverteilung
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Hannibal
Grünschnabel


Dabei seit: 17.01.2016
Beiträge: 7

Gaussverteilung Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo Leute,

ich habe ein kleines Problem bei einer Aufgabe.
Die Aufgabe lautet folgendermaßen:
1.)Die Codewörter (z.B. 110 / 001 etc.) sollen in Vektoren abgebildet werden, wobei die logische 1 auf +1 und die logische 0 auf -1 abgebildet werden soll.
2.)Danach soll das Kanalrauschen elementweise mit einzulesender Rauschleistung dazu addiert werden.
3.)Dann wird jede positive Zahl auf 1 und jede negative Zahl auf 0 abgebildet.

Den ersten und dritten Teil habe ich geschafft aber bei dem zweiten Teil komme ich nicht weiter:

float rausch = 0.;
float rauschleisung = 0.;

for (int i = 0; i < 12; i++)
{
rausch = rausch + (float)((rand() / RAND_MAX) - 0.5);
}

das wäre so meine idee aber es kommt einfach nicht das richtige Ergebnis dabei raus.

Ich hoffe ihr könntmir helfen.
Danke im Voraus.
17.01.2016 18:26 Hannibal ist offline Beiträge von Hannibal suchen Nehmen Sie Hannibal in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

RAND_MAX ist ein int. Und zwar ein ziemlich großes.
rand() / RAND_MAX ist deshalb ziemlich sicher 0. Der Cast nach float kommt zu spät.
Außerdem solltest du das rauschen vielleicht den Bits zuweisen, statt zum Gesamtrauschen zu addieren.
Etwa so: daten[i] += (float)rand() / RAND_MAX - 0.5;

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 17.01.2016 18:37.

17.01.2016 18:37 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Hannibal
Grünschnabel


Dabei seit: 17.01.2016
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank für die schnelle Antwort eulerscheZahl.

Ich werde das aufjedenfall versuchen.
Ich hatte das so gemacht gehabt:

for (int i = 0; i<nN*nBit; i++)
{
analogNoise[i] = analog[i] + (rausch*rauschl);

if (analogNoise[i]>0)
{
fehlerwort[i] = true;
}

else
{
fehlerwort[i] = false;
}
}

weiss nicht ob das richtig ist, aber mann muss es ja noch mit der rauschleistung multiplizieren.
18.01.2016 13:13 Hannibal ist offline Beiträge von Hannibal suchen Nehmen Sie Hannibal in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Die Frage ist, wo du rausch berechnest und wo die es zuweist.
Wenn du es erst berechnest und dann jedem Wert zuweist, ist der Zufallseffekt dahin. In jedem Schleifendurchlauf muss der Rauschwert deshalb neu bestimmt werden.

__________________
Syntax Highlighting fürs Board (Link)
18.01.2016 13:16 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Hannibal
Grünschnabel


Dabei seit: 17.01.2016
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

float* analog = new float[nN*nBit];
float* analogNoise = new float[nN*nBit];
float* quant = new float[nN];
float rausch = 0.;
float rauschl = 0.;

cout << "rauschlesitung:" << endl;
cin >> rauschl;
cout << endl;

for (int i = 0; i < nN*nBit; i++)
{
if (sendewort6[i] == true)
{
analog[i] = 1.0;
}

else
{
analog[i] = -1.0;
}
}


for (int i = 0; i < 12; i++)
{
rausch = rausch + (float)((rand() / RAND_MAX) - 0.5);
}

for (int i = 0; i<nN*nBit; i++)
{
analogNoise[i] = analog[i] + (rausch*rauschl);

if (analogNoise[i]>0)
{
fehlerwort[i] = true;
}

else
{
fehlerwort[i] = false;
}
}

so sieht das ganze aus eulerscheZahl.
18.01.2016 13:39 Hannibal ist offline Beiträge von Hannibal suchen Nehmen Sie Hannibal in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wie ich vermutete: du addierst eine Konstante.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for (int i = 0; i < 12; i++)
{
	rausch = rausch + (float)((rand() / RAND_MAX) - 0.5); //zur Division zweier ints hatte ich mich schon geäußert.
}
//rausch hat jetzt immer den gleichen Wert, rausch*rauschl ist konstant
for (int i = 0; i<nN*nBit; i++)
{
	analogNoise[i] = analog[i] + (rausch*rauschl);
	//...
}


__________________
Syntax Highlighting fürs Board (Link)
18.01.2016 13:43 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Hannibal
Grünschnabel


Dabei seit: 17.01.2016
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ach so.
Das heißt ich müsste es in die zweite for schleife mit rein nehmen:

for (int i = 0; i<nN*nBit; i++)
{
//hier zum beispiel
analogNoise[i] = analog[i] + (rausch*rauschl);



vielen dank eulerscheZahl
18.01.2016 13:49 Hannibal ist offline Beiträge von Hannibal suchen Nehmen Sie Hannibal in Ihre Freundesliste auf
Hannibal
Grünschnabel


Dabei seit: 17.01.2016
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ich habe es jetzt getestet, leider kommen ganz komische werte beim empfangswert bzw bei der berechnung der absoluten und relativen fehler.

sieht jetzt wie folgt aus:

for (int i = 0; i < nN*nBit; i++)
{
if (sendewort6[i] == true)
{
analog[i] = 1.0;
}

else
{
analog[i] = -1.0;
}

for (int a = 0; a < 12; a++)
{
rausch = rausch + ((((float)rand()) / RAND_MAX) - 0.5);
}

analogNoise[i] = analog[i] + (rausch*rauschl);

if (analogNoise[i]>0)
{
fehlerwort[i] = true;
}

else
{
fehlerwort[i] = false;
}


}
18.01.2016 17:01 Hannibal ist offline Beiträge von Hannibal suchen Nehmen Sie Hannibal in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

du solltest rausch vielleicht vor der Schleife noch auf 0 setzen, sonst hast du noch das alte Rauschen zusätzlich mit drin.
Wenn das nicht hilft, brauche ich mehr als ein "ganz komische werte", nämlich Eingabe, Ausgabe und erwartete Ausgabe.

__________________
Syntax Highlighting fürs Board (Link)
18.01.2016 17:29 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Hannibal
Grünschnabel


Dabei seit: 17.01.2016
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Eingabe und Ausgabe:

Bitte geben Sie eine Rauschlesitung rauschl ein:
10

Absolute Fehler: 38 Relative Fehler: 57.5758

Das hier ist das empfangswort:
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

und das hier die quantisierte folge:
-0.374621 -0.374621 -0.374621 -0.374621 -0.374621 -0.374621 -0.374621 -0.374621
-0.374621 -0.374621 -0.374621 -0.374621 -0.374621 -0.374621 -0.374621 -0.374621
-0.374621 -0.374621 -0.374621 -0.374621 -0.374621 -0.374621

SNR in dB: -0.336012dB
SNR pro Bit: -0.112004

Die Berechnung der absoluten und relativen Fehler sowie des SNRs stimmen, da ich diese schon bei einer anderen Aufgabe überprüft habe.

und nochmals vielen dank für deine hilfe.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Hannibal: 18.01.2016 17:51.

18.01.2016 17:50 Hannibal ist offline Beiträge von Hannibal suchen Nehmen Sie Hannibal in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Stelle mal den kompletten Code rein. Wenn es eine Datei ist, dann bitte in [code]...[/code], bei mehr als .zip.

edit: per PN geklärt.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 18.01.2016 20:14.

18.01.2016 18:25 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Hannibal
Grünschnabel


Dabei seit: 17.01.2016
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen lieben Dank eulerscheZahl.
18.01.2016 20:04 Hannibal ist offline Beiträge von Hannibal suchen Nehmen Sie Hannibal in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Technische Informatik » Gaussverteilung