Forum: Digitale Signalverarbeitung / DSP / Machine Learning SNR verändern bei Generierung von Rauschen


von Ctoly (Gast)


Lesenswert?

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

von Ctoly (Gast)


Lesenswert?

kann mir  keiner weiterhelfen, wie ich das Rauschsignal so generieren 
kann, dass Signal-Rausch-Abstand zB SNR=10 dB sein wird?

von Hallmackenreuther (Gast)


Lesenswert?

Entweder, du nutzt eine bekannte Folge, deren RMS bekannt ist und 
vorskaliert werden kann, oder du misst den RMS und passt an.

von safdsafsfsdf (Gast)


Lesenswert?

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

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.