You are on page 1of 22

Ph lc 2

M ngun chng trnh m phng tnh ton iu khin cng


sut trong h thng thng tin di ng th h ba UMTS
************@************
Option Explicit
Dim a(), t(),tongLuuLuong,Rt(),Pme(),Pma(),SF(), Pcu(),gamaT As Double
Dim Iutr(),Ictr(),Itr(),Io(),SIRreal(),Pdk(),Po(),Pn(),Pn1(),gamaI() As Double
Dim i,l ,Gm,kenhNt As Integer
Dim ERL(),Lp,Al,Ca As Double
Const Lm As Integer = -3
Const Gt As Integer = 18
Const Lt As Double = -2
Const Bw As Double = 3.84
Const fr As Double = 0.65
Const Nf As Integer = 5
Const aa As Double = 0.5
Const b1 As Double = 1
Const b2 As Double = 2
Const SIRMax = 33
Const SIROptMax = 27
Const SIROptMin = 19
Const SIRMin = 8
Const k = 0.1
Const EbNo1 = 5
Const EbNo2 = 1.5
Const EbNo3 = 1
Dim n As Integer
*********************************************************
Public Function Rnd1(Lower As Double, Upper As Double) As Double
On Error GoTo LocalError
Randomize
75

Ph lc 2
Rnd1 = CLng((Upper - Lower + 1) * Rnd + Lower)
Exit Function
LocalError:
Rnd1 = 1
End Function
Private Function log10(x As Double) As Double
log10 = Log(x) / Log(10)
End Function
*********************************************************
Private Function getSub(x As String) As String
Dim Index
Index = InStr(x, ".")
getSub = Left(x, Index + 4)
End Function
*******************************************************
Private Function dBtodBm(x As Double) As Double
dBtodBm = 10 * Log(Exp((x / 10) * Log(10)) * 1000) / Log(10)
End Function
***************************************************
Private Sub Tinh()
Dim n1 As Integer
* * ****************************************
'Bang ERLANG B chon GoS = 0.05
ERL(0) = 0.053

ERL(6) = 3.738

ERL(12) = 8.835

ERL(1) = 0.381

ERL(7) = 4.543

ERL(13) = 9.73

ERL(2) = 0.899

ERL(8) = 5.37

ERL(14) = 10.633

ERL(3) = 1.525

ERL(9) = 6.216

ERL(15) = 11.544

ERL(4) = 2.218

ERL(10) = 7.076

ERL(16) = 12.461

ERL(5) = 2.96

ERL(11) = 7.95

ERL(17) = 13.385

76

Ph lc 2
ERL(18) = 14.315

ERL(46) = 41.54

ERL(74) = 69.38

ERL(19) = 15.249

ERL(47) = 42.537

ERL(75) = 70.753

ERL(20) = 16.189

ERL(48) = 43.534

ERL(76) = 71.769

ERL(21) = 17.132

ERL(49) = 44.533

ERL(77) = 72.786

ERL(22) = 18.08

ERL(50) = 45.533

ERL(78) = 73.803

ERL(23) = 19.031

ERL(51) = 46.533

ERL(79) = 74.82

ERL(24) = 19.985

ERL(52) = 47.534

ERL(80) = 75.838

ERL(25) = 20.943

ERL(53) = 48.536

ERL(81) = 76.856

ERL(26) = 21.904

ERL(54) = 49.539

ERL(82) = 77.874

ERL(27) = 22.867

ERL(55) = 50.543

ERL(83) = 78.893

ERL(28) = 23.833

ERL(56) = 51.548

ERL(84) = 79.912

ERL(29) = 24.802

ERL(57) = 52.553

ERL(85) = 80.932

ERL(30) = 25.773

ERL(58) = 53.559

ERL(86) = 81.952

ERL(31) = 25.746

ERL(59) = 54.566

ERL(87) = 82.972

ERL(32) = 26.721

ERL(60) = 55.573

ERL(88) = 83.993

ERL(33) = 28.698

ERL(61) = 56.581

ERL(89) = 85.014

ERL(34) = 29.677

ERL(62) = 57.59

ERL(90) = 86.035

ERL(35) = 30.657

ERL(63) = 58.599

ERL(91) = 87.057

ERL(36) = 31.64

ERL(64) = 56.609

ERL(92) = 88.079

ERL(37) = 32.624

ERL(65) = 60.619

ERL(93) = 89.101

ERL(38) = 33.609

ERL(66) = 61.63

ERL(94) = 90.123

ERL(39) = 34.596

ERL(67) = 62.642

ERL(95) = 91.146

ERL(40) = 35.584

ERL(68) = 63.654

ERL(96) = 92.169

ERL(41) = 36.574

ERL(69) = 64.667

ERL(97) = 93.193

ERL(42) = 37.565

ERL(70) = 65.68

ERL(98) = 94.216

ERL(43) = 38.557

ERL(71) = 66.694

ERL(99) = 95.24

ERL(44) = 39.55

ERL(72) = 67.708

ERL(45) = 40.545

ERL(73) = 68.723

'********************************************
'Tinh tong luu luong
77

Ph lc 2
n1 = 1
tongLuuLuong = 0
For i = 1 To Val(TxtN.Text)
a(i) = n1 * t(i) / 3600
tongLuuLuong = tongLuuLuong + a(i)
Next i
'********************************************
'Tinh so kenh
Dim temp1 As Double
Dim temp2 As Double
Dim vt As Integer
kenhNt = 0
vt = 0
temp1 = Abs(ERL(0) - tongLuuLuong)
For i = 1 To 99
temp2 = Abs(ERL(i) - tongLuuLuong)
If (temp1 > temp2) Then
temp1 = temp2
vt = i
End If
Next i
kenhNt = vt + 1
'********************************************
'Tinh SIR_real
Dim No As Double
No = 10 * log10(290 * 1.38 * Exp(-23 * Log(10))) + Nf + 30
For i = 1 To Val(TxtN.Text)
SF(i) = 10 * log10(3.84 / Rt(i))
If Rt(i) = 144 Then
Lp = -81.9
78

Ph lc 2
Al = -4.2
Gm = 2
Ca = 1
ElseIf Rt(i) = 384 Then
Lp = -84.5
Al = -7.3
Gm = 2
Ca = 1
Else
Lp = -72.8
Al = -7.3
Gm = 0
Ca = 0.67
End If
Pma(i) = Pme(i) - Lm - Gm
Pcu(i) = Pme(i) + Lp + Al + Gt + Lt
Iutr(i) = Pcu(i) + 10 * log10(kenhNt - 1) + 10 * log10(Ca) - 10 * log10(Bw)
Ictr(i) = Iutr(i) + 10 * log10(1 / fr - 1)
Itr(i) = 10 * log10(Exp(0.1 * Iutr(i) * Log(10)) + Exp(0.1 * Ictr(i) * Log(10)))
Io(i) = 10 * log10(Exp(0.1 * Itr(i) * Log(10)) + Exp(0.1 * No * Log(10)))
SIRreal(i) = SF(i) - Io(i) - 10 * log10(Bw)
Next i
'*************************************************
'Phuong phap DSSPC
For i = 1 To Val(TxtN.Text)
If SIRreal(i) > SIRMax Then
Pdk(i) = Pma(i) - aa * b2
ElseIf (SIRreal(i) >= SIROptMax) And (SIRreal(i) <= SIRMax) Then
Pdk(i) = Pma(i) - aa * b1
ElseIf (SIRreal(i) >= SIROptMin) And (SIRreal(i) < SIROptMax) Then
79

Ph lc 2
Pdk(i) = Pma(i)
ElseIf (SIRreal(i) >= SIRMin) And (SIRreal(i) < SIROptMin) Then
Pdk(i) = Pma(i) + aa * b1
ElseIf SIRreal(i) < SIRMin Then
Pdk(i) = Pma(i) + aa * b2
End If
Po(i) = Pma(i)
Next i
*****************************************************
'Phuong phap DPC
For i = 1 To Val(TxtN.Text)
If Rt(i) = 144 Then
gamaT = EbNo2 + 10 * log10(Rt(i) / 3840)
ElseIf Rt(i) = 384 Then
gamaT = EbNo3 + 10 * log10(Rt(i) / 3840)
Else: gamaT = EbNo1 + 10 * log10(Rt(i) / 3840)
End If
Pn(1) = Pma(i)
For l = 1 To Val(TxtN.Text) - 1
gamaI(l) = SIRreal(i)
Pn(l + 1) = Pn(l) + Exp(k * (dBtodBm(gamaT) - dBtodBm(gamaI(i))))
Pn1(i) = Pn(10)
Next l
Next i
Dim j As Integer
Dim tt As Double
For i = 1 To Val(TxtN.Text) - 1
For j = i + 1 To Val(TxtN.Text)
If SIRreal(i) > SIRreal(j) Then
tt = SIRreal(i)
80

Ph lc 2
SIRreal(i) = SIRreal(j)
SIRreal(j) = tt
End If
If Po(i) < Po(j) Then
tt = Po(i)
Po(i) = Po(j)
Po(j) = tt
End If
If Pdk(i) < Pdk(j) Then
tt = Pdk(i)
Pdk(i) = Pdk(j)
Pdk(j) = tt
End If
If Pn1(i) < Pn1(j) Then
tt = Pn1(i)
Pn1(i) = Pn1(j)
Pn1(j) = tt
End If
Next j
Next i
End Sub
*******************************************************
Private Sub cmbRt_Click()
If cmbRt.Text = 12.2 Then
Txt1.Text = 0
Txt2.Text = -3
Txt3.Text = 21
Txt4.Text = 18
Txt5.Text = 5
Txt6.Text = -141.9
81

Ph lc 2
Txt7.Text = -7.3
Txt8.Text = -2
Txt9.Text = 0.67
Txt10.Text = 0.65
Txt11.Text = 5
ElseIf cmbRt.Text = 144 Then
Txt1.Text = 2
Txt2.Text = -3
Txt3.Text = 26
Txt4.Text = 18
Txt5.Text = 5
Txt6.Text = -133.8
Txt7.Text = -4.2
Txt8.Text = -2
Txt9.Text = 1
Txt10.Text = 0.65
Txt11.Text = 5
Else
Txt1.Text = 2
Txt2.Text = -3
Txt3.Text = 18
Txt4.Text = 18
Txt5.Text = 5
Txt6.Text = -139.9
Txt7.Text = -7.3
Txt8.Text = -2
Txt9.Text = 1
Txt10.Text = 0.65
Txt11.Text = 5
End If
82

Ph lc 2
End Sub
**************************************************
Private Sub cmdL1KetQua_Click()
Grid1.Row = 0
Grid1.Col = 0
Grid1.Text = " SIR(I)"
Grid1.Row = 0
Grid1.Col = 1
Grid1.Text = " Kt qu"
Call Startva
For i = 1 To (Val(TxtN.Text))
Grid1.Rows = i + 1
Grid1.Row = i
Grid1.Col = 0
Grid1.Text = "SIR[" & Trim(Str(i - 1)) & "]" & "="
Grid1.Col = 1
Grid1.Text = Round(SIRreal(i), 4)
Next i
End Sub
Private Sub cmdL1Xoa_Click()
For i = 1 To (Val(TxtN.Text))
Grid1.Rows = i + 1
Grid1.Row = i
Grid1.Col = 0
Grid1.Text = " "
Grid1.Col = 1
Grid1.Text = " "
Next i
End Sub
83

Ph lc 2
************************************************
Private Sub cmdL2KetQua_Click()
Grid2.Row = 0
Grid2.Col = 0
Grid2.Text = " Po(i)"
Grid2.Row = 0
Grid2.Col = 1
Grid2.Text = " DSSPC"
Grid2.Row = 0
Grid2.Col = 2
Grid2.Text = " DPC"
For i = 1 To (Val(TxtN.Text))
Grid2.Rows = i + 1
Grid2.Row = i
Grid2.Col = 0
Grid2.Text = " Po[" & Trim(Str(i - 1)) & "]" & "="
Grid2.Col = 1
Grid2.Text = Po(i)
Grid2.Col = 2
Grid2.Text = Po(i)
Next i
End Sub
Private Sub cmdL2Xoa_Click()
For i = 1 To (Val(TxtN.Text))
Grid2.Rows = i + 1
Grid2.Row = i
Grid2.Col = 0
Grid2.Text = " "
Grid2.Col = 1
84

Ph lc 2
Grid2.Text = " "
Grid2.Col = 2
Grid2.Text = " "
Next i
End Sub
***********************************************
Private Sub cmdL3KetQua_Click()
Grid3.Row = 0
Grid3.Col = 0
Grid3.Text = " Pdk(i) "
Grid3.Row = 0
Grid3.Col = 1
Grid3.Text = "

DSSPC "

Grid3.Row = 0
Grid3.Col = 2
Grid3.Text = " DPC "
For i = 1 To (Val(TxtN.Text))
Grid3.Rows = i + 1
Grid3.Row = i
Grid3.Col = 0
Grid3.Text = "PDK[" & Trim(Str(i - 1)) & "]" & "= "
Grid3.Col = 1
Grid3.Text = Pdk(i)
Grid3.Col = 2
Grid3.Text = Round(Pn1(i), 3)
Next i
End Sub
***********************************************
Private Sub putPixel1(x, y, mau As Byte)
graph.Circle (391, 279), 1.6, RGB(255, 0, 0)
85

Ph lc 2
graph.Circle (396, 284), 1.6, RGB(255, 0, 0)
End Sub
Private Sub putPixel(x, y, mau As Byte)
Dim CX As Double
Dim CY As Double
Dim delx As Double
Dim dely As Double
Dim x1 As Double
Dim y1 As Double
Dim j As Double
CX = 0
CY = 0
delx = 0
dely = 0
x1 = 0
y1 = 0
If (x < 6) Or (y < 22) Then Exit Sub
For i = 1 To (x \ 1) - 6 'vi truc x bat dau tu 6
x1 = x1 + 31.825
Next i
CX = x1 + (x - x \ 1) * 31.825
For i = 1 To (y \ 1) - 22 'vi truc y bat dau tu 22
y1 = y1 + 21.407
Next i
CY = y1 + (y - y \ 1) * 21.407
CY = graph.ScaleHeight * (1#) - CY

86

Ph lc 2
If mau = 1 Then
graph.Circle (CX, CY), 1.6, RGB(255, 0, 0)
ElseIf mau = 2 Then
graph.Circle (CX, CY), 1.6, RGB(0, 0, 255)
Else
graph.Circle (CX, CY), 1.6, RGB(0, 255, 0)
End If
End Sub
Private Sub cmdL4BieuDo_Click()
picBieuDo.Visible = False
graph.Visible = True
Dim y As Double
For y = 1 To Val(TxtN.Text)
Call putPixel(SIRreal(y), Po(y), 1)
Call putPixel(SIRreal(y), Pdk(y), 2)
Call putPixel(SIRreal(y), Pn1(y), 3)
Next y
End Sub
Private Sub Command10_Click()
MGrid1.Row = 0
MGrid1.Col = 0
MGrid1.Text = " SIR_real"
MGrid1.Row = 0
MGrid1.Col = 1
MGrid1.Text = " Po"
MGrid1.Row = 0
MGrid1.Col = 2
MGrid1.Text = " DSSPC"
87

Ph lc 2
MGrid1.Row = 0
MGrid1.Col = 3
MGrid1.Text = " DPC"
For i = 1 To (Val(TxtN.Text))
MGrid1.Rows = i + 1
MGrid1.Row = i
MGrid1.Col = 0
MGrid1.Text = Round(SIRreal(i), 4)
MGrid1.Col = 1
MGrid1.Text = Po(i)
MGrid1.Col = 2
MGrid1.Text = Pdk(i)
MGrid1.Col = 3
MGrid1.Text = Round(Pn1(i), 3)
Next i
End Sub
Private Sub command6_Click()
For i = 1 To (Val(TxtN.Text))
Grid3.Rows = i + 1
Grid3.Row = i
Grid3.Col = 0
Grid3.Text = " "
Grid3.Col = 1
Grid3.Text = " "
Grid3.Col = 2
Grid3.Text = " "
Next i
End Sub
Private Sub cmdL4Thoat_Click()
88

Ph lc 2
End
End Sub
Private Sub Command7_Click()
For i = 1 To (Val(TxtN.Text))
MGrid1.Rows = i + 1
MGrid1.Row = i
MGrid1.Col = 0
MGrid1.Text = " "
MGrid1.Col = 1
MGrid1.Text = " "
MGrid1.Col = 2
MGrid1.Text = " "
MGrid1.Col = 3
MGrid1.Text = " "
Next i
End Sub
Private Sub Command9_Click()
End
End Sub
Private Sub Form_Load()
TxtN.Text = " "
ReDim t(Val(TxtN.Text))
ReDim a(Val(TxtN.Text))
ReDim Rt(Val(TxtN.Text))
ReDim Pme(Val(TxtN.Text))
ReDim Pma(Val(TxtN.Text))
89

Ph lc 2
ReDim SF(Val(TxtN.Text))
ReDim Pcu(Val(TxtN.Text))
ReDim Iutr(Val(TxtN.Text))
ReDim Ictr(Val(TxtN.Text))
ReDim Itr(Val(TxtN.Text))
ReDim Io(Val(TxtN.Text))
ReDim SIRreal(Val(TxtN.Text))
ReDim ERL(100)
ReDim gamaI(Val(TxtN.Text))
ReDim Pdk(Val(TxtN.Text))
ReDim Po(Val(TxtN.Text))
ReDim Pn(Val(TxtN.Text))
ReDim Pn1(Val(TxtN.Text))
For i = 1 To Val(TxtN.Text)
t(i) = CInt(Rnd1(90, 210))
Rt(i) = Rnd1(9.6, 374 + 9.6)
Pme(i) = Rnd1(18, 30)
Next i
Tinh
End Sub
Private Sub Startva()
ReDim t(Val(TxtN.Text))
ReDim a(Val(TxtN.Text))
ReDim Rt(Val(TxtN.Text))
ReDim Pme(Val(TxtN.Text))
ReDim Pma(Val(TxtN.Text))
90

Ph lc 2
ReDim SF(Val(TxtN.Text))
ReDim Pcu(Val(TxtN.Text))
ReDim Iutr(Val(TxtN.Text))
ReDim Ictr(Val(TxtN.Text))
ReDim Itr(Val(TxtN.Text))
ReDim Io(Val(TxtN.Text))
ReDim SIRreal(Val(TxtN.Text))
ReDim ERL(100)
ReDim gamaI(Val(TxtN.Text))
ReDim Pdk(Val(TxtN.Text))
ReDim Po(Val(TxtN.Text))
ReDim Pn(Val(TxtN.Text))
ReDim Pn1(Val(TxtN.Text))
For i = 1 To Val(TxtN.Text)
t(i) = CInt(Rnd1(90, 210))
Rt(i) = Rnd1(9.6, 374 + 9.6)
Pme(i) = Rnd1(18, 30)
Next i
Tinh
End Sub
Private Function getSub1(x As String) As String
Dim Index
Index = InStr(x, ".")
getSub1 = Left(x, Index + 1)
End Function
Private Sub command1_Click()
graph.Visible = False
picBieuDo.Visible = True
91

Ph lc 2
picBieuDo.Cls
' Ve bieu do: SIRreal(), Po()
Dim MaxHDrawArea As Double, MaxWDrawArea As Double ' do rong vung de
ve
Dim goc As PointType
Dim XUnit As Double, YUnit As Double ' 1 don vi = bao nhieu twip
Dim countPoint As Double
Dim temp, temp0, temp1, temp2 As Double, i As Long
MaxHDrawArea = picBieuDo.Height - 480
MaxWDrawArea = picBieuDo.Width - 480
goc.x = 360
goc.y = picBieuDo.Height - 360
' Ve cac phuong toa do
picBieuDo.DrawWidth = 2
picBieuDo.Line (goc.x, goc.y)-(goc.x, 120), QBColor(13) 'trucPo
picBieuDo.Line (goc.x, goc.y)-(MaxWDrawArea, goc.y), QBColor(13) 'trucsir
've mui ten sir
picBieuDo.Line (MaxWDrawArea - 150, goc.y - 40)-(MaxWDrawArea, goc.y),
QBColor(12)
picBieuDo.Line (MaxWDrawArea - 150, goc.y + 30)-(MaxWDrawArea, goc.y),
QBColor(12)
've mui ten Po
picBieuDo.Line (goc.x - 30, 270)-(goc.x, 120), QBColor(12)
picBieuDo.Line (goc.x + 25, 270)-(goc.x, 120), QBColor(12)
picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 0
92

Ph lc 2
picBieuDo.Print "CONG SUAT"
picBieuDo.CurrentX = 1600
picBieuDo.CurrentY = 80
picBieuDo.Print "Po"
picBieuDo.CurrentX = 3000
picBieuDo.CurrentY = 80
picBieuDo.Print " PDC"
picBieuDo.CurrentX = 4400
picBieuDo.CurrentY = 80
picBieuDo.Print "DSSPC"
picBieuDo.CurrentX = 6200
picBieuDo.CurrentY = 5200
picBieuDo.Print "SIR"
'********************************************
picBieuDo.DrawWidth = 4
picBieuDo.Line (goc.x + 1200, goc.y - 4850)-(goc.x + 1500, goc.y - 4850),
QBColor(9) 'trucPo
picBieuDo.Line (goc.x + 2700, goc.y - 4850)-(goc.x + 3000, goc.y - 4850),
QBColor(5) 'trucPo
picBieuDo.Line (goc.x + 4100, goc.y - 4850)-(goc.x + 4500, goc.y - 4850),
QBColor(12) 'trucPo

'********************************************ke duong ngang


picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 3800
picBieuDo.Print "10
------------------------------------------------------------------------------------------------"
93

Ph lc 2
picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 4400
picBieuDo.Print "5
------------------------------------------------------------------------------------------------"
picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 3200
picBieuDo.Print "15
------------------------------------------------------------------------------------------------"
picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 2600
picBieuDo.Print "20
------------------------------------------------------------------------------------------------"
picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 2000
picBieuDo.Print "25
------------------------------------------------------------------------------------------------"
picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 1400
picBieuDo.Print "30
------------------------------------------------------------------------------------------------"
picBieuDo.CurrentX = 60
picBieuDo.CurrentY = 800
picBieuDo.Print "35
-------------------------------------------------------------------------------------------------"
'*******************************************************
countPoint = Val(TxtN.Text)
' Xac dinh XUnit, YUnit
temp = 0
For i = 0 To countPoint
94

Ph lc 2
If temp < SIRreal(i) Then temp = SIRreal(i)
Next i
XUnit = Round(MaxWDrawArea / (Round(temp) + 4))
've pdk
temp0 = 0
For i = 0 To countPoint
If temp0 < Pdk(i) Then temp0 = Pdk(i)
Next i
YUnit = Round(MaxHDrawArea / (Round(temp0) + 8))
've pn1
temp1 = 0
For i = 0 To countPoint
If temp1 < Pn1(i) Then temp1 = Pn1(i)
Next i
YUnit = Round(MaxHDrawArea / (Round(temp1) + 8))
've pn1
temp2 = 0
For i = 0 To countPoint
If temp2 < Po(i) Then temp2 = Pn1(i)
Next i
YUnit = Round(MaxHDrawArea / (Round(temp2) + 8))
' Ve bieu do
picBieuDo.DrawWidth = 2
For i = 1 To countPoint
picBieuDo.Line (goc.x + Round(SIRreal(i - 1) * XUnit), goc.y Round(Pdk(i - 1) * YUnit))-(goc.x + Round(SIRreal(i) * XUnit), goc.y Round(Pdk(i - 1) * YUnit)), QBColor(12)

95

Ph lc 2
picBieuDo.Line (goc.x + Round(SIRreal(i - 1) * XUnit), (goc.y Round(Po(i - 1) * YUnit)) + 100)-(goc.x + Round(SIRreal(i) * XUnit), (goc.y Round(Po(i - 1) * YUnit)) + 100), QBColor(9)
picBieuDo.Line (goc.x + Round(SIRreal(i - 1) * XUnit), (goc.y - Round(Pn1(i
- 1) * YUnit)) - 100)-(goc.x + Round(SIRreal(i) * XUnit), (goc.y - Round(Pn1(i - 1)
* YUnit)) - 100), QBColor(5)
Next i
End Sub

96

You might also like