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