Correlation experiments. Construct a test-input with 6000 samples of Gold26, find the match-point and use 1/4 chips spacing
public void fillArray13()
{
// correlation experiments
// construct a test-input with 6000 samples of Gold26
// find the match-point
// now use 1/4 chips spacing
int shift = 3600; // display only most interesting part
int inplen = 6000;
int[] testinput = new int[inplen];
int[] bins = new int[inplen];
System.out.println("experiment 13. Correlation 1/4 chips spacing");
GoldSequence gold26 = new GoldSequence(2,6);
// throw away first 35 chips
for (int i = 0; i < 35; i++)
{
gold26.nextan4();
}
for (int i = 0; i < testinput.length; i++)
{
testinput[i] = gold26.nextan4();
}
gold26.reset();
// this is an implimentation of a correlator
for (int i = 0; i < inplen; i++)
{
gold26.reset();
int acc = 0;
for (int j = 0; j < 1023; j++)
{
if ((i + j) < inplen)
{
acc = acc + testinput[i + j] * gold26.nextan4();
}
}
bins[i] = acc;
}
plotData = new double[1268];
for(int i=0; i<1268; i++)
{
plotData[i] = bins[i + shift];
System.out.println(i + " " + plotData[i]);
}
}
|
And this results in the following beautiful graphic output:
Where is the peak? Throw away the first 35 samples. With 1/4 chips spacing there are 4*1023=4092 samples. So after 4092 - 35 = 4057 there will be a peak. With a shift of 3600 the peak in the display is at bin 4057 - 3600 = 457. The triangle shape is clearly visible.
A more sophisticated correlation experiment. Construct a test-input with 6000 samples of Gold26, find the match-point. Now use 1/4 chips spacing and add Gaussian noise. Negative sign of input-PRN
public void fillArray14()
{
// correlation experiments
// construct a test-input with 6000 samples of Gold26
// find the match-point
// now use 1/4 chips spacing
// and add Gaussian noise
// negative sign of input-PRN
int shift = 3600; // display only most interesting part
int inplen = 6000;
double[] testinput = new double[inplen];
double[] bins = new double[inplen];
Random r = new Random();
int noise = 5;
int sign = -1;
System.out.println("experiment 14. Correlation 1/4 chips spacing" +
" and Gaussian noise added");
GoldSequence gold26 = new GoldSequence(2,6);
// throw away first 35 chips
for (int i = 0; i < 35; i++)
{
gold26.nextan4();
}
for (int i = 0; i < testinput.length; i++)
{
testinput[i] = sign * gold26.nextan4() + noise * r.nextGaussian();
}
gold26.reset();
// this is an implimentation of a correlator
for (int i = 0; i < inplen; i++)
{
gold26.reset();
double acc = 0;
for (int j = 0; j < 1023; j++)
{
if ((i + j) < inplen)
{
acc = acc + testinput[i + j] * gold26.nextan4();
}
}
bins[i] = acc;
}
plotData = new double[1268];
for(int i=0; i<1268; i++)
{
plotData[i] = bins[i + shift];
System.out.println(i + " " + plotData[i]);
}
}
|
The corresponding output is:
The peak is, again, at bin 457. The program is in fact the same as the previous example