Im Rahmen meiner Diplomarbeit, muss ich eine TDEV Auswertung nach ITU-T
G.810 II.3 machen.
Um diese Auswertung durchzuführen, habe ich ein kleines C++ Programm
geschrieben. Im Anhang befindet sich die Formel, zur Berechnung des
TDEV.
Leider bin ich mir bei den Ergebnissen für größere n relativ unsicher,
ob sie richtig sind. Könnt ihr mal die Formel mit meinen C++ Code
vergleichen und sagen, ob ich noch einen Fehler im Code habe?
In TIE[] sind die Messpunkte enthalten.
size gibt die Größe des Arrays TIE, in der Funktion berechnenTDEV der
Klasse auswertung, an. Size kann in manchen Fällen eine Größen von
200.000 annehmen.
C++code:
1 | double auswertung::berechnenTDEV(unsigned int n){
|
2 | double *zwischenspeicher1 = new double [n];
|
3 | double *zwischenspeicher2 = new double [size-3*n+1];
|
4 | for(unsigned int j = 0;j<=(size-3*n);j++){
|
5 | for(unsigned int i=j;i<=(n+j-1);i++){
|
6 | zwischenspeicher1[i-j]=TIE[i+2*n]-2*TIE[i+n]+TIE[i];
|
7 | }
|
8 | double y = array_addieren(zwischenspeicher1,n);
|
9 | y = y*y;
|
10 | zwischenspeicher2[j] = y;
|
11 | }
|
12 | double z = array_addieren(zwischenspeicher2,size-3*n+1);
|
13 | z= z / (6*n*n*(size-3*n+2));
|
14 | return(sqrt(z));
|
15 | }
|
16 |
|
17 | //Erzeugt die Summe eines Arrays
|
18 | double array_addieren(double *array1, int size){
|
19 | while(1){
|
20 | if(size == 1){
|
21 | break;
|
22 | }
|
23 | for(int i = 0;i<size/2;i++){
|
24 | array1[i]=array1[i*2]+array1[i*2+1];
|
25 | }
|
26 | if(size%2){
|
27 | array1[(size/2)-1]=array1[(size/2)-1]+array1[size-1];
|
28 | }
|
29 | size = size/2;
|
30 | }
|
31 | return(array1[0]);
|
32 | }
|