Lớp đện tửviễn thông k31 I.GIỚI THIỆU VỀCHƯƠNGTRÌNH Yêu cầu bài tập lớn : bằng các kiến thức vềđồhọa và sửdụng ngôn ngữ lập trình C++ đểthực hiện : “mô phỏng hiển thịmục tiêu Radar trên
Trang 1Lớp đện tửviễn thông k31
I.GIỚI THIỆU VỀCHƯƠNGTRÌNH
Yêu cầu bài tập lớn : bằng các kiến thức vềđồhọa và sửdụng ngôn ngữ
lập trình C++ đểthực hiện : “mô phỏng hiển thịmục tiêu Radar trên mà hình máy tính PC“,Quá trình thực hiện chương trình được viết bằng ngôn
ngữC++ trên nềnVisual Studio 6.0và giải quyết được các vấn đềsau đây :
- Tổng quan vềmàn hình hiển thịđược chia làm 4 phần , thuận tiên cho
quá trình quan sát : màn hình quét chung , màn hình thểhiện các
phương pháp quét , bảng hiển thịcác thông số, phần còn lại là các
phím điều khiển.
- Mô phỏng quỷđạo của 6 mục tiêu khác nhau trên cùng 1 màn hình
radar
- Hệthống radar có thểlàm việcởchếđộquét tất cảcác mục tiêu hoặc bám
sát từng mục tiêu riêng biệt.
- Hệthống thước đo cựly được trang bịvới 4 loại cho độchính xác ,và
độtin cậy cao :Quét thẳng , quét tròn ,quét xoắn và nhìn vòng Với thước xoắn có thểtăng sốvòng của thước lên đểcho độchính xác cao hơn tùy vào người sửdụng.
- Trongquá trình sửdụng các loại thước đo đểxác địnhvịtrí mục tiêu thì
người quan sát vẫn có thểnhìn thấy quỹđạo của mục tiêu nhờvào màn hình chung , màn hình này luôn luôn hiển thịquỹđạo mục tiêu trong quá trình quét.
- Chiều và tốc độquét sóng của radar có thểthay đổi được tùy vào
người sửdụng.
- Hệthống radar sẽtính toán và hiển thịcác thông sốvềmục tiêu : CựLy,
Góc , Phương Vị, ĐộCao và Vận Tốc trên bảng thông số Đồng thời có các thông báo vềthời điểm hiện tại của mục tiêu mà đài có thểquan sát.
- Chương trình được điều khiển bởi hệthống các nút điều khiển một
cách dễdàng
- Do điều kiện hạn chếvềmặt thời gian cũng nhưkinh nghiệm lập trình
còn ít nên chương trình còn có nhiều sai sót rất mong đươc sựđónggóp ý kiến của thầy cô và các bạn.
- Chúng em xin chân thành cảmơn thầyNGUYỄN TƯỜNGTHÀNH
đã hướng dẫn chúng em trong quá trình thực hiện đồán này và giúp chúng em nắm vững hơn vềkiến thức lập trình , đồhọa và mô phỏng chương trình
1.
KHÁI NI Ệ M RADAR:
-Radar là hệthống thiết bịtìm kiếm (detect) và xác định vịtrí( ranging)
của đối tượng thông qua việc thu, phát và xửlý sóng điện từ.
Trang 2NGUYÊN LÝ C Ơ B Ả N C Ủ A XUNG RADAR
Trang 3• Độrộng xungPW- PulseWidth
– thời gian bức xạtín hiệu trong một chu kỳ bứcxạ.
• Tần sốlặp xungPRF- Pulse RepetitionFrequency
– Sốxung phát trong mộtgiây.
• Thời gian lặp xungPRT- Pulse RepetitionTime(PRT=1/PRF)
• PWảnh hưởng đến:
– Phạm vi phát hiện mục tiêu củaR a d a r
– Cựly tối thiểu và tối đa có thểphát hiện mụct i ê u
của vật thểđó trong không gian
cũng nhưvị
Các tham sốcần xác định
Trang 4C Ơ S Ở V Ậ T LÝ C Ủ A RADA Rada làm việc dựa trên 4 tính chất của sóng điện từ:
1.Sóng điện từlan truyền với vận tốc hữu hạn, không đổi c=3.108(m/s)
2 Sóng điện từtruyềnthẳng.
3 Năng lượng sóng điện từsẽphản xạkhi gặp môi trường không đồng
nhất(mụctiêu)
4 Tần sốthu được tại trạm radar sai lệch so với tần sốphát, gây nên do
sựchuyển động tương đối giữa mục tiêu và trạm radar và được xác định thông qua hiệuứngdoppler
Trang 55.CÁC B ƯỚ C X Ử LÝ TÍN HI Ệ U RADAR
Bước 1: Phát hiện mục tiêu:(detection)
Trang 6Xác xuất phát hiện nhầm: gây nên do tín hiệu phản xạtừcác đối tượng
Bước 2: Đo đạc tham số:(Measurement)
Trang 7Bước 4: Nhận biết mục tiêu:(r e c o r g n a t i o n )
Chỉthực hiện được với Radar chủđộng thứcấp:
• Radar chủđộng thứcấp làhệthống radar có khảnăng trao đổi thông tin ( truyền sốliệu ) với đối tượng (mụctiêu)
• Quá trình trao đổi sốliệu giữa M và RS được thực hiện khi M nằm lọt trong búp sóngradar.
• Thời gian trao đổisố liệu phụ thuộc vào tốc độ quét cánh sóng và kích thước búp sóng của trạm Radar
Radar
thứtiêu cấp truyền các tín hiệu được mã hóa đến bộphát đáp của mục
• Transponder phúc đáp bằng bản tin được mã hóa với các thông tin của đối tượng ( airplane)
• Một transponder có
thểidentifyingcodes
thiết lập tối đa khoảng 4096 mã nhận dạng
Trang 10Lớp đện tửviễn thông k31 Page10
3.
Quét th ẳ ng
Trang 11Màn hình ở ch ế đ ộ quét x o ắ n
Trang 12// Rada2Dlg.cpp : implementation file
//Ban dau he thong khoi dong voi cac gia tri ban dau tinh ra o ham Innitdialog , sau do
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
Trang 13DDX_Control(pDX, IDC_BUTTON_Start, m_Button_start);
DDX_Control(pDX, IDC_EDIT1, m_m1con);
DDX_Text(pDX, IDC_EDIT1, m_m1);
DDV_MaxChars(pDX, m_m1, 500);
DDX_Text(pDX, IDC_EDIT2, m_m2);
Trang 14DDX_Text(pDX, IDC_EDIT3, m_m3); DDX_Text(pDX,
IDC_EDIT4, m_m4); DDX_Text(pDX, IDC_EDIT5,
m_m5); DDX_Text(pDX, IDC_EDIT6, m_m6);
DDX_Text(pDX, IDC_EDITRSpeed, m_RSpeed);
DDX_Text(pDX, IDC_STATIC_TOA_DO, m_toa_do);
DDX_Text(pDX, IDC_EDIT_DT_BAM, m_dt_bam);
DDX_Text(pDX, IDC_EDIT_TT_BAM, m_tt_bam);
// Add "About " menu item to system menu
// IDM_ABOUTBOX must be in the system command range ASSERT((IDM_ABOUTBOX
& 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE); if
(pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
Trang 15// Set the icon for this dialog The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon,TRUE); // Setbigicon
SetIcon(m_hIcon,FALSE); // Set smallicon
// TODO: Add extra initialization here
//du lieu khoi tao cho he
thong -//khoi tao cho hop toc do
Trang 16dmin=0.5;//khoang cach ma rada bi bao hoa mau
//do rong canh song muc nho nhat co the ve duoc
Trang 17for (i=0;i<=5;i++) trang_thai_truoc[i]=0;
for (i=0;i<=5;i++) trang_thai_truoc_nua[i]=0;
//khoi tao che do xem ban dau la man hinh gioi thieu
Trang 18void CRada2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon =GetSystemMetrics(SM_CXICON); int
cyIcon =GetSystemMetrics(SM_CYICON); CRectrect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
Trang 20Lớp đện tửviễn thông k31 Page20
/////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::toa_do_m1(float t)//cap nhat lai bang du lieu tai vi tri du lieu toa
//do tai thoi diem t
x=-2*t-50-0.0001*t*t;//dinh nghia cac ham taiday
y=3*t-300;//dinh nghia cac ham tai day z=20;//dinh
nghia cac ham taiday
//manglen mot donvi
//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
Trang 21Lớp đện tửviễn thông k31 Page21
}
Trang 22float fmax, fmin,tg; fmax=data_thanh_quet_phi;
//pb = 1 co nghia la vat the van nam trong tam cua bup song
//////////////////////////////////////////////////////dung_luong+1 r so phan tu mang
//dich cac ngan du lieu len tren 1 don vi
for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i] [j];//dich du lieu tu day
x=-2*t+150-0.0001*t*t;//dinh nghia cac ham taiday
y=3*t-350;//dinh nghia cac ham taiday
z=20;//dinh nghia cac ham tai day
//mang len
Trang 23//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
Trang 24for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i] [j];//dich du lieu tu day
x=-2*t+150-0.0001*t*t;//dinh nghia cac ham taiday
y=3*t-300;//dinh nghia cac ham taiday
z=20;//dinh nghia cac ham tai day
//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
Trang 25}
Trang 26float fmax, fmin,tg; fmax=data_thanh_quet_phi;
//dich cac ngan du lieu len tren 1 don vi
for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i] [j];//dich du lieu tu day
x=-2*t+250-0.0001*t*t;//dinh nghia cac ham taiday
y=3*t-100;//dinh nghia cac ham taiday
z=20;//dinh nghia cac ham tai day
//mang len
Trang 27//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
Trang 28for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i] [j];//dich du lieu tu day
x=-2*t+250-0.0001*t*t;//dinh nghia cac ham tai day
y=3*t-300;//dinh nghia cac ham tai day
z=20;//dinh nghia cac ham tai day
Trang 29van_toc(k , dung_luong, dung_luong-1); data_vi_tri[k-1][dung_luong][4]=vxt;
Trang 30//dich cac ngan du lieu len tren 1 don vi
for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i] [j];//dich du lieu tu day
x=-2*t+250-0.0001*t*t;//dinh nghia cac ham tai day
y=3*t-150;//dinh nghia cac ham tai day
z=20;//dinh nghia cac ham tai day
//mang len
Trang 31//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
Trang 32for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i] [j];//dich du lieu tu day
//trong mang data, vi tri tuong doi voi thanh_quet_phi
Trang 33Lớp đện tửviễn thông k31 Page30
//khao bien trang thai chieu quet, va denta phi dich chuyen thay
//doi no se lam thay doi toc do quet,
CBrush*pBrush,*pOldBrush,*pB;//choi ve va choi backup
pBrush=new CBrush(RGB(150,150,255));//Tao choi ve mau 255,250,230
pOldBrush=pDC->SelectObject(pBrush);//lwu choi
///////////////////////////////////
Trang 34int i=0;
CPen pPen15(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen25(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen35(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen45(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen55(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen65(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
// cac Pen nay co do rong la 8 pixel
//ve cac truc toa do
Trang 36// TODO: Add your message handler code here maxx=cx;
float phi1=phi*pi/180; xtam=((int)floor(d*sin(phi1)));
ytam=((int)floor(d*cos(phi1)))*(-1);//toa do tam diem
xtam=xtam+gocx;
Trang 37ytam=ytam+gocy;//hieu chinh toa do
CRect rect(xtam-radius,ytam-radius,xtam+radius,ytam+radius); pdc.FillRect(&rect,pBrush);delete pdc.SelectObject(pOldBrush);
Trang 40if((data_vi_tri[dt_bam][dung_luong-1][0]<dmin)|//neu radius < 0 hoac radius > dmax -40 thi them vao sau
(data_vi_tri[dt_bam][dung_luong-1][0]>dmax-40))//them vao sau
float van_toc_dt;// van toc cua doi tuong bam sat
//trang thai on
dinh -if((trang_thai_hien_thoi[dt_bam-1]==1)&(trang_thai_truoc[dt_bam-1]==1))
{ 2][1];
//tinh toa do vi tri chinh giua duong quet
float trungg=data_thanh_quet_phi +(float)tt_chieu_quet*phan_giai/2;
if(trungg<0)trungg=360+trungg;
if(trungg>360)trungg=trungg-360;
// tinh vi tri tuong doi cua thanh quet va doi tuong
float den= data_vi_tri[dt_bam-1][dung_luong-1][1]- trungg;
Trang 42v_teta=cos(data_vi_tri[dt_bam-v_phi=sin(data_vi_tri[dt_bam-1][dung_luong1][2])*(data_vi_tri[dt_bam-1][dung_luong1] [1]-data_vi_tri[dt_bam-1][dung_luong2][1])*data_vi_tri[dt_bam-1][dung_luong1]
Trang 43Lớp đện tửviễn thông k31 Page40
//chon but ve CClientDC
pdc(this);pdc.SelectObjec
t(pPen);
//////////////////////////////
//
CBrush*pBrush,*pOldBrush;//choi ve va choi backup
pBrush=new CBrush(RGB(150,150,255));//Tao choi ve mau 255,250,230
//hien hinh cac doi tuong
//chinh xac cap 1
Trang 46pdc.TextOut(35+i*jj+5,yy+5,"120 km" ); i++;
pdc.TextOut(35+i*jj+5,yy+5,"150 km" ); i++;
pdc.TextOut(35+i*jj+5,yy+5,"180 km" ); i++;
pdc.TextOut(35+i*jj+5,yy+5,"210 km" ); i++;
pdc.TextOut(35+i*jj+5,yy+5,"240 km" ); i++;
pdc.TextOut(35+i*jj+5,yy+5,"270 km" ); i++;
i=0;
pdc.TextOut(35+i*jj+5,yy1+5,"0 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"3 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"6 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"9 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"12 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"15 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"18 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"21 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"24 km" ); i++;
pdc.TextOut(35+i*jj+5,yy1+5,"27 km" ); i++;
i=0;
pdc.TextOut(35+i*jj+5,yy2+5,"0 m" ); i++;
pdc.TextOut(35+i*jj+5,yy2+5,"300 m" ); i++;
pdc.TextOut(35+i*jj+5,yy2+5,"600 m" ); i++;
pdc.TextOut(35+i*jj+5,yy2+5,"900 m" ); i++;
pdc.TextOut(35+i*jj+5,yy2+5,"1200 m" ); i++;
pdc.TextOut(35+i*jj+5,yy2+5,"1500 m" );
Trang 47//pdc.TextOut(gocx+maxx/4-40,gocy-20,"E 90");
//pdc.TextOut(gocx+maxx/4-20,gocy+10,"300Km");//pdc.TextOut(gocx+maxx/8-15,gocy+10,"150Km");//pdc.TextOut(gocx+maxx/16-15,gocy+10,"75Km");////////////////////ve vien CBrush*pB;//choi
ve va choi backup pB=new
CRect rect24(35-5,maxy*2/3+5,maxx-35+5,maxy*2/3-5); pdc.FillRect(&rect24,pB);
Trang 48CPen pPen25(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen35(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen45(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen55(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
CPen pPen65(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2])); i++;
//chon but ve CClientDC
pdc(this);pdc.SelectObjec
t(pPen);
//////////////////////////////
//khai choi
CBrush*pBrush,*pOldBrush;//choi ve va choi backup
pBrush=new CBrush(RGB(150,150,255));//Tao choi ve mau 255,250,230
Trang 49//tinh goc phi phi=360*data_vi_tri[i]
[dung_luong-1][0]/dmax; if(phi>=360)
phi=phi-360;
if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau
if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau
ve_tung_diem(radius,maxx/4 ,phi,10,mr1,mg1,mb1);
if(trang_thai_hien_thoi[i]==1) if(data_vi_tri[i][dung_luong-1][0]<dmax)//themvao sau
if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau
if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau
if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau
Trang 51pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-maxx/8.0*cos(pi/5*i)),"3 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-maxx/8.0*cos(pi/5*i)),"6 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-maxx/8.0*cos(pi/5*i)),"9 km");
///////////ki hieu qui uoc
i=0;int di,dj;di=120;dj=0;//hai bien vi tri quyet dinh vi tri khoi chu
pdc.SelectObject(pPen15);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
Trang 52pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar1:"); i++;
pdc.SelectObject(pPen25);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar2:"); i++;
pdc.SelectObject(pPen35);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar3:"); i++;
pdc.SelectObject(pPen45);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar4:"); i++;
pdc.SelectObject(pPen55);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar5:"); i++;
pdc.SelectObject(pPen65);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar6:"); i++;
///////////////////////////////////////////////////////////// -void CRada2Dlg::xoan_oc()
{ int dd,xx,yy,tt,so_nua_vong,so_phan_hoach,sn; int mr=200, mg=0, mb=0,radius,dosang,phi;