BeiDou-2 (COMPASS) preliminary results
Many commercial manufactures have already released firmware updates that allow to work with BeiDou. Among them are: ublox, NovAtel, Septentrio, javad and others.
In this note preliminary results of BeiDou signal processing are described. On the figure 1 acquisition process output is shown. Up to 5 non-geostationary satellites can be seen from my location.
I would like to mention that BeiDou-2 signals are similar to GPS L1 C/A with one significant difference. Each navigation symbol that lasts 20 ms is additionally modulated by 20-symbol Neimann-Hoffman code (0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0) (details are on the figure 2 taken from ICD).
This means that during acquisition of relatively weak signals we can not use directly coherent integration for more than 1 ms (up to 10 ms) like we can do for GPS L1 C/A signals. Straightforward attitude to overcoming this problem can be the following. (At first I want to mention that more than 10 ms of integration is not used as it requires too much time.)
One well-known method of acquisition signals which can change sign every ranging code period is zero-padding. The idea of this method is very well described in "Development and Testing of an L1 Combined GPS-Galileo Software Receiver" doctor philosophy thesis by Florence Macchi (PLAN, Calgary, 2010). If we take one period of ranging code and padd it with zeros (of the same length as ranging code) and make fast correlation with 2 periods of incomming signal then we'll have at least one peak that correspond to what we are looking for. This method fits well for GALILEO E1 BOC(1,1) signal or for GLONASS L3 data-channel, but for BeiDou-2 we have problem: this way we can integrate only 1 ms or 20 ms (or N*20ms). 1ms is usually not enough to acquire all satellites visible in open sky and 20ms is too long and requires too much time.
What can be done in order to use integration periods between 1ms and 20 ms? One of the easiest solutions is to repeat several times acquisition process for different parts of incomming signal to cover all 20 symbols of NH code. For example, if we want to use 5ms integration time then we have to take 25ms of incomming signals, divide them into 4 parts (0..10ms, 5..15ms, 10..20ms, 15..25ms) and correlate each part with the first part of NH-code (0,0,0,0,0 in our case) padded with 5ms zeros in the end. And in the end to find peak of correlations. This is what realized in my current version of SciLab software post-processing receiver available as usual on googlecode. In initSettings.sci file three options are available for acquisition (1ms/3ms/5ms integration time).
Tracking functions also were changed. I prefer to use combined FLL/PLL carrier tracking loop. And during experiments with COMPASS signals one bug was revealed which had not been seen before. Frequency discriminator used in carrier tracking loop worked incorrectly when change of sign in incomming signal occured. For signals like GPS C/A or GLONASS ST this bug was not visible because change of sign occures relatively infrequently. But for signals like GLONASS L3 CDMA or BeiDou-2 which have additional modulation of ranging code this bug can be frequently seen. The results of wrong tracking are shown on figure 3.
After correcting frequency discriminator tracking works fine. The results can be seen on figure 4 for the same satellite.
I also tried to get PVT solution but the results are not so good (figure 5). Still looking for the bugs.