当前位置:首页 >> 信息与通信 >>

实验1:Erlang B公式计算器 实验报告


通信网性能分析基础

实验 1:Erlang B 公式计算器 实验报告

学院:信息与通信工程学院 班级: 姓名: 学号:

1

通信网性能分析基础

一、实验目的
Erlang B 公式通信网理论基础这门课程的学习重点之一,其表达 了电话交换系统的时间阻塞率 B(s

,a)与到达的呼叫量 a 以及中继线的 数目 s 之间的关系, 为电话网络的规划和中继线容量配置奠定了基础。 本次实验要求用计算机语言编写 ErlangB 公式计算器,实现给定 任意两个变量求解第三个变量的功能,使学生掌握 ErlangB 公式的计 算方法,培养数值分析计算与算法设计能力。

二、实验原理
Erlang 即时拒绝系统用于建模电话交换系统,设电话呼叫流的到 来服从 Poisson 过程,λ 为呼叫的到达率,呼叫的持续时间服从参数 μ 的负指数分布。系统有 s 条中继线,呼叫到来时,如系统中有空闲的 中继线,则呼叫可到达任意一个空闲的中继线,如果没有空闲的中继 线,就拒绝该呼叫。在这样的情况下,该交换系统的排队系统模型为
M / M / s(s) 。

利用生灭过程稳态分布的结论,可求解 M/M/s(s)系统的时间阻 塞率为 , =
=0 ! !

,该公式给出了 a,s,与 B 之间的关系。

本次实验要求编写 Erlang B 公式的计算器,实现给定任意两个变 量求解第三个变量的功能: (1) 给定到达的呼叫量 a 和中继线的数目 s,求解系统的时间阻 塞率 B; (2) 给定系统的时间阻塞率的要求 B 和到达的呼叫量 a,求解中 继线的数目 s,以实现网络规划; (3) 给定系统的时间阻塞率要求 B 以及中继线的数目 s,判断该 系统能支持的最大的呼叫量 a。

2

通信网性能分析基础

三、实验内容
1. 设计语言及开发工具: (1) 计算器: 界面生成采用 C++语言 (MFC) , 函数采用 C 语言在 vs2013 编译 (2)作图程序:C 语言和 MATLAB 语言,采用 MATLAB 开发。 2. 计算器主要功能函数 以下三个函数共同使用如下三个变量,但它们的使用方式不同, 可能作为输出也可能是输入: a. 到达呼叫量(a,非负双精度浮点数); b. 时间阻塞率(b,浮点数,取值范围 0~1); c. 中继线数(s,非负整数)。 (1) double calculate_b(double a,int s) 功能:已知到达的呼叫量 a 和中继线的数目 s,求时间阻塞率 eB; 算法原理:计算时间阻塞率可以用爱尔兰 B 公式本身实现,但这 种算法不仅麻烦, 还可能产生数据溢出。 有一个更为简便的迭代算法。 这个算法可表示为 eb , = ( ? 1, ) ( = 0,1,2 … , ; 0, = 1) + ( ? 1, )

其中 表示阻塞率,表示中继线数,表示到达呼叫量。这个 算法表明在 到达呼叫量一定时,s 条中继线的阻塞率可以用(s-1)条中继线的阻 塞率表示。若要求 s 条中继线的阻塞率,使用这个算法只需 s 次迭代 就可以实现,大大减少了运算次数,而且也不会出现溢出问题。

算法流程图:

3

通信网性能分析基础

开始

输入中继线数 S、 到达呼叫量 a

Eb 初值为 1, 迭代次数为 0

迭代次数 为 s? N 做运算: (a*b)/(m+a*b) 结果付为新 b 值

Y 输出阻塞率 b

结束

S 值加 1

(2)double calculate_a(int s,double b) 功能:已知中继线数 s、时间阻塞率 b,求到达呼叫量 a 算法原理: 首先输入 s、 b, 设 a 的初值为 0, 以 a 此时值与 s 做 calculate_b 运算,得到的值与输入值 b 作差,当差值小于精确值时则此时 a 值为 运算结果,否则 a 以 0.001 为间隔递增循环计算,直到满足条件,输 出此时 a 值。

4

通信网性能分析基础

算法流程图:

开始

输入阻塞率 b、中继 线数 s

置到达呼叫 量a为0

利用 calculate_b 计算 当前 a 与 s 对应阻塞 率与输入量 b 之差 a 加 0.01

差值是否小于 精确度 0.001 N Y 输出此时 a 值 为到达呼叫量

结束

(3)int calculate_s(double b double a) 函数功能:已知到达呼叫量 a、时间阻塞率 eb 和精确度 ec,求中继 线数 s。 算法原理:与求解到达呼叫量 a 相同,采用穷举法逐次逼近结果 首先设 s 值为 1,计算此时 s 与输入值 a 对应 eb 减去输入值 eb 结果 是否小于精度,是则输出 s,否则 s 加 1 循环运算知道符合精确度。

5

通信网性能分析基础

算法流程图:
开始 输入阻塞率 b、到达 呼叫量 a

设置 s 为 1 利用 calculate_b 计 算此时 s 与 a 对应 b 减去输入值 b 之差

S加1

N

差值小于 0.001 Y 输出此时 s 作 为中继线数

结束

(4)函数具体代码
// ErlangBDlg.cpp : 实现文件 // #include"stdafx.h" #include"ErlangB.h" #include"ErlangBDlg.h" #include"afxdialogex.h" char A, B, C, D; char lll = 'A'; #ifdef_DEBUG #definenewDEBUG_NEW

6

通信网性能分析基础

#endif

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框 classCAboutDlg : publicCDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtualvoid DoDataExchange(CDataExchange* pDX); // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } voidCAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // DDX/DDV 支持

// CErlangBDlg 对话框

CErlangBDlg::CErlangBDlg(CWnd* pParent/*=NULL*/) : CDialogEx(CErlangBDlg::IDD, pParent) , bbb(0) , aaa(0) , sss(0) {

7

通信网性能分析基础

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } voidCErlangBDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, bbb); DDX_Text(pDX, IDC_EDIT2, aaa); DDX_Text(pDX, IDC_EDIT3, sss); } BEGIN_MESSAGE_MAP(CErlangBDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_EN_CHANGE(IDC_EDIT1, &CErlangBDlg::OnEnChangeEdit1) ON_EN_CHANGE(IDC_EDIT2, &CErlangBDlg::OnEnChangeEdit2) ON_EN_CHANGE(IDC_EDIT3, &CErlangBDlg::OnEnChangeEdit3) ON_BN_CLICKED(IDOK, &CErlangBDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON4, &CErlangBDlg::OnBnClickedButton4) ON_BN_CLICKED(IDC_RADIO1, &CErlangBDlg::OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2, &CErlangBDlg::OnBnClickedRadio2) ON_BN_CLICKED(IDC_RADIO3, &CErlangBDlg::OnBnClickedRadio3) END_MESSAGE_MAP()

// CErlangBDlg 消息处理程序 BOOLCErlangBDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX& 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX< 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

8

通信网性能分析基础

ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 // 设置大图标 // 设置小图标 SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE);

// TODO: 在此添加额外的初始化代码 returnTRUE; } voidCErlangBDlg::OnSysCommand(UINTnID, LPARAMlParam) { if ((nID& 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, 这将由框架自动完成。 // 除非将焦点设置到控件,否则返回 TRUE

voidCErlangBDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中

9

通信网性能分析基础

int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSORCErlangBDlg::OnQueryDragIcon() { returnstatic_cast<HCURSOR>(m_hIcon); }

voidCErlangBDlg::OnEnChangeEdit1() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialogEx::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 }

voidCErlangBDlg::OnEnChangeEdit2() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialogEx::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。

10

通信网性能分析基础

// TODO: 在此添加控件通知处理程序代码 }

voidCErlangBDlg::OnEnChangeEdit3() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialogEx::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 }

/*double calculate_b(double a, int s)//知a、s,计算b { double eb; double temp1, temp2, temp3; int i, j; temp1 = temp2 = 1; for (i = 1; i <= s; i++) { temp1 *= a; temp2 = temp2*i; } eb = temp1 / temp2; temp3 = 1; for (i = 1; i <= s; i++) { temp1 = temp2 = 1; for (j = 1; j <= i; j++) { temp1 *= a; temp2 = temp2*j; } temp3 += temp1 / temp2; } eb = eb / temp3; return eb;

11

通信网性能分析基础

}*/ double calculate_b(doublea, ints) { double temp1, temp2, temp3; double i; temp3 = 1; for (i = 1; i <= s; i++) { temp1 = a*temp3; temp2 = i + temp1;//应该是i,不是s temp3 = temp1 / temp2; } return temp3; } double calculate_a(ints, doubleb)//知b、s,计算a { double a, ec; double temp4; ec = 0.0001; temp4 = 0; for (a = 0.01; temp4 - b>= ec || temp4 - b<= -ec; a += 0.001) { temp4 = calculate_b(a, s); } return a; } int calculate_s(doubleb, doublea)//知a、b,计算s { int s; double temp4, ec; ec = 0.0001; temp4 = 1; for (s = 1; (temp4 - b) >= ec; s++) { temp4 = calculate_b(a, s); } return s;

12

通信网性能分析基础

}

voidCErlangBDlg::OnBnClickedButton4() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); bbb = 0; aaa = 0; sss = 0; UpdateData(FALSE); }

voidCErlangBDlg::OnBnClickedRadio1() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); lll = 'B'; UpdateData(FALSE); }

voidCErlangBDlg::OnBnClickedRadio2() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); lll = 'C'; UpdateData(FALSE); }

voidCErlangBDlg::OnBnClickedRadio3() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); lll = 'D'; UpdateData(FALSE); }

voidCErlangBDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码

13

通信网性能分析基础

UpdateData(TRUE); switch (lll) { case'A':bbb = 3; UpdateData(FALSE); break; case'B':bbb = calculate_b(aaa, sss); UpdateData(FALSE); break; case'C':aaa = calculate_a(sss, bbb); UpdateData(FALSE); break; case'D':sss = calculate_s(bbb, aaa); UpdateData(FALSE); break; default: break; } //CDialogEx::OnOK(); }

3. MATLAB 作图程序 函数说明: aAndB.m 是计算到达率与阻塞率的关系 aAndn.m 是计算到达率与中继线条数的关系 erlangb.m 是通过 a 与 n 计算阻塞率 findrhob.m 是通过阻塞率与中继线条数计算到达率的关系 nANDb.m 是计算 n 与 b 之间的关系 test3d.m 是画出到达率阻塞率中继线条数的三维关系图
(1)

function B=erlangb(n,rho)

利用循环:for k=1:n, B=((rho*B)/k)/(1+rho*B/k); end; 通过固定到达率与中继线条数计算出来阻塞率 函数具体代码:
function B=erlangb(n,rho) if ((floor(n) ~= n) || (n < 1))

14

通信网性能分析基础

warning('n is not a positive integer'); B=NaN; return; end; if (rho < 0.0) warning('rho is negative!'); B=NaN; return; end; B=1; for k=1:n, B=((rho*B)/k)/(1+rho*B/k); end; (2)function rho=findrhob(n,p)

固定中继线条数与阻塞率,采用逐渐逼近的原理,计算出到达率 函数具体代码:
function rho=findrhob(n,p) if ((floor(n) ~= n) || (n < 1)) warning('n is not a positive integer'); rho=NaN; return; end; if ((p<0.0) || (p>1.0)) warning('Invalid p value!'); rho=NaN; return; end; a=1.0; testp=erlangb(n,a); while (testp < p), a=a*2.0; testp=erlangb(n,a); end; left=0.0; right=a; mid=(left+right)/2; midp=erlangb(n,mid); while ((right-left) > 0.0001*max([1 left])), if (midp < p),

15

通信网性能分析基础

left=mid; mid=(left+right)/2; midp=erlangb(n,mid); else right=mid; mid=(left+right)/2; midp=erlangb(n,mid); end; end; rho=left;

四、程序运行结果及分析
1、ErlangB 计算器运行结果分析: (1)程序主界面及使用说明:

该界面的设计基本采用了 www.erlang.com 上的计算器界面。以 radiol 按钮确定计算对象, 另外添加了各自清除按钮与总清除按钮, 弥补了网页计算器的不足,且添加了自主设置精确度的功能。 本程序对阻塞率要求输入 0~1 之间的实数, 中继线数要求输入非负整

16

通信网性能分析基础

数,到达呼叫量要求输入非负实数。后两者支持的输入范围非常大, 而网上的计算器则要求信道数和到达呼叫量都要小于 180,当然输入 数据越大所需要的计算时间也越长。 另外计算到达呼叫量和中继线数 时,可以实现任意给定精度的运算 (2) 为验证准确性, 分别给出三个功能计算结果与网页计算器对比: [1]已知 s 和 a,计算到阻塞率 eb

[2]已知 eb 和 s,计算到达呼叫量 a

17

通信网性能分析基础

[3]已知 a 和 eb,计算中继线数 s

18

通信网性能分析基础

通过三组对比可表明基本功能实现且误差很小或无误差 2、MATLAB 作图运行结果分析: (1)信道与阻塞率关系图(固定到达率为 45erl,最大信道数 100)

19

通信网性能分析基础

曲线分析: 信道数为 0 阻塞率为 1, 对于全部到达的呼叫都采取拒绝, 然后阻塞率随着信道数增减小,信道到达 60 以上的时候,阻塞率几 乎为 0,基本能保证所有的呼叫都能被服务到,此时,当系统的呼叫 量为 45erl 的时候,建议系统最多使用 60 条中继线,最经济。

(2)到达率与阻塞率的关系图(固定信道数为 80)

20

通信网性能分析基础

曲线分析:该图说明给定特定的信道数,可以保证一定范围的呼叫不 会被拒绝,但是当呼叫量上升,超过一个范围(此时为 60) ,阻塞率 会急剧增加,此时就需要增加信道数量的了。

(3)信道数与到达呼叫量的关系图(限定阻塞率为 0.01)

21

通信网性能分析基础

曲线分析:在保证阻塞率不变的情况下,信道数与呼叫量基本成线性 关系,要保证一定的质量,到达的呼叫量越多,对应需要的中继线条 数越多。 (4)信道数,到达率,阻塞率之间的关系三维图

22

通信网性能分析基础

五、实验问题及解决
1. 计算器功能实现 (1) 通过写出 b 与 a 的函数,多次调用后就可以实现对 b 的计算。 (2) 最开始不知道未知按钮怎么使用,最后通过与同学交流学习, 实现了点击未知按钮实现计算位置数据。 (3) 编程总是有 bug 出现,通过耐心检查,恢复正常。、 (4) 在 a 比较小,s 比较大时,看到 b 的显示貌似有错误。最后确 认没有错误,原来是 b 显示时使用科学计数法显示导致。 2. MATLAB 画图部分遇到的问题 (1) 重装系统后, matlab 打不开, 重新下载安装破解了一遍 matlab。 (2) Matlab 画图不知道怎么使用,最终通过学习 matlab 课件,学 会了 matlab 的画图方法。

六、实验总结与感想
本次实验通过与队友耐心合作,细心交流,最终完成。重温了 matlab 画图方法,对 c 语言有了更加深入的看法,加深了对 C 语言 和 Elang B 有了更加深入的了解。

23


相关文章:
实验1:Erlang B公式计算器 实验报告
通信网性能分析基础 实验 1:Erlang B 公式计算器 实验报告 学院:信息与通信工程学院 班级: 姓名: 学号: 1 通信网性能分析基础 一、实验目的 Erlang B 公式通信...
北邮erlangB计算器实验报告
通信网性能分析基础 实验:Erlang B 公式计算器 实验报告 学院: 信息与通信工程学院 班级: 姓名: 学号: 1 通信网性能分析基础 一、实验目的 Erlang B 公式...
北邮 通信网实验报告
北京邮电大学实验报告通信网理论基础实验报告 学院:信息与通信工程学院 班级:2013211124 学号: 姓名: 实验一 ErlangB 公式计算器一 实验内容编写 Erlang B 公式的...
ErlandB公式实验报告
三、实验要求本次实验要求编写 Erlang B 公式计算器, 实现给定任意两个变量求解第三 个变量的功能: (1) 给定到达的呼叫量 a 和中继线的数目 s,求解系统的...
2-Erlang计算器实验要求
本次实验要求编写 Erlang B 公式计算器,实现给定任意两个变量求解第三 个...请将源代码以及实验报告打包,以“班级 1+学号 1+姓名 1+班级 2+学号 2+ ...
通信网实验指导书
具体地说,就是将 Gp 中的 节点作为转接点,计算(...4.写出实验报告。 3 实验二:通信业务量分析实验一...二、实验内容 1. 用编程语言实现 Erlang B 公式。...
filename_=UTF-8''201608通信网实验指导书
具体地说,就是将 Gp 中的 节点作为转接点,计算(...4.写出实验报告(包括实验目的、实验内容、实验原理,...内容 1.用 MATLAB 编程语言实现 Erlang B 公式。 ...
Erlang C计算公式
Erlang C计算公式_信息与通信_工程科技_专业资料。排班预测今日推荐 88...Erlang 48页 免费 B_ERLANG 20页 免费 Erlang并发编程 133页 1下载券 erlang...
ErlangB计算器
公式计算器 1 实验目的本次实验要求用计算机语言编写...已知阻塞率 B 和中继线数量 s 求到达呼叫量 a ...1/2 相关文档推荐 ErlangB计算器实验报告暂无评价 ...
erlang b公式的理解
7 本文中的所有信息均为中兴通讯股份有限公司内部信息,未经允许,不得外传 - iii - 内部公开▲ 1Erlang B 公式的理解问; 用 Erlang B 计算出的话务量, ...
更多相关标签:
b样条曲线实验报告 | b 树程序设计实验报告 | 公式计算器 | 数学公式计算器 | 自定义公式计算器 | 在线公式计算器 | 弹弹堂公式计算器 | sobel检验公式计算器 |