Hallo zusammen,
ich habe paare Verständnisfragen bzw. benötige Tipps wie ich meine
Aufgaben lösen kann.
ich bin dabei verschiedene Siganle softwarmässig zu generieren und über
eine Karte (FPGA+14-Bit DAC) zu senden.die karte hat maximale
Bandbreite 100 kHz , Samples rate kann bis zu 2 Mhz und vor Dac ist ein
FIFO, auf dem bis zu 55245 Samples geschrieben werden können.
als Einstieg versuche ich Sinus- und Sägezahnschwingung zu erzeugen, die
Schwingung soll zwischen -3.14 und 3.14 und in 3 ms gesendet weren:
1 | fs=2*B; // fs abtastfrequenz , ich habe B als maximale Bandreite 2 MHZ gewählt
|
2 | inputrate=fs; // samples rate
|
3 | tmin=0; // Abtastwerte in 3 ms abgespielt werden
|
4 | tmax=3;
|
5 | samplessize=(tmax-tmin)*fs; // anzahl der Samples
|
6 | xmin=-3,14;
|
7 | xmax=3.14;
|
8 | xr=(xmax-xmin)/samplessize;
|
9 |
|
10 | for(X=Xmin;X<Xmax;X+=xr){
|
11 | Y[i]=(int)floor(double)2^14*sin(X)); // Abtastwerte mit 2^14 Amplitudenstuffen
|
12 | i++
|
13 | }
|
Für die Generierung Sägezahnschwingung habe auch das gleich gemacht:
1 | fs=2*B; // fs abtastfrequenz , ich habe B als maximale Bandreite 2 MHZ gewählt inputrate=fs; // samples rate
|
2 | tmin=0;
|
3 | tmax=3;
|
4 | samplessize=(tmax-tmin)*fs; // anzahl der Samples
|
5 | xmin=-3,14;
|
6 | xmax=3.14;
|
7 | xr=(xmax-xmin)/samplessize;
|
8 |
|
9 | periode =3; // anzahl der Perioden zw. xmin und xmax
|
10 | double T=(double)((xmax-xmin)/periode);
|
11 | Amin=-5; // minimale Amplitude
|
12 | Amax=5; //maximale Amplitude
|
13 | double rest=0;
|
14 | for(X=xmin; X<xmax; X+=xr){
|
15 | rest=fmod(X,T);
|
16 | Y[i]=(int)floor((double)2^14* (((Amax-Amin)/T)*rest+Amin)/(Amax-Amin)));
|
17 | i++
|
18 | }
|
nun meine Frage: habe ich die Abtastwerte und die Quantisierung der
Amplitude richtig gemacht und wie kann ich am besten die Abtastfrequenz
bzw Samplesrate und die Anzahl der Samples auswählen.
bin für jede Hilfe sehr dankbar.
Gruß
Ctoly