- Tần số sóng mang không Doppler: IF = 4.1304e6 Hz
- Tần số lấy mẫu:
Sampling Freq = 16.3676 Hz - Tốc độ chip mã PRN:
CodeFreqBasis = 1.023e6 chip/s - Độ dài mã PRN hoàn chỉnh: CodeLength = 1023
- Số vệ tinh: 32
- Tần số sai lệch do Doppler: ± 7 KHz - Ngưỡng xác định vệ tinh dò được: AcqThreshold = 2.5
- Số kênh bộ thu: Channels = 12
- Tín hiệu tới: Tín hiệu từ đầu ra bộ ADC. Trong mô phỏng này dữ liệu 11ms được lấy từ file Multipath.bin với các bit -3, -1, 1, 3.
- Bộ tạo sóng mang: Chuỗi mấu có độ dài 1ms được tạo ra với sóng mang exp(j*2*pi**fc*ts*nn); fc là tần số sóng mang có Doppler; ts =1/fs; nn là mảng với các số từ 0 đến 16367.
- Bộ tạo mã PRN: 32 mã PRN, mỗi mã PRN hoàn chỉnh với độ dài 1ms là 1023 chip được lấy mẫu với tần số16.3676 e6 Hz. 1023 chip của mã C/A được thực hiện theo sơ đồ bộ tạo mã C/A[8]
Qua quá trình tìm hiểu lý thuyết em đã đưa ra mô hình mô phỏng một bộ thu trên nền C++ với ADC 1-bits. Đây chính là ví dụ thể hiện kết quả áp dụng SDR vào một máy thu GPS. Mã nguồn được thể hiện như bên dưới:
#include <string.h> #include <stdlib.h> #include <stdio.h> #include <math.h> const double PI = 3.14159265358979323846;
struct CACODE { // GPS coarse acquisition (C/A) code generator. Sequence length = 1023.
char g1[11], g2[11], *tap[2];
CACODE(int t0, int t1) { // Mỗi GPS có 1 taps duy nhất tap[0] = g2+t0; tap[1] = g2+t1; memset(g1+1, 1, 10); memset(g2+1, 1, 10); } int Chip() {
return g1[10] ^ *tap[0] ^ *tap[1] ? 1 : -1; } void Clock() { g1[0] = g1[3] ^ g1[10]; g2[0] = g2[2] ^ g2[3] ^ g2[6] ^ g2[8] ^ g2[8] ^ g2[10]; memmove(g1+1, g1, 10); memmove(g2+1, g2, 10); } }; double Noise() { // static double x1, x2; static int i; if (i=!i) { // x1,x2 x1 = (rand()+1)/32768.0; x2 = (rand()+1)/32768.0; // Box-Muller transform return sqrt(-2*log(x1))*cos(2*PI*x2); } else return sqrt(-2*log(x1))*sin(2*PI*x2); } void main(void) { #define BP 50
const double Ac = 100; // -130 dBm = 71nV RMS = 100nV Peak = GPS signal @ antenna
const double DC = 50; // Anten DC offset
const double fc = 9975e3; // Tần số IF trung tâm (as S53MV design) const double fs = 6138e3; // Lấy mẫu (as S53MV design)
//
__int64 lo_rate = __int64(2301.1e3 / fs * pow(2, BP)), lo_phase = 0; __int64 ca_rate = __int64(1023.1e3 / fs * pow(2, BP)), ca_phase = 1000i64<<BP;
//
CACODE sv1(2,6), sv2(3,7), sv3(4,8), *target = &sv2;
char code[1023];
for (int i=0; i<1023; target->Clock()) code[i++] = target->Chip(); double t=0;
const __int64 dither = 1i64<<(BP-1); // Half-chip = 1i64<<(BP- 1); full chip = 1i64<<(BP-0)
#if 1
const int lo_sin[] = {1,1,-1,-1}; const int lo_cos[] = {1,-1,-1,1}; #else
const int lo_sin[] = {0,1,0,-1}; const int lo_cos[] = {1,0,-1,0}; #endif
for (int b=0; b<200; b++) { // Data bits int I=0, Q=0;
for (int r=0; r<20; r++) { // 20 code repeats in 20ms; GPS data rate = 50bps
int ie=0, qe=0, ip=0, qp=0, il=0, ql=0; // 1ms decimation integrators
for (int j=0; j<1023; j++) { // Code length = 1023
for (int k=0; k<6; k++) { // 6 samples per chip as per S53MV design (fs=6*1023=6138)
double y = sin(2*PI*fc*t); //
double v = Ac * sv1.Chip() * (((b>>0)&2)-1) * y // Data = 00110011 ... + Ac * sv2.Chip() * (((b>>1)&2)-1) * y // 0000111100001111 ... + Ac * sv3.Chip() * (((b>>2)&2)-1) * y // 0000000011111111 ... + An * Noise(); // DC offset v += DC + v*v + v*v*v;
//
int d = v>0? 1 : -1; // Đồng bộ nội
int LO_I = lo_sin[lo_phase>>(BP-2)]; int LO_Q = lo_cos[lo_phase>>(BP-2)]; // Early, late & punctual code
int ca_e = code[((ca_phase+dither)>>BP) % 1023]; int ca_p = code[ (ca_phase >>BP) % 1023]; int ca_l = code[((ca_phase-dither)>>BP) % 1023]; // Mixer ie += d*ca_e*LO_I; qe += d*ca_e*LO_Q; ip += d*ca_p*LO_I; qp += d*ca_p*LO_Q; il += d*ca_l*LO_I; ql += d*ca_l*LO_Q; // Code NCO ca_phase += ca_rate; ca_phase %= 1023i64<<BP; // Carrier NCO lo_phase += lo_rate;
lo_phase &= (1i64<<BP) - 1; t += 1/fs;
}
sv1.Clock(), sv2.Clock(), sv3.Clock(); }
I += ip; Q += qp;
// Power(E) - Power(L) = (IE^2+QE^2) - (IL^2+QL^2) = (IE+IL)*(IE-IL) + (QE+QL)*(QE-QL)
__int64 err = (ie+il) * (ie-il) + (qe+ql) * (qe-ql); // Code lock PI controller
ca_phase += err << (BP-19); ca_rate += err << (BP-40);
// Costas loop balanced mixer: I*Q = data(t)^2 * sin(2*phase_error) / 2
err = (ip * qp) >> 1; #if 0
// ATAN method
double theta = atan2(double(qp), double(ip)); lo_phase += theta/2/PI * pow(2, BP);
//fprintf(fp, "%g\n", theta); #else
// Carrier lock PI controller lo_phase += err << (BP-19); lo_rate += err << (BP-40); #endif
ca_phase %= 1023i64<<BP; lo_phase &= (1i64<<BP) - 1; } printf("%-3d %8.1f %7d %7d %9.3f %7.0f %9.0f %9.0f\n", b, double(ca_phase>>(BP-4))/16, I, Q, atan2(double(Q),double(I))/2/PI, sqrt(I*I+Q*Q), lo_rate * fs / pow(2, BP), ca_rate * fs / pow(2, BP) ); } } .
KẾT LUẬN
Công nghệ SDR với những ứng dụng thực tế đã và đang được triển khai sẽ mang lại những giá trị vô cùng to lớn. Với sự phát triển mạnh mẽ của ngành công nghiệp phần mềm thì SDR hứa hẹn sẽ là công nghệ phát triển trong tương lai. Đồ án đã trình bày những tìm hiểu của em về công nghệ SDR và ứng dụng của nó cho bộ thu trực tiếp GPS – một thiết bị đang được sử dụng phổ biến hiện nay. Nghiên cứu của em đã chỉ ra tính ưu việt của công nghệ SDR trong một ứng dụng cụ thể đó là bộ thu GPS. Bộ thu GPS áp dụng công nghệ SDR đã thay thế một số khối phần cứng chuyên dụng trong kiến trúc bộ thu phần cứng thông thường bằng phần mềm để mang lại những khả năng mới cho bộ thu đáp ứng yêu cầu ngày càng cao của người dùng như tính mềm dẻo, thích ứng cao và đặc biệt là khả năng tích hợp và hội tụ mạng. Trên cơ sở lý thuyết tìm hiểu được, em đã xây dựng được thuật toán mô phỏng khối dò sóng tín hiệu. Em hi vọng những tìm hiểu của em sẽ giúp ích cho các nghiên cứu sau này về công nghệ SDR áp dụng cho các thiết bị vô tuyến khác. Hướng nghiên cứu tiếp theo của em sẽ là chế tạo ra chiếc máy thu GNSS dựa trên công nghệ SDR có thể thu đồng thời nhiều tín hiệu vệ tinh của cả hệ thống GPS và Galileo.
Trong quá trình làm đồ án, dù đã cố gắng nhưng cũng không thể tránh khỏi những thiếu sót, em rất mong nhận được những ý kiến đóng góp quý báu của các thầy cô và các bạn!
Cuối cùng, em xin được gửi lời cám ơn sâu sắc đến thầy PGS.TS Nguyễn Hữu Trung, cô PGS.TS Nguyễn Thúy Anh đã giúp đỡ tận tình và tạo điều kiện để em hoàn thành đồ án này!
DANH MỤC CÁC TỪ VIẾT TẮT
Từ viết tắt Nội dung Ý nghĩa
GNSS Global Navigation Satellite System Hệ thống vệ tinh dẫn đường toàn cầu GPS Global Positioning System Hệ thống định vị toàn cầu
GLONASS G Orbiting Navigation Satellite System Hệ thống định vi toàn cầu Liên xô CDMA Code Division Multiple Access Đa truy nhập phân chia theo mã FDMA Frequency Division Multiple Access Đa truy nhập phân chia theo tần số QBSK Quadrature Phase Shift Keying Điều chế pha cầu phương
PRN Pseudo random noise Nhiễu giả ngẫu nhiên IF Intermediate Frequency Trung tần
BPF Bandpass Filter Bộ lọc thông dải
SSB Baseband Băng cơ bản
ADC Analog to Digital Converter Bộ chuyển đổi tương tự số LO Local Oscillator Bộ tạo dao động nội
LPF Low pass filter Bộ lọc thông thấp BER Bit Error Rate Tốc độ lỗi bit
LNA Low noise Ampliper Trung tâm truyền thông quả SDR Software-Defined Radio Công nghệ vô tuyến phần mềm QoS Quality of Service Chất lượng dịch vụ
FPGA Field programmable gate array Vi mạch có khả năng lập trình được DSP Digital signal processor Bộ xử lý tín hiệu số
MIMM Mode Identification and Monitoring
Module Phân hệ xác định và giám sát mode MNSN Mode Negotiation and Monitoring
Module Phân hệ đàm phán và giám sát mode SDM Service Deployment Manager Bộ quản lý triển khai dịch vụ
JRRM Joint Radio Resource Management
TÀI LIỆU THAM KHẢO
[1] Md. Maruf Hossain, “Design of RF Front End for Multi_Band Multi-System GNSS Receivers”, pp. 9-14, 31/1/2008
[2] SDR Forum, “SDRF Cognitive Radio Definitions”, Working Document SDRF-06- R-0011-V1.0.0, ra ngày 8/11/2007.
[3] Walter Tuttlebee, “Software Defined Radio: Origins, Drivers and International Perspectives”, John Wiley & Sons, Ltd, England 2002.
[4] SDR Forum, “Base Station System Structure”, Document No. SDRF-01-P-0006- V2.0.0, ra ngày 15/1/2002.
[5] Vito Giannini, Jan Craninckk, Andrea Baschirotto, “Baseband Analog Circuits for Software Defined Radio”, Springer, Netherlands 2008.
[6] Markus Dillinger, Kambiz Madani, Nancy Alonistioti, “Software Defined Radio: Architectures, Systems and Functions”, John Wiley & Sons, Ltd, England 2003.
[7] Kai Borre - Dennis M. Akos - Nicolaj Bertelsen - Peter Rinder - Soren Holdt Jensen – A Software-Defined GPS and Galileo Receiver - A Single-Frequency Approach.
[8] Jaizki Mendizabal Roc Berenguer Juan Menlendz - GPS_GALELIO Reciver Design in 2009.