SNR verändern bei Generierung von Rauschen

Gast #2341619
Hallo zusammen!
nach dem ich verschiedene Signal softwarmäßig generiert habe und über
mein Bord (Fpga+Dac) gesendet habe, würde ich gerne weisses Rauschen für 
vordefinierten SNR  technisch programmieren.

bisjetzt habe das Rauschen wie folgendes generiert:

ich habe jede Abtastwerte eine Rauschenwert,die von  einfachene
Zufallsgenerator erzeugt wird, addiert :
1
 float untere  =-0.21;     // Rauschen untere Grenze
2
  float obere =0.234;       //Rauschen obere Grenze
3
  srand(time(NULL)); 
4
 
5
 int nsamples=(int)(tmax-tmin)*inputrate;  // Anzahl der abgetasteten Werte
6
  double xr=(double)Interp/CLK;   //Abtastschrittweite
7
  double  X =tmin;
8
  for(int i=0; i<nsamples; i++){
9
                            
10
   Y[i]=sin(2*pi*f*X)+((obere-untere)*((float)rand()/RAND_MAX))+untere;
11
   X+=xr
12
  }

Nun  wie kann ich das Rauschen generieren wenn zB SNR=10 dB ist?

ich weis Dass SNR=10 log(Pnutz/Prauschen) ist.

die Leistung von dem Nutzsignal werde ich so brechnen:
1
  for(int i=0; i<nsamples; i++){
2
                            
3
   Y[i]=sin(2*pi*f*1/inputrate *X);
4
   X+=xr
5
  }
6
               //nach Trapezregel:
7
 doube Pn=0;
8
 for(int i=1; i<Samples; i++){
9
   Pn+=Pn;                         
10
  Pn= ((Y[i]*Y[i]+y[i-1]*Y[i-1])/2)*tmin-tmax/nsamples
11
    }

und danach kann ich die Leistung von dem Rauschen bestimmen,aber  wie 
kann ich die Rauschsignal so generiere, dass es zB SNR=10 dB sein wird?

Ich bin wirklich für jede Hilfe dankbar, Recherche hat mir leider nicht 
sonderlich viel weitergeholfen

Gruß
Ctoly
Gast #2344936
und das implementiert könnte zB sein: rand()-werte erzeugen, daraus den 
effektivwert berechnen und entsprechend des gewünschten SNR skalieren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.