北邮光纤通信实验报告(共4篇)
1.北邮光纤通信实验报告 篇一
通信认识实习报告
从18世纪通信的出现并发展到今天的辉煌,从60年代通信的计算机化到如今通信的智能化、个人化、开放性,通信发展已经取得举世瞩目的成就。推动国民经济发展,提高人民生活水平质量,推动科技发展等等,通信已经为人类做了无可取代的贡献。作为北邮电子工程学院09届的学生,很荣幸在2010年的夏天进行了通信认识实习。实习主要内容是通信概论课,和分别进数字数据、光通信、ATM三个实验室进行学习。这次实习,通过通信概论课上,我了解了通信的发展史、知道了通信的基本概念、了解了通信网,等。在数字数据实验室里,我了解了数字数据网(DDN)、还有数字数据网的业务、帧中继(Frame Relay)网。在光通信实验室,了解了光纤通信的发展简史、光通信的特点,老师还具体介绍了光纤和光缆等。最后在ATM实验室里,了解了ATM技术和ATM通信系统,等等。这次通信实习让我收获了很多,不仅丰富了理论知识,在实验室还增强我们观察能力、生动了解交换机器等机器的工作机理。虽然还有很多知识点我都不能很好了解和掌握,但是,这次实习足以算是同学们进入通信世界的入门。
实习可以分成通信概论课、数字数据实验室、光通信实验室和ATM实验室四个部分。
现在就分别介绍我在其中收获。
一、通讯概论课
八月三十号,小学期的第一天,我们的实习就从上通信概论课开始。通信概论课可分为
一、通信基本概念,二、通信网基础,三、通信网的分类,四、通信网中的传输技术和
五、通信网中的交换技术五个类容。
通信的历史可追溯到十八世纪电报的发明,1876年贝尔发明电话更是通信发展很关键的一步。通信的发展可分为四个年代,六十年代计算机化、七十年代数字化,分组交换网也出现了、八十年代业务综合化到九十年代通信的宽带化,通信已经进行光纤传输,体现了智能化、个人化、开放性及标准性。可以说通信的发展是辉煌的。
通信的定义是信息的传输与交换,电信则是以电信号载驮待传信息进行传输和交换的通信方式。通信系统由信源、信道、新宿来组成。老师还介绍了信号,区分了模拟信号和数字信号。信道对信号有宽带限制、衰减、失真、等影响。在老师的介绍下,了解了数字信号的优点,了解了数字通信系统的特点。
通信网也称通信系统的系统,它由用户终端设备、传输线路、传输线路和交换系统组成。在这章内容中,老师介绍了TCP/IP协议即Internet的网络协议。
在第三章通信网的分类中,老师主要介绍了电信网的分类:业务网、传送网和支撑网。然后又分别介绍了这三个网,从中,我了解了很多和生活相关的网络知识。
通信网中的传输技术是强大的。媒介就有好几种,其中,我对光纤的印象极深,而且在后面进光通信实验室,老师也具体介绍了光纤,在满足我好奇心的同时,更是让我掌握了知识。
除了传输技术,通信网中的交换技术也是强大的。老师介绍了交换原理、交换方式等。其中的重点之一—ATM交换就是后面进ATM实验室的重点。
通信实习除了进实验室,通信概论课也相当重要的,让我们在进实验室之前
了解了入门概念,为我们进实验室提供是强大的理论基础。
二、数字数据通信实验室
上了两节通信概论课后,数字数据通信实验室是我们进的第一个实验室。老师具体说了数字数据网(DDN)和帧中继网。
数字数据网是利用数字信道传输数据信号的数据传输网。它的传输媒介有光缆、数字微波、卫星信道。一般数字数据网用于向用户提供专用的数字数据传输信道。提供将用户接入公用数据交换网的接入信道。也为公用数据交换网提供交换节点间的数据传输中继信道。
数字数据网DDN发展的的过程中,将数据通信技术与数字通信技术(光纤通信技术、数字交叉连接技术)、计算机技术等有机的结合在一起,形成一个新的技术整体。DDN不仅可以用于准同步数字体系(PDH),而且能在同步数字系列(SDH)中使用。
DDN由复用及交叉连接系统—DDN节点 局间传输系统—局间中继线(数字信道)本地传输系统--用户环路、用户设备网管控制管理中心组成。
老师还介绍了DDN网络业务。分为专用电路、帧中继和压缩话音/G3传真三种类型。我也是第一次看见中国公用数字数据网(CHINADDN)的国家骨干网一期结构。
第二进数字数据实验室,老师主要介绍了帧中继网。帧中继(Frame Relay)是分组交换技术的新发展,是升级技术。它是在通信环境改善和用户对高速传输技术需求的推动下发展起来的。它的开发一是为了满足局域网互联所需的大容量传送,也是为满足用户对数据传输延迟小的要求。帧中继有传输数据业务的速率高信息传输的突发性大和各类LAN通信规程的包容性好的特点。
数字数据通信实验室是我们小组进的第一个实验室。实现了同学们早就想进实验室参观的愿望,同时也让我们老师展示了交换机、路由器等机器,我们第一次感受身临其境,近距离感受通信事业平时我们不太了解的一面。也为我们后来进入光通信实验室和ATM实验室打了进实验室学习的基础。
三、光通信实验室
在光通信实验室,老师主要介绍光通信的概述、发展史、特点、光纤、光缆和光通信系统。
广义的光通信指的是一切运用光波作为载体而传送信息的所有通信方式的总称,而不管传输所使用的介质是什么。
老师在介绍光纤的时候,当场给我们展示了光纤。在实验室的最大优点就是展示所学的东西,不管是实物还是工作原理等。
光通信有很多特点。频带宽,通信容量大损耗低,中继距离长具有抗电磁干扰能力无串话,保密性好线径细,重量轻,柔软节约有色金属,原材料资源丰富。同时也有缺点,质地脆,机械强度低光纤切断和接续需要一定的工具,设备和技术 分路,耦合不灵活 光纤,光缆弯曲半径不能过小(>20CM)在偏僻地区存在有供电困难问题。
提高光纤通信系统容量是光纤通信技术发展的精髓,从1988年到2000 年,容量已经扩大了1000倍,光纤通信已经取得辉煌发展,相信光纤通信能利用其强大的特点,发展得更好。
2.北邮小学期c++实验报告 篇二
c++实验总结报告
——网络工程14班饶思哲 ——学号:2013211574 实验一简单C++程序设计 1.猜价格游戏
编写C++程序完成以下功能:
(1)假定有一件商品,程序用随机数指定该商品的价格(1-1000的整数);
(2)提示用户猜价格,并输入:若用户猜的价格比商品价格高或低,对用户作出相应的提示;
(3)直到猜对为止,并给出提示。
题目1-1总结:
1)本题需要随机生成整数,我开始只使用rand(),即price=rand();来生成随机整数
但这样只是一个伪随机函数,每一次重新打开程序生成的数都是一致的。因此加入时间随机种子:srand((unsigned)time(NULL))2)个人改进1:定义最大值最小值,在每次猜测数字时显示应猜的数字范围,作为提示。
想到这个是因为有一次猜了很多遍都没猜到,一时突然忘记猜到什么范围,然后往前翻猜过的数字和大小感觉相当麻烦,所以就添上了应猜范围,方便再一次猜数。3)个人改进2:本来有一个判断条件判断生成的随机数是不是1~1000范围内,而后更进为随机生成整数对1000取余得到0~999整数,再+1得到1~1000的整数。
实验二类与对象 1.矩形
编写C++程序完成以下功能:
(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;(2)定义一个矩形类,其属性包括左上角和右下角两个点,提供计算面积的方法;(3)创建一个矩形对象,提示用户输入矩形左上角和右下角的坐标;(4)观察矩形对象以及Point类成员的构造函数与析构函数的调用;(5)计算其面积,并输出。
题目2-1总结:
1)这一题是第一次用到class类的题目,开始并不明白为何要定义class,然后还需要区分public和private。而后来去图书馆借了书看到c++最大特色就是可以封装,定义私有属性和公有函数,以确保有些函数和参数不会被轻易访问到,降低错误率。2)class类在最起初定义时总是在class Rectangle那一行报错,经查书发现class定义最后一个大括号后有分号,开始并没有加上。
3)起初在调用class中函数时用c调用的方式,没有跟面向的对象结合,导致编译出错,而后从distance()改为p.distance()就正确了。
4)计算两点距离和面积运用开方和绝对值函数,前面若没有加头文件math.h则会报错。5)输入左上角右下角坐标时,若输入不当,可能会出现面积为负值的情况,所以加上绝对值函数保证面积非负。
6)起初不知道构造函数和析构函数的定义和用法,经翻阅书籍和运行程序得知构造函数在创建对象时调用,可以有多个。而析构函数则在释放对象时调用,一般每一个class中都只有一个默认析构函数。且构造函数与类名称一致,析构函数则在类名称前加~。
2.友元
编写C++程序完成以下功能:
(1)定义一个Boat和Car两个类,他们都具有私用属性——重量;
(2)编写一个函数,计算两者的重量和。double TotalWeight(Boat& b, Car& c);
题目2-3总结:
1)友元函数:在两个对象中都使用到时,可以使用友元函数,并在类外单独定义。
友元函数是允许在类外访问类中的任何成员的。开始在类外单独定义时跟类的成员函数单独定义混淆,写成了double Boat::TotalWeight(),导致编译错误,而后发现友元函数直接用函数名和函数返回值类型定义即可,不需要加上class类的名称。
2)起初定义完class Boat和class Car后发现编译错误,在友元函数的声明那一行出错,而后发现在这行之前没有定义Car类,于是将其在最开头声明出来,通过。
3)起初并没有加上boat和car类的构造函数和析构函数,可是经上网查阅,默认构造函数和析构函数可以系统自动生成,但析构函数只能删除成员指针,并不能释放指针指向的空间,所以若没有申请动态内存,析构函数可不写出,若申请,则需自行在析构函数中delete。
实验三数组与指针 1.矩阵
(一)编写C++程序完成以下功能:
(1)假定矩阵大小为4×5(整型数组表示);
(2)定义矩阵初始化函数,可以从cin中输入矩阵元素;(3)定义矩阵输出函数,将矩阵格式化输出到cout;
(4)定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中;(5)定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中;(6)定义三个矩阵:A1、A2、A3;(7)初始化A1、A2;
(8)计算并输出:A3 = A1加A2,A3 = A1减A2。
题目3-1总结:
1)起初在矩阵相加相减的赋值中所用语句为:m.matrix[i][j]=a.matrix[i][j]+b.matrix[i][j] 但是运行程序发现m矩阵所有元素都是0。经单步调试,发现并没有赋值成功。经查阅书籍,了解到this指针是指向类的对象的地址,便改用this->matrix[i][j]作为赋值对象,最后程序正确。
2)个人改进:将行数列数在文件开头用define定义,可以随时更改。
3)经多次调试后,程序运行结果正确,但矩阵看起来非常混乱,因为并没有行列对齐,于是在打印矩阵中每列直接用table空格隔开,保证美观。2.矩阵
(二)编写C++程序完成以下功能:
(1)假定矩阵大小为4×5(整型);
(2)矩阵空间采用new动态申请,保存在指针中;
(3)定义矩阵初始化函数,可以从cin中输入矩阵元素;(4)定义矩阵输出函数,将矩阵格式化输出到cout;
(5)定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中;(6)定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中;(7)动态申请三个矩阵:A1、A2、A3;(8)初始化A1、A2;
(9)计算并输出A3 = A1加A2,A3 = A1减A2;(10)释放矩阵空间。
题目3-2总结:
1)与3-1题目的区别在int main中用new函数动态申请内存,然后析构函数需要释放申请的空间而不只是自动删除指向空间的指针。析构函数如图。
一开始并不知道该怎么动态申请内存,在c中使用malloc可是c++中并不一样。经查阅书籍,发现c++中申请释放内存用new和delete非常简便。2)指针调用类成员函数一开始不知道该怎么写,写成A1.input()结果编译错误。经查阅书籍,得知指针调用成员函数需写成A1->input()的形式。
3)在释放动态内存时,用到delete函数。但开始的时候写delete matrix时候会出问题。上网查询后得到以下delete用法。
Delete用法:当释放内部类型,如int double型时,直接delete a 即可。若是释放自己定义的class类型,需用delete[]matrix来释放内存。3.矩阵
(三)编写C++程序完成以下功能:
(1)用类来实现矩阵,定义一个矩阵的类,属性包括:
矩阵大小,用 lines, rows(行、列来表示);
存贮矩阵的数组指针,根据矩阵大小动态申请(new)。(2)矩阵类的方法包括:
构造函数,参数是矩阵大小,需要动态申请存贮矩阵的数组; 析构函数,需要释放矩阵的数组指针; 拷贝构造函数,需要申请和复制数组; 输入,可以从cin中输入矩阵元素; 输出,将矩阵格式化输出到cout; 矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵类,但必须矩阵大小相同; 矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵类,但必须矩阵大小相同。
(3)定义三个矩阵:A1、A2、A3;(4)初始化A1、A2;
(5)计算并输出A3 = A1加A2,A3=A1减A2;
(6)用new动态创建三个矩阵类的对象:pA1、pA1、pA3;(7)初始化pA1、pA2;
(8)计算并输出pA3=pA1加pA2,pA3=pA1减pA2;(9)释放pA1、pA1、pA3。
题目3-3总结:
1)拿到这道题我认为要定义一个矩阵类对象,其中包括3-1和3-2一样的input函数,print函数,plus函数,subtract函数,还有新增的构造函数析构函数。一上来我认为class中属性不再是之前的某行某列的数值,而是行数和列数还有矩阵的头指针。根据输入的行数列数来申请内存,再将数值存入不同的位置。然后在主函数中分为两个部分,一个是直接创建对象,另一个是创建矩阵数组指针。
2)第一部分跟前两题类似,所以很快就调试完成并且得到了正确的结果,但是指针部分一直出现问题。最开始是三个矩阵分别申请内存,这样的后果就是要输入三次行数和列数的数值,有可能出现行列数不相等的情况,给之后的加减操作带来麻烦。因此想到让A1矩阵申请内存,而让A2、A3矩阵都与A1相等,就可以避免多次输入行列数,且保证了矩阵大小相等。但这样输入第一个矩阵数值后,矩阵元素获取正常。可当输入第二个矩阵的数值以后,A1和A2矩阵的元素都变为第二个矩阵的元素,即第一个矩阵的元素被覆盖掉。导致和矩阵为第二个矩阵的2倍,差矩阵都是零。经过反复调试,曾经试过将含参构造函数中输入行列数改到主函数中,再给A1申请动态内存。但是因为A2和A3还是初始化跟A1相等,结果并没有改变,还是错误的。而后想到用含参构造函数来申请动态内存,输入固定的行列数后,用确定的行列数来new Matrix(x,y),这样一来不仅矩阵大小相等,而且也不会存在前一个矩阵的值被后一个覆盖掉的问题。经过调试,终于得到了正确的结果。
3)调试过程中我了解到指针初始化和赋值过程中是容易发生树脂覆盖的,所以尽量不要将指针初始化成跟某个指针相等。
实验四继承与派生
1、形状
(一)编写C++程序完成以下功能:
(1)声明一个基类Shape(形状),其中包含一个方法来计算面积;(2)从Shape派生两个类矩形和圆形;(3)从矩形派生正方形;
(4)分别实现派生类构造函数、析构函数和其他方法;
(5)创建派生类的对象,观察构造函数、析构函数调用次序;(6)不同对象计算面积。
题目4-1总结:
1)这一题主要是函数的派生方法使用,经过查阅书籍,得知在class定义后加上:: public(基类名称)便是作为一个派生类的定义,可以沿用基类中的成员函数。
2)并且经过对构造函数和析构函数调用,得知是先调用基类的构造函数,再调用派生类的构造函数创建派生类对象,在程序结束时,先调用派生类的析构函数释放派生类对象,再调用基类的析构函数释放基类对象。
2、形状
(二)——虚函数(1)将【形状
(一)】中的基类计算面积的方法定义为虚函数,比较与【形状
(一)】程序的差异;
(2)将【形状
(一)】中的基类定义抽象类,比较与【形状
(一)】程序的差异。
题目4-2总结:
1)起初并不知道虚函数的作用,后来经过查阅书籍得知在基类中定义虚函数,是为了在派生类中定义这一函数的不同操作方式。并且起初只改变了基类中area函数,在其前面加了virtual,但并没有体现出虚函数的运用。而后看到书上虚函数的应用,发现虚函数是可以让一个基类指针调用派生类相应函数的。于是经过改进,在主函数中定义了3个基类指针,分别指向派生矩形类对象、派生圆形类对象、派生正方形对象,然后并非通过对象名称调用成员函数,而是用基类指针调用派生类中的area函数,充分体现出对虚函数的应用。
2)这一题虽然跟上一题相似,但却因为运用了虚函数而变得不同。这一题让我对虚函数有了更加深入的了解。也了解到调用类中的成员函数不一定非要用对象名或者对象指针调用,也可以用其基类的指针通过虚函数调用。
实验五多态性
1、对Point类重载++和――运算符
编写C++程序完成以下功能:
(1)Point类的属性包括点的坐标(x,y);(2)实现 Point类重载++和――运算符:
++p,--p,p++,p--。
++和――分别表示x,y增加或减少1。
题目5-1总结:
1)对于符号的重载开始并不理解什么意思,后来得知是重新定义一下++、--操作的过程,包括自加自减和赋值。
2)通过这一道题,对于自加符号的前后置的区别又有了更深的印象。起初在—p和++p的时候都只是将x和y加一,并没有赋值,导致在主函数中写q=++p和q=--p时q保持原值,造成结果错误。单步调试后发现这一错误,及时改正过来。3)程序结果正确后编写菜单界面,使其操作步骤更加清晰明了。实验六流式IO
1、流式IO
(一)编写C++程序完成以下功能:
(1)使用ofstream向一个文本文件中输出各种类型的数据,并打开文件观察结果:
整数、无符号整型、长整型、浮点型、字符串、……
(2)用十进制、八进制、十六进制方式向文本文件中输出整数;(3)使用控制符和成员函数来控制输出的格式:
set()precision()...题目6-1总结:
1)文件流主要是向文件中输入信息和从文件读取信息。而跟c语言不同的是c需要fopen来打开一个文件,而c++中只需要用fstream函数。且文件输入方式也比c语言简便很多。2)转换进制开始想到的是用数学的方法算出不同进制下的数值,再输入文件中,但非常的麻烦。后经查阅书籍,看到有指定进制的函数,可以用来修改默认的十进制:oct和hex。3)最后程序正确后,编辑menu显示菜单,使操作更加清晰明了。
2、流式
(三)编写C++程序完成以下功能:(1)输入一个文本文件名;
(2)打开文件名,在该文件的每一行前面加上一个行号,保存在另外一个文本文件中。
题目6-3总结:
1)因为第一题流式已经尝试过向文件中输入信息,而经过翻阅书籍得知从文件中可以用getline整行读取字符串,便可以轻易的将文件内容加上行数,并输出到另一个文本文件中。
2)本题我觉得最大的困难在于输入文本文件名,并打开文件名。书上也并没有关于打开文件名的相关资料,于是上网查询,发现可以用string.h中的c_str()函数来获取键盘输入的文件名字符串,并打开文件名。
3)因为文件处理并没有在屏幕上有所显示,为了让每一步操作更加明了,在复制完一行后会在屏幕上打出某某行复制成功,使程序运行过程更清晰。实验七 C++程序设计应用
1、电话本
编写C++程序完成以下功能:
(1)实现简单电话本功能,用姓名来搜索电话号码;(2)用户输入姓名,程序查找并输出结果;(3)用户可以通过输入,添加姓名和电话号码;(4)用户可以删除姓名和电话号码;(5)电话本可以保存在指定文件中;(6)电话可被从指定文件中读入到内存。
题目7-1总结:
1)电话本分为几大部分:读到内存、输出到文件、新增联系人、删除联系人、查找联系人。因为是读到内存,就想到了可以用数组或者链表来构成电话本的框架。而这两种方式在c语言用过,所以逻辑方便很熟悉,于是选择了比较简便的数组,这样不易出现指针错误的情况。
2)个人改进1: 新增联系人函数中,就是将联系人信息从键盘逐项读入,然后选择将联系人插入到什么位置。若一共6个联系人,插入位置输入3,则插入第三个位置,后面的联系人依次向后移一位。但若是一共6个联系人,插入位置输入8,则会提醒输入位置不当,直接将联系人插入到最后一个位置,即第七。
3)删除、查找、修改函数中都用到了用姓名查找,于是将其单独摘出来定义findposition,找到联系人位置。起初写的是将输入的字符串逐个跟name比较,即a == name,但却发现这样程序查找出来联系人永远不存在。经上网查阅,发现字符串相等不能直接像字符一样用==来判断,而是用><来判断,于是将其改为>=&&<=。但一开始由于疏忽,将&&且关系写成||或关系,导致查找出来永远是第一个联系人。后来单步调试发现错误,改正过来。
4)个人改进2: 删除、查找、修改中,若是联系人不存在,需要输出提示。而我另外又加了一句,并不是说不存在就直接返回,而是让用户自己选择是继续输入姓名还是返回主菜单。也让手误的时候不再把前面的操作进行一遍,留有手误的余地。5)修改联系人模块,一开始class类中只有setPhone函数,并没有setname,setmobile等等,而是直接将所有属性值组合起来构建联系人。这样的后果就是在修改联系人的时候,只修改了一项,但是并不能赋值进去。表面上虽然修改了,可查找后发现联系人的信息并没有改变。后来将每一项信息都分别set,经过调试最终结果正确。
6)从指定文件将电话本读入内存,就跟实验6第三题的流式很相似,都是逐行读取信息,只是读取后是存入数组的不同属性值中。开始不知道该怎么确定文本文件中不再有联系人信息,而后上网查资料发现当文件中不再有信息可以读的时候,infile>>name>>mobile…的值就是0,便可停止操作。而姓名等信息也可以逐个赋值到phone类数组里。
7)个人改进3: 电话本不需要手动保存在指定文件中,主菜单也不再显示这一操作,而是当选择退出电话本时自动保存到输出的output.txt中。
3.北邮电子院嵌入式实验报告大四上 篇三
学院: 电子工程学院
一、实验目的
1、了解嵌入式系统及其相关基础知识。
2、了解宿主PC机与PXA270目标版,能正确连接宿主PC机与PXA270目标版。
3、学会在宿主机上安装Linux操作系统——RedHat9.0。、4、学会建立宿主PC机端的开发环境。
5、学会配置宿主PC机端的超级终端。
6、配置宿主PC机端的TFTP服务,并开通此服务。
7、配置宿主PC机端的NFS服务,并开通此服务。
8、学会简单Linux驱动程序的设计。
二、实验内容
(一)基本实验
实验一到六为基础实验,主要是为了在熟悉实验操作平台的同时为后续实验搭建好软、硬件环境,配置好相关的协议、服务。
其中实验一是各个硬件的互联,搭建好了实验的硬件环境。实验二是在宿主PC端安装虚拟机,提供了实验需要的Linux操作系统。实验三是宿主PC端开发环境的安装与配置。
实验四是配置宿主PC机端的超级终端,使PC机与PXA270目标板之间可以通过串口通讯。在每次重启宿主PC机时,都需要重新将超级终端挂载到虚拟机上,挂载之前须通过ifconfig命令查看该机的IP地址,若其已经复位,须用命令:ifconfig eth0 192.168.0.100 up重置宿主PC机的IP地址。挂载虚拟机的代码为:
root ifconfig eth0 192.168.0.50 up mount –o nolock 192.168.0.100:/ /mnt 实验五是配置宿主PC机的TFTP服务。TFTP是简单文件传输协议。每次重启宿主PC机时,都要重启该服务,重启命令为:
service xinetd restart。
实验六是配置宿主PC机端NFS服务。NFS是指网络文件系统,它实现了文件在不同的系统间使用。当使用者想用远端档案时,只需调用“mount”就可以远端系统挂接在自己的档案系统之下。每次重启宿主PC机时,也都要重启该服务,重启命令为: service nfs restart service nfs restart
(二)基本接口实验
实验
十二、简单设备驱动程序
本次实验的目的是让我们动手实践一个简单的字符型设备驱动程序,学习Linux驱动程序构架,学习在应用程序中调用驱动。驱动程序代码及注释为: // 头文件
#include
#define VERSION “PXA2700EP-SIMPLE_HELLO-V1.00-060530” // 定义版本号 void showversion(void)//显示版本的函数 { printk(“***************************************”);printk(“t %s tn”,VERSION);printk(“***************************************”);}
/*-------read:用于在指定文件描述符中读取数据 file:是文件指针 buf:读取数据缓存区 count:请求传输的字节数 f_ops:文件当前偏移量
当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count----------*/ ssize_t SIMPLE_HELLO_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_HELLO_DEBUG
printk(“SIMPLE_HELLO_read[--kernel--]n”);#endif return count;}
/*-----write:用于向打开的文件写数据 file:是文件指针 buf:写入数据缓存区 count:求传输的字节数 f_ops:文件当前偏移量
当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count----------*/ ssize_t SIMPLE_HELLO_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_HELLO_DEBUG
printk(“SIMPLE_HELLO_write[--kernel--]n”);#endif
return count;}
/*-----ioctl:对设备的I/O通道进行管理的函数 inode:设备节点
flip:打开的一个文件
cmd:驱动程序的特殊命令编号 data:接收剩余参数
----------*/ ssize_t SIMPLE_HELLO_ioctl(struct inode * inode ,struct file * file, unsigned int cmd, long data){ #ifdef OURS_HELLO_DEBUG
printk(“SIMPLE_HELLO_ioctl[--kernel--]n”);#endif return 0;}
/*----------open:打开函数
inode:打开文件所对应的i节点,获取从设备号 flip:打开的一个文件
open()方法最重要的是调用了宏MOD_INC_USE_COUNT,这个宏主要用来使驱动程序使用计数器,避免不正确卸载程序
----------*/ ssize_t SIMPLE_HELLO_open(struct inode * inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG
printk(“SIMPLE_HELLO_open[--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;}
/*----------released:关闭函数
Inode:打开文件所对应的i节点,主要获取从设备号 flip:打开的一个文件
release()方法最重要的是调用了宏MOD_DEC_INC_USE_COUNT,这个宏主要用来减少驱动程序使用计数器
----------*/ ssize_t SIMPLE_HELLO_release(struct inode * inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG
printk(“SIMPLE_HELLO_release[--kernel--]n”);#endif MOD_DEC_INC_USE_COUNT;return 0;}
struct file_operations HELLO_ops ={ // SIMPLE_HELLO设备向系统注册
open: SIMPLE_HELLO_open, read: SIMPLE_HELLO_read, write: SIMPLE_HELLO_write, ioctl: SIMPLE_HELLO_ioctl, release: SIMPLE_HELLO_release, };
/*----------INIT:驱动程序初始化
devfs_register_chrdev(SIMPLE_HELLO_MAJOR,“hello_serial_ctl”,& HELLO_ops)最为主要
devfs_register_chrdev注册设备驱动程序,包括主设备号、驱动程序名、结构体指针----------*/ static int __init HW_ HELLO_init(void){ int ret =-ENODEV;
ret = devfs_register_chrdev(SIMPLE_HELLO_MAJOR, “hello_serial_ctl”,& HELLO_ops);
showversion();
if(ret<0)
{
printk(“pxa270 init_module failed with %d n[--kernel--]”,ret);
}
else
{
printk(“pxa270 hello_driver register success!![--kernel--]n”);
} return ret;}
static int __init pxa270_ HELLO_init(void)//模块初始化函数,调用HW_ HELLO_init 函数
{ int ret =-ENODEV;
#ifdef OURS_HELLO_DEBUG
printk(“pxa270_ HELLO_init[--kernel--]n”);
#endif ret = HW_ HELLO_init();if(ret)return ret;return 0;}
/*----------模块卸载函数
devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR,“hello _ctl”)最为主要 devfs_unregister_chrdev卸载设备驱动程序,包括主设备号、驱动程序名
----------*/ static void __exit cleanup_ HELLO_ctl(void){ #ifdef OURS_HELLO_DEBUG
printk(“cleanup_HELLO_ctl[--kernel--]n”);#endif devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR, “hello_ctl”);}
MODULE_DESCRIPTION(“simple hello driver module”);//描述信息 MODULE_AUTHOR(“liduo”);
//驱动程序作者姓名 MODULE_LICENSE(“GPL”);module_init(pxa270_HELLO_init);
//指定驱动程序初始化函数 module_exit(cleanup _HELLO_ctl);
//指定驱动程序卸载函数
Makefile文件代码:
#TOPDIR:=$(shell cd..;pwd)TOPDIR:=.KERNELDIR=/pxa270_linux/linux INCLUDEDIR=$(KERNELDIR)/include CROSS_COMPILE=arm-linux-
AS =$(CROSS_COMPILE)as LD =$(CROSS_COMPILE)ld CC =$(CROSS_COMPILE)gcc CPP =$(CC)-E AR =$(CROSS_COMPILE)ar NM =$(CROSS_COMPILE)nm STRIP =$(CROSS_COMPILE)strip OBJCOPY=$(CROSS_COMPILE)objcopy OBJDUMP=$(CROSS_COMPILE)objdump
CFLAGS+=-I..CFLAGS+=-Wall –O –D_KERNEL_-DMODULE –I$(INCLUDEDIR)
TARGET = pxa270_hello_drv.o modules: $(TARGET)
all: $(TARGET)
pxa270_hello_drv.o:pxa270_hello_drv.c $(CC)-c $(CFLAGS)$^-o $@
clean: rm-f *.o *~ core.depend Makefile文件的内容用于执行编译工作,一个Makefile文件包括:① 由make工具创建的目标体(target),通常是目标文件或可执行文件;② 要创建目标体所依赖的文件(dependency_file);③ 创建每个目标需要运行的命令(command)。
以上两个文件编辑完成后后,用make modules编译驱动程序,编写测试文件simple_test_driver.c,然后GCC编辑器编译测试程序生成测试文件。成功生成测试文件后用超级终端开始挂载,加载驱动程序,使用命令./test测试,观察测试结果,实验完成。
实验十三 CPU GPIO驱动程序设计
本实验是让我们在linux系统中插入自己的驱动程序,调用它。实现用CPU GPIO控制外部LED,利用PXA270核心板上的LED验证我们的工作。驱动程序代码:
驱动程序代码与实验十二无大区别,下面列出需要补充的代码。
一、补充代码
补充代码1:
#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [--kernel--]n”);#endif return count;
补充代码2:
#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_open [--kernel--]n”);#endif
补充代码3:
open: SIMPLE_GPIO_LED_open, read: SIMPLE_GPIO_LED_read, write: SIMPLE_GPIO_LED_write, ioctl: SIMPLE_GPIO_LED_ioctl, release: SIMPLE_GPIO_LED_release, 不同之处:GPIO_LED,主文件名、二、Makefile文件:
将实验十二相关代码作如下修改即可: TARGET = pxa270_gpio_led_drv.o modules: $(TARGET)
all: $(TARGET)
pxa270_gpio_led_drv.o:pxa270_gpio_led_drv.c $(CC)-c $(CFLAGS)$^-o $@
三、作业代码
要求:使得目标板的核心板上的LED闪烁产生亮7秒,灭5秒的效果。作业主要代码:
while(1)
{ ioctl(fd,LED_OFF);
sleep(5);//原来为sleep(1);
ioctl(fd,LED_ON);sleep(7);//原来为sleep(1); }
不同之处:改变代码中加粗位置括号数字,可以改变灯亮和熄灭的时间比
四、测试显示
测试时,超级终端上的显示如下:
实验十四 中断实验
本实验是让我们学习中断的相关概念,以及Linux系统是如何处理中断的,并且学会编写获取和处理外中断的驱动程序。
一、补充代码
补充代码1:
printk(“*****************************************n”);printk(“t %s tn”,VERSION);printk(“************************************************nn”);补充代码2:
#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_read [--kernel--]n”);#endif return count;
补充代码3:
#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [--kernel--]n”);#endif return count;
补充代码4:
open: SIMPLE_INT_open, read: SIMPLE_INT_read, write: SIMPLE_INT_write, ioctl: SIMPLE_INT_ioctl, release: SIMPLE_INT_release, 二、Makefile文件如实验十三做相应修改。
三、测试时,超级终端上显示如下:
实验十五 数码管显示驱动实验
本实验中,我们要编驱动程序以实现在Linux系统下控制LED数码管的显示。
一、补充代码
补充代码1:
printk(“*****************************************n”);printk(“t %s tn”,VERSION);printk(“************************************************nn”);
补充代码2: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_read [--kernel--]n”);#endif return count;
补充代码3: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_write [--kernel--]n”);#endif return count;
补充代码4: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_ioctl [--kernel--]n”);#endif return 0;
补充代码5: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_open [--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;
补充代码6: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_release [--kernel--]n”);#endif MOD_DEC_USE_COUNT;return 0;
补充代码7: open: SERIAL_LED_open, read: SERIAL_LED_read, write: SERIAL_LED_write, ioctl: SERIAL_LED_ioctl, release: SERIAL_LED_release
补充代码8: int ret =-ENODEV;ret = devfs_register_chrdev(SERIAL_LED_MAJOR, “serial_led_ctl”, &SERIAL_LED_ops);Showversion();If(ret<0){ printk(“pxa270 init_module failed with %dn [--kernel--]”,ret);return ret;} else { printk(“pxa270 serial_led_driver register success!![--kernel--]n”);} return ret;
补充代码9: int ret =-ENODEV;#ifdef OURS_HELLO_DEBUG printk(“pxa270_SERIAL_LED_init [--kernel--]n”);#endif ret = HW_SERIAL_LED_init();if(ret)return ret;return 0;
补充代码10: #ifdef OURS_HELLO_DEBUG printk(“cleanup_SERIAL_LED [--kernel--]n”);#endif devfs_unregister_chrdev(SERIAL_LED_MAJOR, “serial_led”);
补充代码11: MODULE_DESCRIPTION(“serial_led driver module”);MODULE_AUTHOR(“liduo”);MODULE_LICENSE(“GPL”);module_init(pxa270_SERIAL_LED_init);module_exit(cleanup_SERIAL_LED);
二、Makefile文件与实验十四相同,只需作相应修改即可
三、作业代码
1、实现目标板上的LED数码管循环显示数字9-0。
for(count=0;count<10;count++)
{ data[0] = buf[9-count];//原来为data[0] = buf[count] ret=write(fd,data,1);sleep(1);} 修改之处:将显示的数有buf[count]改为buf[9-count],实现反向循环显示。
2、实现目标板上的LED数码管循环显示数字2、4、6、8、0或者8、6、4、2、0。代码: for(count=0;count<10;count+=2)//原来为count++
{data[0] = buf[count];ret=write(fd,data,1);sleep(1);}
修改之处:修改count的变化方式,让其每次增加2,而不是1,使0、2、4、6、8循环显示,如要循环显示8、6、4、2、0的话,只要在上述代码中将buf[count]改为buf[8-count]即可。
四、测试显示:
测试时,显示如下:
作业1: 作业2:
实验十六 LED点阵驱动程序设计
本实验要求我们学会编写驱动程序,实现在Linux系统下控制LED点阵显示,并在此基础上稍加改进,实现对LED的控制。驱动程序代码:
一、补充代码
补充代码1:
printk(“*****************************************n”);printk(“t %s tn”,VERSION);printk(“************************************************nn”);
补充代码2:
#ifdef OURS_LED_DEBUG printk(“SIMPLW_LED_read [--kernel--]n”);#endif return count;
补充代码3:
#ifdef OURS_LED_DEBUG printk(“SIMPLE_LED_ioctl [--kernel--]n”);#endif return 0;
补充代码4:
open: SIMPLE_LED_open, read: SIMPLE_LED_read, write: SIMPLE_LED_write, ioctl: SIMPLE_LED_ioctl, release: SIMPLE_LED_release
补充代码5:
int ret =-ENODEV;#ifdef OURS_LED_DEBUG printk(“pxa270_LED_CTL_init [--kernel--]n”);#endif ret = HW_LED_CTL_init();if(ret)return ret;return 0;
补充代码6:
#ifdef OURS_LED_DEBUG printk(“cleanup_LED_ctl [--kernel--]n”);#endif devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “led_ctl”);
二、Makefile程序仍然可以用前一个实验的,只要把相关函数名改了就可以,此处不再赘述。
三、作业代码
1、按横方向隔行扫描led点阵数码管。代码:
for(i=1;i<=4;i++){ //原来为i<8
buf[0]=c;
buf[1]=~r;// row
for(j=1;j<=8;j++){
write(fd,buf,2);
printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);
usleep(200000);// sleep 0.2 second
c = c<<1;
buf[0]=c;// column
}
c = 1;
r = r<<2;
} //原来为r=r<<1
修改之处:外层for循环中间i<8改为i<4,同时,将else中的r=r<<1改为r<<2。这样就可以让点阵在显示时跳跃一行进行显示。
2、按竖方向顺序扫描led点阵数码管。代码:
for(i=1;i<=8;i++){
buf[0]=c;
buf[1]=~r;// row
for(j=1;j<=8;j++){
write(fd,buf,2);
printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);
usleep(200000);// sleep 0.2 second
r = r<<1;//原来此处为c=c<<1 buf[1]=~r;//原来此处为buf[1]=~c } r = 1;//原来此处为c=1 c = c<<1;//原来此处为r=r<<1 修改之处(现对于最初的测试程序,而不是作业1的测试程序):将r和c 进行对调。实现将横和竖的对调,已达到竖方向扫描的目的。四、测试显示
测试时,超级终端显示如下:
作业1: 作业2:
实验十七 AD驱动程序
本实验要求我们学会编写驱动程序对模拟量输入进行采集,并转换为数字量显示在超级终端上,从而实现AD转换。
驱动程序代码
一、补充代码
补充代码1:
printk(“*****************************************n”);printk(“t %s tn”,VERSION);
printk(“************************************************nn”);
补充代码2:
#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_read [--kernel--]n”);#endif return count;
补充代码3:
#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_write [--kernel--]n”);#endif return count;
补充代码4:
#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_open [--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;
补充代码5:
#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_release [--kernel--]n”);#endif MOD_DEC_USE_COUNT;return 0;
补充代码6:
open: SIMPLE_HELLO_open, read: SIMPLE_HELLO_read, write: SIMPLE_HELLO_write, ioctl: SIMPLE_HELLO_ioctl, release: SIMPLE_HELLO_release
补充代码7:
ad_ucb = ucb1x00_get();
int ret =-ENODEV;ret = devfs_register_chrdev(ADCTL_MAJOR, “ad_ctl”, &adctl_ops);Showversion();If(ret<0){ printk(“pxa270 init_module failed with %dn [--kernel--]”,ret);return ret;} else { printk(“pxa270 serial_led_driver register success!![--kernel--]n”);} return ret;
补充代码8:
int ret =-ENODEV;#ifdef OURS_HELLO_DEBUG printk(“pxa270_AD_CTL_init [--kernel--]n”);#endif ret = HW_AD_CTL_init();if(ret)return ret;return 0;
补充代码9:
#ifdef OURS_HELLO_DEBUG printk(“cleanup_AD_ctl [--kernel--]n”);#endif devfs_unregister_chrdev(ADCTL_MAJOR, “ad_ctl”);
二、Makefile文件可以用前一个程序的文件,只要将相应部分的代码修改即可
三、作业代码
要求:将UCB_ADC_INP_AD0换为其他通道并观察。代码:
for(i=0;i<50;i++)
{ Val0 = ioctl(fd,UCB_ADC_INP_AD1,0);usleep(100);val1 = ioctl(fd,UCB_ADC_INP_AD0,0);printf(“val0 = %dtval1 = %dn”,val0,val1;usleep(500000);
}
修改之处:只需交换AD1和AD0即可实现输出通道的改变。四、测试时显示
测试时、超级终端显示如下:
实验十八 DA驱动程序
本实验要求我们编写驱动程序,实现将数字信号转换成模拟信号并在示波器上显示出模拟信号波形,即实现DA转换。驱动程序代码:
一、补充代码
补充代码1:
#include“../AD/pxa_ad_drv.h” /引用AD驱动程序的头文件/
补充代码2:
printk(“*****************************************n”);printk(“t %s tn”,VERSION);
printk(“************************************************nn”);
补充代码3:
#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_read [--kernel--]n”);#endif return count;
补充代码4:
#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_write [--kernel--]n”);#endif return count;
补充代码5:
#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_ioctl [--kernel--]n”);#endif return 0;
补充代码6:
#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_open [--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;
补充代码7:
open: SIMPLE_DA_open, read: SIMPLE_DA_read, write: SIMPLE_DA_write, ioctl: SIMPLE_DA_ioctl, release: SIMPLE_DA_release
补充代码8:
int ret =-ENODEV;ret = devfs_register_chrdev(SIMPLE_DA_MAJOR, “DA_ctl”, &DA_ctl_ops);Showversion();If(ret<0){ printk(“pxa270 init_module failed with %dn [--kernel--]”,ret);return ret;} else { printk(“pxa270 serial_led_driver register success!![--kernel--]n”);} return ret;
补充代码9:
int ret =-ENODEV;#ifdef OURS_DA_DEBUG printk(“pxa270_DA_CTL_init [--kernel--]n”);#endif ret = HW_DA_CTL_init();if(ret)return ret;return 0;
补充代码10:
#ifdef OURS_DA_DEBUG printk(“cleanup_DA_ctl [--kernel--]n”);#endif devfs_unregister_chrdev(SIMPLE_DA_MAJOR, “DA_ctl”);补充代码11:
MODULE_DESCRIPTION(“serial_led driver module”);MODULE_AUTHOR(“liduo”);MODULE_LICENSE(“GPL”);module_init(pxa270_DA_CTL_init);module_exit(cleanup_DA_ctl);
二、Makefile文件可以继续用前面程序Mekefile的代码,只需要将相应部分的代码修改即可。
三、作业代码
要求:输出三角波。代码:(需要修改部分)
//---------------------print--------------------void da_create_sin(int fd){ unsigned char buf[(int)POINT];unsigned char*c;unsigned long I;int j;double x;for(j=0;j
x=(j/POINT)*(5*M_PI);//此处原来为x=sin((j/POINT
//*(2*M_PI))#ifdef OURS_DEBUG printf(“%ft”,x);#endif buf[j] =(unsigned char)255*(x/2+1)/2;#ifdef OURS_DEBUG printf(“%xn”, buf[j]);#endif } printf(“create sin waven”);printf(“Use”Ctrl + c“quit the functionn”);while(1){ c = buf;for(j=0;j
四、测试显示:(以下为三角波)
(以下为sin)
三、实验总结:
在本次嵌入式实验中,我们首先在老师的指导下了解了嵌入式系统,初步接触了Linux环境。我们的实验板是OURS-PXA270-EP,它是一款基于INTEL XSCALE PXA270处理器,针对高校嵌入式系统教学和实验科研的平台。这款设备主要包括核心板与底板两个部分,核心板主要集成了高速的PXA270 CPU,配套的存储器,网卡等设备;底板主要是各种类型的接口与扩展口。
了解了实验的平台后,在接下来的基本实验中我们学会了嵌入式开发系统硬件环境的搭建、Linux操作系统RedHat9的安装、软件环境的搭建,以及配置超级终端,配置通讯服务。这些实验内容只要按照实验指导书上的步骤一步一步做即可,不会出现难以解决的问题,一般都会做的很顺利。有三个需要注意的地方时,在配置端口时,一定要确定实验箱接的是端口一,还是端口二。否则会出现无法建立呼叫的问题(其表现为超级终端接口内没有输出内容)。其次要确定虚拟机上网桥的设定是否正确。不然也会出现无法呼叫现象。最后,要确定网线是否连接上。在实验时,由于有些电脑的网线接口有断裂的现象,如果插口没接好的话,将会出现nfs连接错误。
在基本实验之后,进行的就是接口实验。总的来说,实验的难度不大。当然这是建立在对实验代码有一定理解的基础之上的。在实验十二中,我们对实验的接口代码规则已经有了一定的了解。而之后的几个实验都是基于实验十二进行相应的改动即可。所以完成下来难度不是很大。而对应的作业中,我们仅需要对测试代码进行相应的改写。在对c语言有一定的了解的前提下,可以很容易相应代码所实现的功能,仅需要对相应代码做些修改即可。
不过,值得注意的还有两点,第一:代码的编写一定要符合规则,同时,代码的输入要避免输入错误。否则,在需要一次一次编译一次次查看错误一次次改正错误,这会是个费时费力的工作。第二:每次实验时,需要从新设定虚拟机的ip,即每次实验开始时都需要重复做实验五实验六。不然在挂载时会出现无法挂载的现象。
4.北邮移动通信阶段作业 篇四
1.为了提高容量,增强抗干扰能力,在GSM系统中引入的扩频技术为A.跳频B.跳时C.直接序列D.脉冲线性调频 2.GSM系统采用的多址方式为()
A.FDMAB.CDMA C.TDMA D.FDMA/TDMA
3.电波在自由空间传播时,其衰耗为100 dB,当通信距离增大一倍时,则传输衰耗为。
A.增加6 dB B.减小6dB C.增加12 dB D.不变 4.如果载波频率是1800MHz,那么波长为()米。A.1 B.10 C.1/6D.3/85.TDD表示的含义()
A.time division multiple access B.time division duplex C.transfer control protocol D.time division synchronous CDMA
6.下面哪个是数字移动通信网的优点()
A.频率利用率低B.不能与ISDN兼容C.抗干扰能力强D.话音质量差
7.在单位无线小区覆盖半径相同的条件下,覆盖同样面积的面状服务区时,用()无线邻接构成整个面状服务区是最好的。A.正方形B.圆形C.正六边形D.等边三角形
8.如果小区半径r=15km,同频复用距离D=60km,用面状服务区组网时,可用的单位无线区群的小区最少个数为。()A.7B.5C.4D.3
9.蜂窝移动通信系统采用()工作方式 A.单工B双工C半双工 10.爱尔兰是什么的单位? A.数据量B.话务量C.时延D.呼损率 1GSM系统选用的调制方式为()A.QAMB.GMSKC.DQPSK D.QPSK
2.如下哪一个特征量不是用来描述信道衰落特性()A.衰落率B.时延扩展C.电平交叉率D.平均衰落周期
3.已知接收机灵敏度为0.5μv,这时接收机的输入电压电平A为()A.-3dBμv B.-6dBμvC.0dBμvD.3dBμv
4.在移动通信系统中,运动中的移动台所接收的载频将随运动速度而变化,产生不同频率这是()。
A.远近效应B.快衰落C.慢衰落D.多普勒效应
5.某移动台的发射功率为0dBm,表示该移动台的发射功率为()W。A.1 B.0 C.0.001D.0.1
6.通常移动通信系统采用的语音编码方式为 A.参量编码B.波形编码C.混合编码 7.GSM的用户记费信息()
A.在BSC内记录B.在BSC、MSC及记费中心中记录C.MSC中记录D.以上都不是 8.CDMA软切换的特性之一是()
A.先断原来的业务信道,再建立信道业务信道B.在切换区域MS与两个BTS连接 C.在两个时隙间进行的D.以上都不是 9.以下那种不是附加业务()
A.无条件前向转移B.多方通话C.闭锁出国际局呼叫D.以上都是 10.CDMA系统采用的多址方式为()A.CDMAB.TDMA C.FDMA
一、判断题
1.沃尔什码就其正交性而言为正交码。A.正确B.错误
2.CDMA软切换的特性之一是先断原来的业务信道,再建立信道业务信道 A.正确B.错误
3.采用频分双工的模式,上行链路和下行链路分别采用了不同的频段。A.正确B.错误
4.CDMA软切换的特性之一是在切换区域MS与两个或两个以上BTS连接 A.正确B.错误
5.不同频率之间的切换只能采用硬切换,A.正确
B.错误
6.空间分集的依据在于快衰落的相关性.即在任意两个不同的位置上接收同一个信号.只要两个位置的距离大到一定程度,则两处所收信号的衰落是相关的。A.正确
B.错误
7.可以利用交织编码来纠正突发错误。
A.正确B.错误 8.信道编码是以提高信息传输效率为目的的编码。
A.正确
B.错误
9.划分服务区域要根据服务对象、地形以及不产生相互干扰等因素决定。通常小区制有两种划分方法,带状服务区和面状服务区。A.正确
B.错误
10.数字调制指利用数字信号来控制载波的振幅、频率或相位。常用的数字调制有:
调幅(AM)、调频(FM)或调相(PM)信号。A.正确B.错误 1.调制的目的是发端把要传输的模拟信号或数字信号变换成适合信道传输的信号。A.正确
B.错误
2.正交振幅调制是二进制的PSK、四进制的QPSK调制的进一步推广,通过相位和振幅的联合控制,可以得到更高频谱效率的调制方式,从而可在限定的频带内传输更高速率的数据 A.正确
B.错误
3.共用信道数n=5,流入话务量A=1.360爱尔兰,查表得呼损率B=1%。那么完成的话务量A 0 =1.36×99%爱尔兰。A.正确B.错误 4.双工和半双工工作方式没有严格区别。
A.正确
B.错误
5.第二代移动通信系统也简称2G,又被国际电联(International Telecommunication Union,ITU)称为IMT-2000(International Mobile Telecommunications in the year 2000),意指在2000年左右开始商用并工作在2000MHz频段上的国际移动通信系统。A.正确B.错误 6.语音通信对时延敏感,要求时延小;而数据通信对时延不敏感。A.正确B.错误 7.移动通信是指通信双方至少有一方在移动中进行信息传输和交换
A.正确
B.错误
8.在单位无线小区覆盖半径r相同的条件下,覆盖同样面积的面状服务区时,用任意形状无线小区邻接构成整个面状服务区都是最好的。A.正确
B.错误
9.为减小同频干扰,需要同频小区在频率上隔开一个最小的距离,为传播提供充分的隔离。A.正确B.错误 10.邻道干扰是相邻的或邻近频道的信号相互干扰。
A.正确