🌍首页
📁归档
⏳时光机
🚩友链
📫留言
📧订阅
🌟推荐
📕考研课程
🏜️ 免费壁纸
❤ 捐助本站
💰资助名单
🎵音乐实验
Search
1
【NPN/PNP三极管】放大电路饱和失真和截止失真的区别
20,121 阅读
2
论文写作中如何把word/wps里面所有数字和字母替换为新罗马字体
10,677 阅读
3
【高数】形心计算公式讲解大全
9,061 阅读
4
Vivado-FPGA Verilog烧写固化教程
8,015 阅读
5
【概论】一阶矩、二阶矩原点矩,中心矩区别与概念
7,829 阅读
🪶微语&随笔
励志美文
我的随笔
工作办公
📡电子&通信
嵌入式&系统
通信&信息处理
编程&脚本笔记
⌨️IC&系统
FPGA&ASIC
VLSI&IC验证
EDA&虚拟机
💻电子&计算机
IP&SOC设计
机器学习
软硬件算法
登录
/
注册
三个(共41篇)
找到
41
篇与
三个
相关的结果
- 第 3 页
2022-10-11
读懂史密斯圆图
摘要:史密斯圆图用于高频电路阻抗匹配,通过计算电容器、电感器参数和显示频率-阻抗特性。它将阻抗值表示为复数,并使用匹配点、等实部线和等虚部线进行匹配。软件如SmithV3.1可辅助进行阻抗匹配设计。史密斯圆图能干啥用? 史密斯圆图,就是做高频电路之间的阻抗匹配用的。所谓阻抗是电路对电的阻碍能力,它是个矢量,也就是说阻抗值是个复数。这里面既包括实部电阻成分一即与电力 "顶牛儿”的那部分阻力;也包括虚部电抗成分一就是把电力拉偏的那部分阻力。两者加一块,就叫阻抗。阻抗匹配,是电路之间连接的一-个基本要求,简单讲就是输入阻抗和输出阻抗大致相当,方向相反。如果阻抗不匹配呢?轻者电路工作效率低,重者.工作异常或直接烧毁。具体到高频电路来说,这些危害不仅都有,而且比数字电路、低频模拟电路上的危害要严重得多。那高频电路的阻抗匹配是啥标准呢?就是让输入端电阻和输出端电阻是纯阻性,而且最好等于509或752 。那原来阻抗不匹配,现在咋弄它就匹配了呢?就是在两个电路之间,接上电容、电感、传输线,微带线、变压器之类的东西。把阻抗值矫正到阻抗相等面来。史密斯圆图的主要用途,一是计算接到电路里的那些电容器、电感器的参数值的。二是用来显示某一电路的频率一阻抗特性的。 史密斯圆图怎么用? 史密斯圆图,它相当于一个地图,它上面每一个点, 都代表一个复数形式的阻抗值,而其圆心叫做匹配点,它代表了实部50om,虚部0om的理想阻抗,那就是我们要到达的地方。做阻抗匹配,就是规划一条从阻抗点走到匹配点的线路。然后呢?然后就是利用这些点位之间的差值做计算了。这个事儿我就不讲了。因为过去用纸本史密斯圆图才需要自己算,现在有很多专用软件能替我们做,不仅能算刚才我提到的那个匹配元件的电容量、电感量,还能算出谐振电路的Q值,驻波比,衰减量等等,这就用不着咱们算了,诸位知道这些概念是啥意思,就行了!至于具体怎么用史密斯圆图软件?怎么看这些数据?怎么评价匹配的效果?别着急,我们后边再聊。 史密斯圆图第二节史密斯圆图该咋看? 简言之,是看一线、两弧和两圆。 我们说过,史密斯圆图上的每个点,都有实部值和虚部值,那么图上的线,其实也只有两种,一是等实部线,二是等虚部线。读史密斯圆图,就是先沿等虚部线,找到实部值,再沿着等实部线找到虚部值。那么一线和两弧,都是等虚部线;两圆,是等实部线!接下来我们就从一线讲起,说说史密斯圆图的刻度划分刻度值 线一一根特殊的等虚部线 图片 史密斯圆图被一条名为电阻线的蓝色横线分成 上下两个半区,上半部分叫电感区, 那里所有点的虛部值都为正;下半部分叫电容区,那里所有点的虚部值都为负。而电阻线本身的虚部阻抗值不正不负,他上面每一个点的阻抗值均为0欧。所以电阻线是一根特殊的虚部线,它是我们查找实部值的一把尺子。 电阻线上有三个点,最左侧的叫短路点,他表示实部值0欧姆,虚部值也为0欧姆的情况;最右侧的叫断路点,他表示实部值无穷大,虚部值也为0欧姆的情况;而中间点,也就是圆心那是匹配点,那里的阻值是“标准阻值”,一般情况下他是50欧姆。“三点” 是史密斯圆图的基点,也是我们校正天线分析仪的起点,一定记住。 归一化处理 但是请注意!虽然电阻线是一把测量实部阻值的尺子,但是这把尺子上标的不一定是实部阻值。纸本的史密斯圆图标注的是阻抗值/标准阻值的比值,这叫归-化处理,这个值叫归-化阻抗值。下图中的小红字标的是阻抗值,而大红字标的是归一化阻抗值9。咱们先说图.上的大红字,那就是归一化之后的阻抗值。如果我们是在纸本史密斯圆图上标图,那第一步应该把阻抗值转换成归一化阻抗值。 图片 以标准阻抗50欧姆为例。我们要找100欧姆的实部值,就去电阻线上找归一化阻抗值为100欧姆/50欧姆=2的点,而图上显示"0.2" 归一化阻抗值的地方,其实际阻抗值就是0.2*50欧姆= 10欧姆,而匹配点的归一化阻抗值永远为1,这是归一化阻抗标注法的一个识别标志。为什么要用归一化阻抗值标注刻度呢?因为很多时候,我们不是要把电路匹配到50欧姆上,而是要匹配到75欧姆或者300欧姆等阻抗上。 请看下图,这是75欧姆标准电阻时,史密斯原图上的情况,其中电阻线下方写的红字是阻抗值。电阻线上方的写的红字是归一化阻抗值。 图片 第二套刻度一一导纳值和归一化导纳值 等电阻线是一把度量实部值的尺子,它有阻抗值和归一化阻抗值和两种标注方法,其实在电脑版史密斯圆图的等电阻线上,还有一套刻度。就是用大绿字标注的归一化导纳值和用小绿字标注的导纳值。 有人想问导纳值是啥?导是电阻值的倒数,纳是电抗值的倒数,导纳加一块就是导纳值,它是阻抗值的倒数,导纳值的单位是西门子,写作“S",1S等于= 1000mS。给导纳值做归一化,也就是 将导纳值除以0.02S标准导纳值(0.02S, 其实就是1/50欧姆)。这两种标法的值,是等价的。 图片 例如,电阻线上25Ω那个点,它的导纳值为1/25Ω=0.04S,它的归一化导纳值就是0.04S/0.02S为=2。 导纳值既然和阻抗值完全等价,用法也一样,那我们要这个玩意做啥呢?简单讲,我们在标注初始阻抗点时,要根据红色的阻抗值坐标系做,而在做阻抗匹配时,则要用到绿色的导纳值坐标系。 两圆两弧---等实部圆和等虚部弧 图片 两圆---两种等实部线 讲特殊的电阻线--也就是0欧姆等虚部线之后,我们看看与电阻线相切的那些圆形。这些圆圈都是等实部线,那上面每一条线的实部值都相等。其中红色的圆圈都叫阻抗圆,而绿色的圆圈都叫导纳圆,我们在电阻线.上找到实部阻抗值或者实部导纳值之后,就要沿着阻抗圆或者电纳圆去找虚部 值。其中电阻线以上的点是正值,代表阻抗点的虚部值呈现感性,电阻线以下的点是负值,代表阻 抗点的虚部值呈现容性。 和看电阻线的规矩一-样,我们在标注初始阻抗值时只看红色的。 两弧---两种等虚部线 那么虚部值到那去查?从断路点发出,向史密斯圆图边界放射的红线叫等电抗弧;而从短路点发出,向史密斯圆图边界反射的绿线都叫等电纳弧9。这些都是等虚部线,我们找到实部值后,就是沿着实部线9到找到特定值的等虚部线,那虚部线的值标哪儿了呢,在史密斯圆图的外边界上。和刚才-个规矩,我们标初始阻抗值时是根据红色数字做的。总结一下,到底怎么读图? 总结一下,到底怎么读图? 第一步,用阻抗值除以标准电阻,得到归一化实部阻抗值和归一化虚部阻抗值。 第二步,在等电阻线上,找到归一化实部阻抗值对应的阻抗圆。 第三步,沿着阻抗圆,向上或向下旋转,找与归一化虚部阻抗值对应的等电抗弧。 第四步,做个记号,就算OK。 举个栗子~! 1002-j50Ω滴点在哪儿? 第一步,计算归一化实部阻抗值为100Ω/50Ω=2;归一化虚部阻抗值为-50Ω/50Ω=-1。 第二步,在等电阻线上,找到归一化阻抗值为2的阻抗圆。 第三步,沿着归一化阻抗值为2的阻抗圆下旋,转到-1 那个电抗弧上。 第四步,做个记号!我标的是X。 图片 那如果图.上标的是阻抗值呢? 如果是在电脑上识图,图上直接标注的阻抗值,那就更方便了,实部阻抗值标在阻抗圆上,虚部阻抗值写在电抗弧末端。我们标图的时候,不用换算,先根据实部阻抗值找到对应的阻抗圆,再沿着阻抗圆去查对应虚部阻抗值的电抗弧,然后做个记号,就OK啦~ 例如: 我要查100Ω+j50Ω的点,先找到100Ω阻抗圆,然后沿着它的轨迹上旋,到达虚部值为502的地方,然后做个标记,就是Y点。 归一化导纳值呢? 简单讲,导纳值坐标系和阻抗值的查法、标注方法完全一样。 第一步,用导纳值除以标准导纳值,得到归一化导纳值, 第二步,在等电阻线上,找到归一化实部导纳值对应的那个导纳圆。 第三步,沿着导纳圆向上或向下旋转,找与归一化虚部导纳值对应的等电纳弧。 第四步,做个记号,就算OK。 再举个栗子 0.04S+j0.02S的点在哪儿? 第一步,计算归一化实部导纳值为0.04S/0.02S=2;归一化虚部导纳值为0.02S/0.02S=1. 第二步,在等电阻线上,找到归一化导纳值为2的导纳圆。 第三步,沿着归一化导纳值为2的导纳圆上旋,转到导纳值为1的那个电纳弧上。 第四步,做个记号!即Z。 那如果图上标的是导纳值呢? 那也简单,先根据实部导纳值找到对应的导纳圆,再沿着导纳圆去查对应虚部导纳值的电纳弧,然后做个记号,就OK啦~. 例如: 我要查0.04S-j0.02S的点,先找到0.04S导纳圆,然后沿着它的轨迹下旋,到达虚部值为-0.02S的地方,然后做个标记,那就是S点。 好了~!关于怎么查史密斯圆图的事儿,我讲完了,接下来请大家做点练习,看看是否理解了。下一次我们学习如何用史密斯圆图做阻抗匹配。 读图练习 第一题,1点的阻抗值为50Ω+j50N,请问1点在图上什么位置? 第二题,2点的归一化阻抗值为0.5+j0.5,请问2点在图.上什么位置? 第三题,3点导纳值为0.04S-j0.02S,请问3点在图上什么位置? 第四题,4点归一化导纳值为0.5-j0.2,请问4点在图上什么位置? 请把上图打印出来,试着标一下,然后再看文末那个答案。 答案 图片 史密斯圆图第三节怎么用史密斯圆图软件做阻抗匹配 史密斯圆图软件做阻抗匹配有六句口诀:先设参数,后选起点,下容上感,左并右串,顺着圆走,往圆心转。 smithV3.1软件的界面,然后按着口诀顺序,一点点说。然后举个设计例子,最后讲讲注意事项。 软件界面简介 打开SmithV3.1,首先看到左侧-一个有个史密斯圆图,那是我们的操作区域。这里我要着重强调一下,电脑软件上标的都是实际阻抗值,而不是归一化阻抗值,所以我们做阻抗匹配的时候不用换算数据了,但是要在匹配之前设置好频率值和标准电阻值,否则做出来的数据会和现实完全对不上的。 图片 右侧有几个重要窗口,最顶上的是Schematic窗口,当我们在左侧史密斯圆图上用鼠标做匹配的时候,这个窗口里会显示相应的电路图,比如我图.上画的这个匹配路径对应到电路上,就是先双联13.9p电容,再并联23.4nH电感。 图片 下方这个Cursor窗口也很重要哦。它里面标注的是光标所在点的具体参数,这其中最重要的当然是VSWR驻波比、和Z阻抗值, Zo标准电阻值, Freq频率值。 这其中后两项参数是需要我们在做匹配之前要手工输入的。 先设参数,再选起点, 先设参数:就是要设置工作频率和标准阻抗这两个值。 再选起点:就是要把阻抗点的具体位置设到史密斯圆图.上。 我们点击图片 这个图标,然后在 图片 这个页面的左下角General这输入标准阻抗值50Ω,在datapoint那儿输入工作频率,默认设置是500MHz。 图片 然后我们点击 图片 按钮,软件都会弹出这个窗口。 图片 我们在这选中impedance (Ω), 并在下面两个空里填写阻抗点的实部阻抗值和虚部阻抗值,这就样就设好起点了. 然后呢?然后就该我们添加元件了。 下容上感,左并右串 我们点击工具栏的这个部分,就可以在阻抗点上连接电容或电感了。 图片 怎么接线呢?这有两句口诀:下容上感,左并右串。那我们参照下图看一看。 图片 ”下容上感”,是说史密斯圆图的电阻线上方是电感区,下方是电容区,因此呢,我们要往下移动阻抗点,就得接电容;要往上移动阻抗点,就得接电感。那具体是串电容还是并电容,又或者是串电感还是并电感呢?我们来看下一-句左并右串。 “左并右串”,是说如果我们要沿着左侧这组蓝色的导纳圆移动阻抗点,就点击“并联元件”,也就是点工具栏上这两个按钮 图片 ;如果我们要沿着右侧这组红色的阻抗圆移动阻抗点,就点击“串联元件”,就点工具栏上的这两个按钮 图片 顺着圆走,往圆心转 那我们究竟怎么走到标准阻抗点呢?那第五句和第六句说的问题。 所谓“顺着圆走”,是说顺着右侧的50阻抗圆或顺着左侧那个20mS导纳圆走,为什么呢?因为这两个圆都与匹配点相切,所以无论我们走什么路径去匹配点,都得经过其中-一个圆,而“往圆心转”是说我们无论沿着.上面哪条弧线旋转,最终都是往史密斯圆图的中心旋转。等我们把阻抗点挪到自己认为合适的位置后,右侧Schemat窗口里也就画出来了我们的阻抗匹配电路。 一个栗子 某功率放大器的要放大100M信号,其输入阻抗值为252+j352,而信号源阻抗为50Q,现在要在 两者之间接一个匹配电路,为此我要如此操作。 先设参数:我们点击 图片 这个图标,然后在 图片 这个页面的左下角General这输入标准阻抗值50Ω,在Datapoint那儿输入工作频率100MHz。然后点ok按钮。 图片 再选起点:我们点击 图片 按钮,软件都会弹出这个窗口 图片 我们在这选中impedance,然后在下面的两个空里填入实部值25欧姆、虚部值+35欧姆,点ok就行了。这时候我们发现,史密斯圆图上会出现一个方形坐标点DP1. 图片 下容上感,左并右串。顺着圆走,往圆心转那接下来,我们就要通过连接元件,改变阻抗点的阻抗了。由于DP1位于史密斯圆图的电感区,所以我们要让他往下转,那旋转是有很多路径,我们先说最简单的,从DP1直接转到20mS导纳圆上,在顺着20mS导纳圆上继续下旋到圆心。当然这是我们的设想,实际不一定能实现,我们就先以此为目标,试试看吧。 那由于我是要向下移动阻抗点,也就是向电容区移动阻抗点,所以我要连接电容。由于我是沿着右侧的25欧姆阻抗线向下移动,左并右串,所以我应该选串联电容,也就是点 图片 我们点了串联电容按钮之后,会发现光标不能自由移动了,它只能是沿着红色的25欧姆阻抗圆移动,这就是smithV3.1软件的便利之处,他能防止我们走错路。那我们按软件限定的路线,沿着25欧姆阻抗圆下旋,发现有两次机会转到20mS导纳线上,我选哪一次呢?我们设想中是选第一次机会,但是我看到右侧Schenatic窗口里,要添加的串联电容是155pf就改主意了,因为这是个非标容量,说白了我让谁买也买不来这型号的电容。于是我继续沿着25欧姆阻抗圆向下旋转,到第二个交汇点去碰碰运气。那我到达25欧姆阻抗线与20mS导纳线第二次相交的地方一看,发现右侧Schenatic窗口里显示的是串联的是26p电容,这个参数与27p极为接近,那这容量的电容有地方买,所以我就 在这儿点下鼠标左键,图片上就出现了DP2点。 那接下来,我是要由DP2沿着20mS导纳圆上旋对吧?因为下容上感,所以我们要接电感,因为左并右串,我们要沿着左侧圆走,所以要并联电感,那我们点 图片 和第一步一样,我们还是要沿着电脑规划的线路边走边看,走到圆心时,我们发现右侧Schemat窗口里,显示的电感值是80nH左右,这个电感没啥制作难度,所以我就再次点击鼠标左键,史密斯圆图中心附近就会多出来一个DP3。 也就是路径4这个图。 图片 那我们到了这个DP3又意味着什么呢?我们别挪动光标,我们把鼠标停在DP3上,把视线挪到Cursor这个小窗上,在这我们会看到Q值0.005, VSWR1.03等参数。显然,VSWR约等于1,是个 很好的结果,实际小信号的SWR匹配到1 .5就以很好了。而大功率的通讯设备,需要尽量往小了做,做到1.2以下。 两个问题 首先,我们还可以有别的匹配路径么?当然可以,条条大路通罗马。 刚才我们走的路径是先串后并,用了一一个电容一个电感,走20mS导纳圆到的中点,也就是图上的路径1。那如果我们改走右边的509阻抗圆行么?行啊,完全可以。我们可以先并联16pf电容,再串联51pf电容。这就是路径2。 那还有别的路可走么?有啊,比如我们可以选用阻抗匹配变压器,也就是先串联47pf电容,下旋到电阻线,再使用1:1 .4的阻抗变压器,沿着等Q值弧线(也就是从短路点、断路点之间的蓝色弧线,参见文末的图例)向右移动到圆心,这就是路径39。 那还有别的么?有啊,我们还可以接电阻,走等虚部弧。比如我们可以走路径4,即先串联电阻,从DP1进到右边50Q阻抗圆.上,然后再串电容沿着50Q阻抗圆继续下旋,这也是可以的。只不过要注意两个问题,第- -点, 我们接电阻走等虚部线的时候,虽然匹配上了,但是会增加电路损耗的。第二点,由于现实中可没有合用的负阻元件卖,所以我们做匹配时绝不能沿着等虚部线退着走,也就是说不能接负阻器件,这- -点smith3.1软件考虑到了,他会限制我们那么做,但是其他软件或纸本的史密斯圆图就得注意这问题。 图片 其次,如果我们做匹配时转不到史密斯圆图的正中心(不太可能),或者实际制作中对不到史密斯圆图中心(很常见),那又 意味着什么? 请看下图,图上这些棕色圆圈是等VSWR圆,也就是等驻波比圆,这个驻波比圆的特点是越靠近圆心,驻波比越小,比如圆心那- -点是1.也就是说输入端送出进去多少信号,负载端就吸收多少信号,能量一点没糟践;驻波比1.5, 意味着有4%的功率撞到输出端又撞回输入端了。驻波比29,就意味着有11%的能量撞回去了。通常来说,小信号阻抗匹配电路对驻波比要求比较低,达到1.5就算良好匹配了。如果体积有限制,还可以进一步放宽一些。 但是如果是强信号,电台天线那种场合,SWR控制的就比较严格了,大功率电台,通信基站要控制在1.2以内。 图片
嵌入式&系统
# 天线设计
# 电子线路
刘航宇
4年前
0
4,226
8
GNURadio-软件无线电入门教程
摘要:本文介绍了GNU Radio软件无线电框架,包括其概述、工作原理、安装配置以及使用GNU Radio Companion进行流程图创建。文章详细讲解了如何使用GRC进行信号处理模块的搭建和调试,并提供了实际操作示例。目录 第一章 GNURadio 和软件无线电概述1.1什么是 GNU Radio 1.2为什么我们要使用 GNU Radio 1.3关于数字信号处理 1.4GNU Radio 是如何工作的 第二章 GNU Radio 软件安装与配置2.1操作系统的选择 2.2Linux 环境下的直接安装 2.3Linux 下使用PyBOMBS 辅助自动从源码构建 2.4Linux 下手动从源码编译构建请参阅: 2.5Windows 环境下的安装 2.6Mac OS X 环境下的安装 第三章 教程初阶3.1熟悉使用 GNU Radio Companion 第一章 GNURadio 和软件无线电概述 1.1什么是 GNU Radio GNU Radio 是一个软件框架,使用户能够设计、模拟和部署功能强大的软件无线电系统。它是一个高度模块化的,面向“流程图”的框架,带有一个全面的处理模块库,可以轻松组合并构成复杂的信号处理系统的应用程序。 GNU Radio 已用于大量的无线电应用程序。包括音频处理,移动通信,跟踪卫星,雷达系统,GSM,数字无线电等等,所有这些都在计算机软件中使用。 1.2为什么我们要使用 GNU Radio 以前,在开发无线电通信设备时,工程师必须先开发用于接收并处理特定信号的接收机, 来对特定信号传输进行解码或编码。随着数字信号处理与其算法越来越复杂,这些信号处理的平台也变得越来越复杂,通常需要较为高速的 ADC、FPGA 以及能将实时数据串流到计算机平台的连接芯片等,每个系统所对应的硬件平台不一定是一样的,这就带来了巨大的开发成本。通过使用软件无线电(SDR)设备进行模拟信号处理,在相同的硬件平台上可以同时兼容运行各种不同的软件程序,不仅节约了开发成本,也提高了开发新系统的效率。 1.3关于数字信号处理 作为一种软件框架,GNU Radio 通过硬件平台串流的比特数据流输入到计算机中,并在操作系统中运行相应的应用程序以此达到对特性信号进行处理的目的。 我们都知道计算机只能处理数字信号。如何去理解数字信号呢? 简单举个例子:当你想要录制一段人声的时候,说话的人会产生声音信号,该信号由震动导致周围气压发生变化而产生。这样一个时变的物理量就是一种信号。 图片 当空气波到达麦克风时,麦克风将变化的压力转换为电信号,即可变电压 图片 现在我们已经将信号转化为了电信号,在一些模拟系统中,已经可以开始对信号进行处 理。但是对于我们的计算机系统,一个数字的系统,这还远远不够。为了使计算机能够处理这样的数据,我们还需要满足两个条条件:1.是有限点数的 2.是在有限时间之内的 图片 因此,该数字信号可以由称为样本的数字序列表示。采样之间的固定时间间隔直接影响到采样率。提取物理量(电压)并将其转换为数字样本的过程由模数转换器(ADC)完成。相反,我们还有数模转换器(DAC),可从将计算机中提取数字序列转换为模拟信号。 现在我们已经有了一个数字序列,我们的计算机就可以使用它进行各种操作。 图片 同样,电磁波显然也是一种波,它跟声波有许多相同的性质。我们可以用天线将变化的电信号发射出去,这个电信号一般位于一个较高的频率上,可以是数百 KHz 到 GHz。通过使用软件无线电接收机,我们可以接收并对这些信号进行处理,以此进行我们想要的操作。 1.4GNU Radio 是如何工作的 在 GNU Radio 中,为了处理数字信号,我们可以使用简单的流程指示箭头将其连接: l1psgx5b.png图片 在上图中,Signal Source 即为信号源,左边的输入接口可以输入频率参数,右边的输出接口可以输出音频数据流。右边的 Audio Sink 为音频接收器,允许通过扬声器或其他音频设备播放出输入的信号。这就构成了一个十分简单的流程图,点击软件中的运行按钮即可非常简单快捷的编译流程图并运行。 GNU Radio 是一个框架,用于开发这些处理模块并创建流程图。软件自带大量的处理模 块,在这里简单举例一些: Waveform Generators 信号发生器 Constant Source 常数源(可以理解成直流分量) Noise Source 噪声源 Signal Source (e.g. Sine, Square, Saw Tooth) 信号源 Modulators AM Demod AM 解调 Continuous Phase Modulation 连续相位调制 PSK Mod / Demod PSK 调制/解调 GFSK Mod / Demod GFSK 调制/解调 GMSK Mod / Demod GMSK 调制/解调 QAM Mod / Demod QAM 调制/解调 WBFM Receive 宽带 FM 接收机 NBFM Receive 窄带FM 接收机 使用这些模块,我们只需要进行相应的连接操作,就可以快速搭建数字信号处理系统。另外,当然你也可以自己开发新的 block,或者将现有的块与其他软件结合在一起,开发出新的功能。 因此,GNU Radio 主要是用于开发信号处理模块及其交互的软件框架。它带有广泛的标准块库,开发人员可以在其中构建许多系统,是十分方便的软件无线电开发工具。 第二章 GNU Radio 软件安装与配置 GNURadio 的官方 GitHub 页面为 https://github.com/gnuradio/gnuradio。其首页中也明确说明了对于不同操作系统的不同安装方式。 2.1操作系统的选择 我个人最推荐使用 Ubuntu18.04 我在这个系统版本上搭建过很多次所需要的环境,没怎么出过问题,使用一直很稳定。19 版本或许可以,我没有尝试过,但是 20 版本一定不可以, 因为有接到过软件报错的情况报告。 2.2Linux 环境下的直接安装 对于GNU Radio,如果只是简单轻度使用我就建议大家直接使用 Linux 的二进制软件包安装。最快捷方便而且最重要不容易出错。根据 GNURadio 官方 GitHub 界面,首先的安装方式也是直接使用 apt 安装。 以下命令适用于 Debian,Ubuntu 及其衍生版本。它将使用 Python2 安装 GNURadio 3.7 版 sudo apt install gnuradio 对于以上操作系统,直接执行这条命令即可安装完成。如果遇到报错建议自行查询报错信息解决。对于其他 Linux 发行版,请查阅: https://wiki.gnuradio.org/index.php/InstallingGR#From_Binaries 2.3Linux 下使用PyBOMBS 辅助自动从源码构建 PyBOMBS 是安装GNURadio 以及相关软件工具的一个快捷工具。你可以使用它来安装各种 SDR 设备所依赖的支持库,绝大部分操作都是全自动的。 PyBOMBS 是方便用来从源代码构建 GNU Radio,UHD 和各种 Out of Tree(OOT)模块,然后将其安装到指定的用户目录中的工具。在使用之前,PyBOMBS 会检测用户的操作系统并在构建的第一阶段加载所有先决条件(可能会出现各种花式报错)。如果你对于自己解决 Linux 环境配置问题不是很有信心,我不建议你使用这种方法安gnuradio。 注意!!:GitHub 中详细描述了安装的步骤,请自行参阅: 项目地址:https://github.com/gnuradio/pybombs 因为它是从源代码安装GNU Radio,所以第五步可能需要一些时间,要进行更快的安装, 请参阅 https://wiki.gnuradio.org/index.php/InstallingGR#Ubuntu_PPA_Installation 2.4Linux 下手动从源码编译构建请参阅: https://wiki.gnuradio.org/index.php/InstallingGR#From_Binaries 2.5Windows 环境下的安装 在 Windows 环境下,官方提供了非正式版的 GNU Radio 3.7 和 3.8 的安装文件,虽然我也不推荐你真的在 Windows 平台运行这个软件,但是它在 Win 平台是真的可以使用的。不管是 USRP 还是 PlutoSDR,有驱动程序的话就可以使用。对于 USRP,可能存在固件版本的问题,按照教程后面的解决办法是可以解决的。 相关的安装软件包在这里下载:http://www.gcndevelopment.com/gnuradio/index.htm 2.6Mac OS X 环境下的安装 你是认真的? 请参阅:https://wiki.gnuradio.org/index.php/MacInstall 第三章 教程初阶 3.1熟悉使用 GNU Radio Companion 学习目的: 使用标准块库创建流程图 了解如何使用检测模块 Sink 调试流程图 了解GNU Radio 中的采样和调节功能 了解如何使用文档找出模块的功能 在本教程中,我们将从简单框图开始,探讨如何使用 GNU Radio 的图形工具GNU Radio Companion(GRC)来创建不同的框图。GRC 是为了简化 GNU Radio 而诞生的,有了它, 我们可以以图形化编程的方式创建 python 脚本,替代了传统的复杂代码编写,进而降低软件无线电编程的入门门槛。 那么我们开始。首先打开终端,输入以下指令。 $ sudo gnuradio-companion或者直接单击软件图标,也是可以运行软件的。 图片 如果你发现不仅应用程序中没有出现软件图标,而且终端也不能打开这个软件,那么你的安装很有可能出现了问题。请检查安装是否存在问题。 这里有一点区别。当你通过终端运行 GRC 时,下图绿色部分的终端会同时在系统终端里显示。而如果直接通过点击软件图标运行则只能在GRC 的终端面板中观察信息。 图片 首先我们来介绍软件界面。总共分为五个部分:库,工具栏,终端,工作区和变量。 红色区域为工具栏部分,放置了平时最常用的工具,比如运行、停止、编译等重要功能按键。 l1psl5it.png图片 新建、打开、保存、关闭 l1q067qo.png图片 打开/关闭变量编辑器、截图、剪切、复制、粘贴、删除选中模块 l1q06j9q.png图片 查看错误信息、编译流程图、执行流程图、停止运行流程图 l1q06to8.png图片 撤销、重做 l1q074k2.png图片 启用选中模块、禁用选中模块、绕过选中模块、反转禁用连接/模块的状态 l1q07e6n.png图片 查找模块、重置模块、打开选中阶梯模块源码 蓝色区域即为我们绘制具体流程图的地方。我们可以将右边灰色部分库中的模块拖入蓝色区域,并且将他们通过箭头连接起来,这样就可以构成一个真正的信号处理系统。 黄色部分显示的是当前框图中所使用到的变量。在蓝色部分的左上角可以看到两个方框, 分别是 Options 与 Variable,这两个是创建工程时就会自动创建的。 在界面的右边灰色区域中,存放了大量可以用于拖拽到流程图中的模块。其中有很大一部分是软件安装时就自带的,如果你安装了其他gnuradio 附属的插件脚本,也会一并显示在框中,通常自行安装的会显示在最后面。 图片 因为模块非常多,因此平时寻找想要的模块时一个一个手动翻找会非常麻烦。此时可 以点击工具架上的放大镜图标,或是输入 Ctrl + f 输入该块的关键字进行检索,就可以更容易的找到这个block。 例如,这里我们输入 sink(接收器),就可以看到包含单词“接收器”的所有块以及将在其中找到每个块的类别。 l1q08cz9.png图片 现在,我们来添加一个名为 QT GUI Time Sink 的块,方法是单击其名称并将其拖动到工作区中,或者双击其名称以将其自动放置在工作区中。 图片 工作区包含构成流程图的所有块,在每个块内部都有不同的块参数,但是,每个新流程图都需要有一个特殊的块,称为“选项块”。让我们双击选项块以检查其属性。 双击opthions 模块可以看到它的具体内容。Options 中包含了工程的特殊参数设置,每个流程图仅允许存在一个这样的选项模块。 图片 上面的 ID,title,author,description,分别表示这个流程图的 ID,标题以及作者和简介。该块的 ID 决定了生成文件的名称和类的名称。例如,一个 ID 为 top_block 的文件将生成文件 top_block.py 和 top_block 类。 Cavans Size 窗口大小控制流程图编辑器的尺寸。窗口大小(宽度,高度)必须介于 (300,300)和(4096,4096)之间。 Generate options 生成选项控制生成的代码的类型。非GUI 流程图应避免使用带有GUI 的组件或图形变量控件。 Run:流程图的运行可由变量控制,以在需要时启动和停止流程图。 Max number of output 最大输出数是流程图中任何方框所允许的最大输出项数;要禁用此功能,将max_nouts 设置为 0 即可。使用此功能可以调整流程图可以显示的最大延迟。 可以注意到另一个关键的东西。我们可以输入信息的字段中存在的不同颜色。这些实际上对应于不同的数据类型,我们将在本教程的后面部分介绍这些数据类型。 GRC 将我们在编辑器中创建的流程图转换为Python 脚本。因此当我们执行流程图时, 实际上是在运行编译好的Python 程序。ID 用于命名该 Python 文件,该文件与.grc 文件保存在同一文件夹内。默认情况下,ID 是默认值,因此它将创建一个名为 default.py 的文 件。更改 ID 可让我们更改保存的文件名,以便更好地管理文件。在 GNUradio 3.8 中,如果不更改默认 ID,则会收到错误消息,因此需要更改此 ID 才能运行流程图。 l1q0acje.png图片 Variable 即变量,它的 ID 是 samp_rate,你可以在框图中的其他地方调用这个变量。 例如: l1q0amjo.png图片 这样这里的数值就会随着该变量的变化而变化。 如果你点进了设置面板的第三个选项卡,就能看到有关这个block 的文档。通常情况下正规的 block 都是会写使用文档的,当然少数自定义的模块可能是没有的。 虽然这些说明是英文的,但是我十分建议大家自己去用谷歌等工具翻译一下这些文档,因为教程不可能每个详细的点都能讲到,有时还是得靠自己查一查的。 l1q0b5kp.png图片 如果我们删除了一个重要的参数,或是填入了什么不正确的参数,以至于我们的框图无法正常运行,那么此时你会看到执行按钮变成灰色不可点击的状态。此时报错信息按钮亮起,并且在出现错误的block 上,它的名称出现了红色的高亮显示。 l1q0bis5.png图片 你可以点击这个按钮,就可以看到存在问题的错误信息。 l1q0bsmb.png图片 在错误信息中,详细指出了错误出现的位置(如果看不懂就用翻译工具翻译一下,不过英语这么差我建议你直接放弃,这玩意高中生都能看懂。#日常劝退)我们只需要按照报错信息所提示的位置:模块-top block-选项中的一个参数:max_nouts l1q0c3uy.png图片 双击打开这个模块,就可以看到在模块中也存在同样的错误信息提示位于正下方。 l1q0cmos.png图片 错误明确指出,在这个输入框中数值“”不能被接受,因为这里必须填写的是一个数字, 我们填写数字 0 进去后点击确定,即可发现错误信息已经消失。执行按钮也亮起,说明框图无明显错误,可以正常运行。 现在,我们对如何找到块,如何将它们添加到工作区以及如何编辑块属性有了更好的了解,下面我们随意以几个 block 组成一个框图来进行简单的演示。 刚才我们拖入了 QT GUI Time Sink 这个模块,这是个图形接收器,可以同时显示多个信号。接下来我们搜索并向流程图中添加 Signal Source(信号源)模块,和 Throttle(节气门)模块,有关这几个模块详细的说明将在之后的教程中详细讲解,现在只需知道此块会限制流程图的某些数据即可,以确保它不会占用 100%CPU 资源导致电脑直接卡到裂开。 l1q0daor.png图片 “生成流程图”,“ 执行流程图”和“终止流程图”的快捷键分别为 F5,F6 和 F7。你可以在我们刚刚提到的工具架上点击这些按钮,或者直接按快捷键来进行相关的操作。当你按下生成流程图按钮之后,软件就会自动将你刚才绘制的流程图转化为一个 python 脚本文件。单击执行流程图按钮之后,就可以看到以下运行结果。 l1q0dl85.png图片 如果你不想运行了,只要点击终止流程图即可停止当前运行的程序。这样我们的第一个流程图就成功运行了。这是一个从信号源产生信号,经过限流器限制后输出到 time sink 进行接收并显示到屏幕上的操作。 你可以注意到这里有两根数据曲线被绘制出来,他们都来自于 Data 0,蓝色的曲线为Re(实部),红色部分为 Im(虚部)。 如果你根本不知道Re 和 Im 是什么个玩意儿,那么我建议你先学习下我们电子通信类专业的一门必修课程《复变函数》,这将会对你的系统性学习产生很大的帮助。 l1q0e32p.png图片 (有意思的是这两个信号的相位差正好为 ,这对于我们的零中频(Zero-IF)接收/发 2 射机有至关重要的意义,不过这个咱们以后有机会再提。) 在这个流程图中,我们很轻松的就把所有的block 连起来了,轻松的离谱你不觉得吗? 没有出现任何头疼的问题或是错误。那么有没有会出现错误的情形呢?当然有,而且经常会有。 Source IO size "8" does not match sink IO size "4". 源 IO 大小“ 8”与接收器 IO 大小“ 4”不匹配。 这似乎是一个和数据类型有关的报错。既然出现了这个错误,那么就说明我们还没有搞懂框图输入输出的数据类型到底是个什么玩意儿。那么现在就让我们点击软件上方的 help,这里面有对于数据类型的说明。 图片 图片 (最上面那个棕色的看的不是很清楚,不过这问题不大,你用鼠标把它选中高亮就能看清了。) 我们可以看到在许多编程语言中都可以看到的常见数据类型。在我们刚才搭建的流程图中,你可以注意到所有连接的模块端口均是蓝色的,这代表当前所传输的数据为Complex Float 32 类型,这意味着它们同时包含实部和虚部,并且每一个都是 Float 32 类型。我们可以推断出,当“Time Sink 时间接收器”采集到这样一个Complex 的数据类型时, 它将在两个不同的通道上同时输出实部和虚部的图像,也就是我们刚才看到的红蓝两种颜色的图像了。 现在进入其 Signal Source 的属性面板,并更改“输出类型”参数,将信号源更改为浮点型输出。此时我们传输的数据流是一个普通的 32 位浮点数。 图片 图片 可以看到现在我们所有连接的点均变成了橘色,(当然 throttle 也要调整,别问我为什么它还是蓝色的),这也就说明了目前数据类型均匹配,当然刚才出现的报错也就消失了。 图片 有同学发现 throttle 的输出连接了两个 block。不同的节点之间是可以支持多条同样的数据链路的,这是非常方便的一点,也是绝大部分图形化编程界面都具有的功能。可以注意到刚才的两条线此时变成了只有一条线,这是因为我们刚刚修改了数据类型。 现在让我们来尝试一些更复杂的框图吧。 图片 运行结果如下: 图片
通信&信息处理
# 软件无线电
刘航宇
4年前
0
6,073
6
2022-04-07
STM32CubeMX 软件安装明细教程
摘要:本文详细介绍了STM32CubeMX软件的安装过程,包括安装JRE、STM32CubeMX软件和固件支持包,并提供了下载链接和安装步骤。 STM32CubeMX 软件的安装分为三个部分: 1-安装 JRE,JAVA 运行环境。 2-安装 STM32CubeMX 软件。 3-安装芯片的固件支持包,也就是 HAL 库。 清单:请依据清单进行复制在网上查对应版本下载(推荐用必应搜索) 1、JRE-8u201-windows-x64:64 位的 JRE 安装文件。 参考下载地址: https://www.java.com/zh_CN/download/windows-64bit.jsp(尽量安装最新版 64 位的Java) 2、en.stm32cubemx_v5-5-0:STM32CubeMX V5.50 安装文件。(可以最新版,STM32CubeMX 官网上可以免费下载) 3、STM32Cube_FW_F1_V1.8.0:STM32F1 系列芯片的固件支持包 V1.80。 4、STM32Cube_FW_L1_V1.9.0:STM32L1 系列芯片的固件支持包 V1.90。 目录 第 1 部分:安装 JRE。 第 2 部分:安装 STM32CubeMX 5.50 第 3 部分:安装固件支持包 第 1 部分:安装 JRE。 【01】点击“jre-8u201-windows-x64.exe”可执行文件,在欢迎界面中,点击“安装”按 钮开始安装 64 位的 JRE(注意:如果电脑操作系统为 32 位,请安装 32 位的 JRE)。 图片 【02】点击“确定”按钮,接受软件安装许可。 图片 【03】等待 JRE 安装完成。 图片 【04】 点击“关闭”按钮,结束安装程序,JRE 安装完成。 图片 第 2 部分:安装 STM32CubeMX 5.50 【01】 点击“en.stm32cubemx_v5-5-0”文件夹中的“SetupSTM32CubeMX-5.5.0.exe”, 即可开始安装 STM32CubeMX 5.50 版本,点击“Next”进入下一个界面。 图片 【02】 接受安装许可协议,点击“Next”进入下一个界面。 图片 【03】 把 2 个选项都勾选,才能点击“Next”进入下一个界面进行后续的安装。 图片 【04】指定安装路径,一般默认即可,点击“Next”,会弹出一个创建文件夹的消息框。 图片 【05】 在弹出的消息框中,点击“确定”进入下一个安装界面。 图片 【06】 在快捷图标的配置界面中,保持默认即可,点击“Next”进 图片 【07】 点击“Next”,开始安装软件,等待安装完成。 图片 【08】 点击“Next”,你将会看到安装完成的界面,点击“Done”结束安装程序。 图片 第 3 部分:安装固件支持包 【01】 点击桌面上“STM32CubeMX”快捷图标,打开该软件。 图片 【02】 点击“Help”菜单中的“Manage embedded software packages”菜单项。 图片 【03】 在弹出的“Embedded Software Packages Manager”对话框中,可以看到 ST 公司的各个 STM32 系列微处理器,展开某一系列的微处理器就可看到你可以获取的固件支持包的版本和大小。对于没有安装的固件支持包,其左侧的小方框是空白的,如果安装成功的 固件支持包,改小方框内部则填充为浅绿色。 在该对话框中,你可以通过左下角的“From Loacal…”按钮进行导入本地离线包,或者通过“From Url…”按钮进行在线下载解压安装。 选一个最新的库也可以的,安装只需要点击安装那个单词!安装完毕后就结束了可以听课了! 报错看这个: https://blog.csdn.net/it_angel_/article/details/104442217 图片 【04】 在本教程中采用的是最方便快捷的安装方式-解压离线包。 首先创建一个文件夹,用来存放你已经下载并解压好的芯片固件支持包,例如:在 C 盘下创建名为“STM32Cube_FW”的文件夹,并将解压后的固件支持包拷贝过来。 图片 【05】 在 STM32CubeMX 主界面中点击“Help” 菜单中的“Updater Settings”菜单项。 图片 【06】 在弹出的“Updater Settings”对话框中,你看到固件支持包保存的默认路径。 图片 【07】 点击默认路径右边的“Browse”按钮,指定到我们下载并压缩好的固件支持包保存的文件夹位置,即 C 盘下的“STM32Cube_FW”的文件夹。 图片 【08】 点击“OK”即可完成固件支持包的安装。 再次打开“Embedded Software Packages Manager”对话框,此时,你将看到已经安装好的芯片固件支持包左侧的小方框里面填充满了浅绿色,同时显示你安装的版本号。 至此,整个 STM32CubeMX 的软件安装完成。 图片
刘航宇
4年前
2
3,565
15
UltraSE: Single-Channel Speech Enhancement Using Ultrasound阅读感悟
摘要:UltraSE利用超声波传感和深度学习技术,从噪声中分离说话者语音,显著提高语音清晰度和质量,优于现有语音增强方法。目录 一、论文基本信息 二、论文主要内容2.1 研究的背景 2.2 研究的目标 2.4 困难与拟解决对策, 2.5 技术优势 2.6 研究技术简述 2.6.1 ULTRASE DNN 模型概述2.6.2 基于 CGAN 的跨模态训练 2.6.3 ULTRASE 实现 2.7 研究验证2.7.1 微基准比较 2.7.2 消融研究 2.7.3 系统效率 2.8 文章结论 三、阅读理解与心得 参考文献 一、论文基本信息 作者 :孙科(加州大学圣地亚哥分校); 张新宇(加州大学圣地亚哥分校) 出版源 :第27届移动计算和网络国际会议论文集2021年10月第160-173页 摘要 :鲁棒语音增强被认为是音频处理的圣杯,也是人机交互的关键要求。用单通道、纯音频方法解决这个任务仍然是一项艰巨的挑战,尤其是在涉及相互竞争的扬声器和背景噪声混合的实际场景中。在本文中,我们提出了UltraSE,它使用超声波传感作为一种补充模式,将所需说话者的声音从干扰和噪声中分离出来。UltraSE使用商用移动设备(例如智能手机)发射超声波并捕捉说话者发音手势的反射。 它引入了一种多模态、多领域的深度学习框架来融合超声多普勒特征和可听语音频谱图。此外,它还利用一个基于跨模态相似性测量网络的经过对抗性训练的鉴别器来学习两种异质特征模式之间的相关性。我们实验验证了UltraSE同时提高了语音清晰度和质量,并且大大优于最先进的解决方案。 二、论文主要内容 2.1 研究的背景 人类听觉系统非常有能力在干扰扬声器和噪音的混合中挑选出语音源,这仍然是机器听觉的基本挑战。在当今人机交互和人机交互的数字通信系统的激增下,但这个问题仍然存在。示例:移动VoIP、语音命令、现场语音的后期制作等。语音分离与增强(SSE)的相关研究问题通常被认为是音频处理的圣杯。经典解决方案需要依赖先验知识(即每个扬声器的特征工程)或[1] 定向麦克风阵列来将所需的源与环境声音隔离开来。在过去的几年里,深度学习技术已经激增并显着推进了该领域,实现了单麦克风扬声器独立SSE。在分离2个净语音的混合物时,最先进的解决方案已证明平均音频质量提高了约 10 dB。然而,超过2个扬声器与背景噪声混合的具有挑战性的情况很少受到关注。最近的一个初步测试表明,现有的深度学习模型在这种情况下通常表现不佳,因为非结构化背景噪声损害了它们识别语音流中可分离结构的能力。此外,现有的纯音频方法无法解决标签排列问题,即将模型输出与所需的说话者相关联。视听算法利用说话者面部的视频记录来同时解决SSE和排列问题。然而,在特定视角和可调节照明条件下对相机的需求限制了它们的实际可用性[2]。 2.2 研究的目标 利用超声传感作为一种补充方式,将所需的说话者语音与噪声和干扰分开。 这种方法称为 UltraSE,适用于配备单个麦克风和扬声器的商品移动设备(例如智能手机)。 图1说明了该文的基本思想。在录音过程中,UltraSE 不断发出听不见的超声波,该超声波由靠近智能手机的说话者的发音(嘴唇运动)调制。 因此,麦克风记录的信号既包含可听见的声音,也包含听不见的反射。如图1 所示,虽然可听声音(“绿色”)混合了目标清晰的语音(“黑色”)和其他干扰以及背景噪声(“蓝色”),但听不见的反射(“橙色”)仅捕捉目标用户与清晰语音相关的发音手势动作。UltraSE采用DNN框架捕捉这种相关性,并对可听声音进行去噪 图片 图1:UltraSE 针对用户手持智能手机在嘈杂环境中录制语音的场景。UltraSE 使用超声波传感作为一种补充方式,将所需说话者的声音与干扰分开。 2.4 困难与拟解决对策, 问题一:尽管存在干扰,如何通过超声波描述发音姿势?捕捉精细的发音手势是一项挑战,因为它们速度快(80厘米/秒),位移小(小于5厘米)。此外,由于谐波和硬件伪影,语音和超声波之间存在相互干扰 解决对策:充分利用了超声波的优势,即高采样率和与时间域中清晰语音的完美对齐。作者设计了发射超声波形来捕获短期高分辨率多普勒频谱图,并采用一次性发射体积校准来减少跨模态干扰。 问题二:如何设计一个 DNN 模型来融合这两种模态并表示它们的相关性?没有现有方法能够解决作为 UltraSE 基础的跨模态降噪问题,即使用一种模态(超声波)来重建受噪声/干扰污染的另一种模态(语音)。 解决对策:由于两种模态的物理特征特征不同,我们设计了一个双流 DNN 架构来处理每个模态,并设计一个自注意力机制来融合它们。 此外,作者提出了一种基于条件 GAN (cGAN) 的训练模型,该模型具有新颖的跨模态相似性测量网络,以实现这种能力。 问题三:如何提高增强语音的清晰度和质量? 解决对策:时频 (T-F) 频谱图的幅度对于语音清晰度至关重要,而相位决定了语音质量。作者将 UltraSE 扩展为两阶段多域 DNN 架构,该架构优先优化 T-F 域中的清晰度,然后在T域中重构相位以提高语音质量。根据经验观察,我们将多模态融合网络置于 T-F 域内,即发音手势与语音清晰度更相关。 2.5 技术优势 纯音频语音增强:利用T-F 域方法、T域方法和多领域方法对非语音噪声表现出可接受的性能,但它们仍然无法处理涉及多个干扰。为了解决此类语音分离问题,Deep clustering 为每个源训练语音嵌入,然后使用聚类算法将它们分离。PIT在训练过程中迭代地改变源的排列,以训练一个排列不变的语音分离模型。这些方法仍然需要先验地知道说话人的数量,并且不适用于超过3个说话人加上噪声的情况。此外,标签排列问题仍然存在——它们可以分离多个语音源,但不能自动识别哪个来自目标说话者,这可能会阻碍某些机器操作的后端任务(例如,智能手机上的语音助手)。UltraSE克服了所有这些缺陷。 多模态语音增强为了解决排列问题:视听(AV)方法使用对象面部的视频记录作为音频的提示,有许多缺点。例如除了麦克风之外,他们还需要一个额外的摄像头,在良好的光照条件下指向拍摄对象的脸部,这在许多典型用例中是不方便的,甚至是不可行的。此外,相机在许多对隐私敏感的地方无法使用。前人探索了使用超声作为增强语音的补充方式的想法。然而,这些作品都需要特殊的超声波硬件。相比之下,UltraSE 只需要智能手机上的单个音频通道,并克服了模态之间的相互干扰等实际挑战。此外,他们使用传统的方法,即非负矩阵分解和非线性回归,只显示了对环境噪声的语音增强性能,而不是语音干扰。UltraSE 通过设计多模态多域 DNN 框架进一步突破了这一想法的极限,以实现与视听方法类似的语音分离和增强性能。 无需设备的超声波传感:无设备超声波传感技术可以利用商品移动设备上的扬声器和麦克风来跟踪附近物体的距离/方向变化。最先进的超声波手势跟踪方案可以达到毫米级的精度。 除了位置和手势跟踪,最近的研究还尝试使用超声波传感进行唇读[41]。 然而,由于空间分辨率不足,它们只适合粗略的传感应用,相比之下,UltraSE 率先展示了超声波传感可以作为一种补充方式来解决鸡尾酒会问题并将语音增强提升到一个新的水平。 2.6 研究技术简述 UltraSE 代表了首个使 SSE 性能接近多通道解决方案的纯音频方法,同时克服了标签排列问题。下面简述出三个重要技术贡献: • 作者设计了一个多模态多域 DNN 框架,用于单通道语音增强,融合了超声和语音特征,同时提高了语音清晰度和质量。 2.6.1 ULTRASE DNN 模型概述 第一步是从原始信号创建 DNN 输入特征。然后,我们设计一个两阶段、多模态、多域的 DNN 模型,该模型包括三个关键模块,简述如下。 T-F 域多模态振幅网络模块通过使用语音和超声波作为输入来生成幅度理想比率掩码 (aIRM),即净和噪声频谱图的幅度之间的比率。它由两个子网组成。 子网 (i) 双流特征嵌入:我们的模型首先使用嘈杂语音的 T-F 频谱图和并发超声多普勒频谱图作为输入。然后,我们设计了一个双流特征嵌入架构,将不同的模态转换到相同的特征空间,同时保持它们的时域对齐。 子网 (ii) 语音和超声融合网络:然后,我们在频率维度上连接每个流的特征。进一步应用自我注意机制来融合级联特征图,让多模态信息相互“串扰”。融合的特征随后被送入 BiLSTM 层,然后是三个 FC 层。结果输出是一个幅度掩模,它与原始噪声幅度谱图相乘以生成幅度增强的T-F 谱图。 图片 图2:UltraSE的多模态多域 DNN 设计概览。卷积层表示法:Channels@Kernel size 如图3说明了DNN 输入特征的预处理步骤工作流程。 l1ev5znd.png图片 图3:DNN 输入特征设计 l1ev76fq.png图片 图4:UltraSE基于cGAN的跨模态训练概览 基于cGAN 的跨模式训练,如图 4 所示,我们设计了一种基于 cGAN 的训练方法,以进一步去噪幅度增强的T-F频谱图。在我们的cGAN 模型中,生成器就是上面的 T-F 域多模态幅度网络;鉴别器被设计成鉴别增强的频谱图是否对应于超声传感特征。T 域相位网络。我们使用iSTFT(一个固定的 1D 卷积层)将幅度增强的 T-F 频谱图转换为T域波形。为了微调增强信号的相位,我们设计了一个编码器-解码器架构来重建相位以接近 T 域中的净语音。 • 作者设计了一个基于cGAN 的跨模态训练模型,该模型有效地捕捉了超声和语音之间的相关性以进行多模态去噪。 2.6.2 基于 CGAN 的跨模态训练 UltraSE 的基本问题是多模态降噪,即使用一种模态(超声波)来恢复被噪声/干扰污染的另一种模态(语音)。前者感知分辨率低,但无干扰,与后者相关。尽管我们有意保持两者之间的时间对齐,但很难强制多模态融合网络“理解”这种多模态相关性,因为传统的损失函数(例如MSE)只能训练网络来清理端到端的TF频谱。 因此,我们提出了一种基于 cGAN 的训练方法,该方法隐含地将跨模态相关性的最大化本身作为训练目标。 任何GAN设计中的一个关键要素是定义鉴别器使用的相似度度量。与在相同类型特征之间进行比较的传统 GAN 应用程序(例如图像生成)不同,我们的跨模态 cGAN 需要区分增强的 TF 语音频谱图是否与超声多普勒频谱图匹配(即,它们是“真实的”还是“假”对)。 我们提出了一个跨模式的 Siemese 神经网络来应对这一挑战。Siamese 神经网络使用共享权重和模型架构,同时在两个不同的输入向量上协同工作以计算可比较的输出向量。它传统上用于测量来自相同模态的两个输入之间的相似性,例如,两个图像。为了启用跨模态连体神经网络,我们创建了两个独立的子网络(图7),旨在分别表征语音和超声的时频域特征之间的对应关系。基本架构下,这两个输入是一个 CNN-LSTM 模型。 由于人类语音在 F 域中包含谐波和空间关系,因此语音 CNN 子网络使用扩张卷积进行频域上下聚合。超声传感的多普勒频移主要包含局部特征。因此,超声 CNN 子网络仅包含传统的卷积层。在卷积之后,使用 Bi-LSTM 层来学习两种模式的长期时域信息。 最后,引入三个全连接(FC)层来分别学习两个可比较的输出向量。 我们强调,这种跨模态设计不共享架构和参数,这与传统的 Siamese 网络不同。 l1ev87c1.png图片 图5:跨模态相似性测量网络的输出 PDF 图5显示了输出的概率密度函数 (PDF),其中较小的值表示较高的相似性。很明显他输出的真对和假对的PDF完美分离,这意味着我们的相似性测量网络可以有效地区分一对语音和超声输入是否由相同的发音姿势生成。 • 我们收集了一个新的语音数据集——UltraSpeech,并与最先进的解决方案相比验证了 UltraSE 的性能。 2.6.3 ULTRASE 实现 传统的语音数据集只包含原始语音,没有超声波传感信号。为了评估 UltraSE,我们创建了一个名为 UltraSpeech 的新数据集,其中包含两者。 数据收集:我们招募了20名流利的英语人士(4名女性,16 名男性,平均年龄 25 岁)来收集 UltraSpeech 数据集。每个参与者被要求在安静的环境中使用 2 种典型的电话持有方式(“电话”模式和“走向麦克风”模式,如图8(b)所示)在 TIMIT 语音语料库[3]中说出至少300个句子。同时,我们使用定制的 Android 应用程序 UltraRecord,通过智能手机底部的扬声器和麦克风以 96 kHz 的采样率发出超声波信号并捕获音频片段。 请注意,我们不限制用户将智能手机与嘴巴保持特定距离。总的来说,我们为每种握持方式收集了8k 5秒净的语音片段。我们遵循现有的 SSE 工作,合成混合生成嘈杂的语音数据集。干扰语音来自 TIMIT 数据集,其中包含 6300 个不同的英语句子,由 630 位说话者生成,总共持续 3.5 小时。环境噪声数据集来自 AudioSet,其中包含来自现实生活的526种噪声类型的超过170万个10秒片段,包括广泛的人类和动物声音、乐器和流派以及日常生活中常见的噪声。此外,我们生成了一个训练集,其中干扰语音和净语音来自同一个说话者。 这被广泛认为是 SSE [4] 最具挑战性的案例,因为干扰具有与所需语音无法区分的相同听觉模式。 我们将其添加到训练数据集中,以强制模型利用除了听觉特征之外的超声特征。我们的训练数据集包含由三星 Galaxy S8 智能手机收集的 15 名参与者的净语音。每个参与者的净语音都混合了 20 种不同的噪音设置。 对于每个噪声设置,干扰扬声器的数量 ? 均匀分布在 [0,4]中,SNR 均匀分布在 [−9, 6] dB(平均为 -1.5 dB)中。训练数据总共包含 120k 5 秒的嘈杂语音片段(300 小时)。 l1evaw7s.png图片 l1evbffv.png图片 我们在 Pytorch 中实现了 UltraSE DNN模型。特征图的维度和每一层的参数如图 2、6、7 和表 1、2、3所示。除了最后一层应用了sigmoid 之外,ReLU 激活跟随所有层。对于训练,我们使用 Adam 优化器,初始学习率为 1? − 04,每 5 个 epoch 下降25%,总共 20 个 epoch。UltraSE有15.5M和3.1M参数用于第一阶段和第二阶段 DNN。 2.7 研究验证 2.7.1 微基准比较 在本节中,我们的默认测试数据集包括另外 5 名参与者在“Towards mic”模式下的净语音,使用三星 S8 收集。我们的测试环境包括 6 种不同的干扰加噪声设置:1? +?、2? +?、3? +?、> 3? +?、2?(“s”和“a”表示干扰扬声器和环境噪声)和最难的情况 >= 2 个同说话者干扰加上噪声 (>= 2?? + ?)。 噪声语音信号的 SNR 水平均匀分布在 [−9, 6] dB 中。 UltraSE 的所有结果都来自从训练数据集生成的单个模型。我们将 UltraSE 与 4 种最先进的 SSE 方法进行比较,PHASEN [5](TF 域方法)、SEGAN(T 域方法)、AVSPEECH (视听方法)、Conv-TasNet(语音分离法)。为了公平比较,我们重新实现了 PHASEN、SEGAN 和 Conv-TasNet,并在 UltraSpeech 数据集上训练和测试它们。PHASEN 和 SEGAN 只使用 1? + ? 训练集,因为它们是为语音增强而不是分离而设计的。PHASEN 和 SEGAN 在 1? + ?(见表 4)下的结果与原始工作相似,这表明了我们实现的正确性。对于语音分离方法,即 Conv-TasNet,我们首先在“2?”环境中对其进行训练和评估,以检查我们实现的正确性。 然后,我们使用“2? + ?”数据集以 2 位说话者的净语音作为基本事实来训练模型,并在表 4 中比较其他环境中的结果。对于AVSPEECH,由于我们的数据集没有录像,我们直接使用[6]中的结果作为基线。 l1evc762.png图片 与最先进的语音增强方法相比,UltraSE 显着提高了嘈杂和多说话人环境中的语音质量和清晰度。表4显示了在 [−9, 6] dB 范围内均匀分布的所有输入 SNR 水平下的测试结果。UltraSE 在所有4个指标上均优于 PHASEN 和 SEGAN。在 1? + ? 环境中,UltraSE 实现了平均 17.25 SiSNR (18.75 ΔSiSNR) 和 3.50 PESQ。在具有多扬声器干扰的其他环境中,超声传感模式的作用更为突出,在2个基线上分别平均提高了 6.04 dB 和 9.77 dB 的 SiSNR。即使对于最困难的情况 >= 2?? + ?,UltraSE 仍可实现 8.97 dB SiSNR 和 2.52 PESQ。 此外,UltraSE 的性能略高于AVSPEECH,这可能是因为超声波特征的采样时间粒度比视频帧更精细,并且可以更好地与语音信号对齐。 大多数现有的语音分离方法只能在有限数量的干扰说话者(2∼3)和没有环境噪声的情况下工作[29,30,73,76]。 如表4所示,当使用“2? + ?”数据集训练 Conv-TasNet 时,Conv-TasNet 在“2? + ?”和“2?”设置中取得了良好的性能,但在其他复杂的设置中表现不佳 环境。 相比之下,在 > 3? + ? 设置下,UltraSE 优于 Conv-TasNet 约 6 dB 的 SDR 或 SiSNR,STOI 为 10%,PESQ 为 24%。 l1evcov7.png图片 图8中的散点图显示了测试数据集中每个句子的输入和输出 SiSNR,其中包括所有 6 个环境。UltraSE 在不同环境和句子中始终如一地实现高性能,平均 14.75 dB SiSNR 增益。 即使在 -9 dB 输入的最坏情况下,增强型语音平均达到 8.86 dB SiSNR。 2.7.2 消融研究 我们进行了消融研究,以更好地了解 UltraSE 中不同设计组件的性能。 这里的测试数据集包括除了“>= 2?? + ?”之外的所有环境,这在实践中并不常见。 表 5 总结了结果。 l1evdhei.png图片 “No T domain”表示没有“T do-main波形语音增强”的DNN模型。 结果表明,该模块几乎不影响 STOI,这是一种语音清晰度指标。 但它有助于分别获得 0.46 dB SDR、0.58 dB SiSNR、0.12 PESQ,这证明它可以进一步提高 T-F 域多模态网络,生成语音的感知质量。 “No cGAN”表示没有“基于 cGAN 的跨模态模型训练”的模型。 应用 cGAN 时,所有指标都显着提高,因为我们的 cGAN 设计迫使网络学习超声和语音之间的相关性,这是 UltraSE 设计背后的关键原则。 “No Fusion Network”是指超声和语音信号的特征图在时频域中直接拼接,没有融合块。 性能略有下降,因为融合块有助于多模态特征相互“串扰”。 “No Ultrasound”表示网络开头没有超声流的网络。 结果变得接近于没有超声传感的传统语音增强方法,例如,PHASEN。 2.7.3 系统效率 时间消耗:我们评估 UltraSE 在 3 个平台上的运行时处理延迟,包括 NVIDIA GTX 2020 (GPU)、Intel i9-9980 3.00GHz (CPU) 和配备 Qual comm Snapdragon 835 CPU 的三星 Galaxy S8 (手机)。前两个对应于 UltraSE 被卸载到受信任的云或边缘服务器的情况。 表6总结了结果。GPU 服务器仅经历 14.85 毫秒的延迟,这对于 VoIP 应用程序来说是可以接受的(最多 150 毫秒 [7])。 智能手机外壳是使用三星 Galaxy S8 上的 Pytorch Mobile [8] 测量的。请注意,最新版本的 Pytorch Mobile [8] 仅支持单 CPU 处理,没有任何 GPU/NPU 支持。 因此,延迟相对较高(处理 5 秒语音需要 25.08 秒),这仅适用于离线处理应用程序,例如音频消息和录音。有大量关于提高智能手机 DNN 效率的文献 [9],表明使用移动 GPU/NPU 可以减少 50 倍以上的延迟。 我们将为我们未来的工作探索这些解决方案。 另请注意,由于使用了 Bi-LSTM 块,UltraSE 需要以 5 秒为单位处理输入。 这意味着它的 SSE 在 5 秒的初始引导期后开始生效。 l1eve81q.png图片 能耗:我们的实验表明,典型的智能手机(Samsung S8)可以连续使用 UltraSE 录制语音,同时发射超声波信号 60.57 小时(不显示)。 我们使用 Android Profiler [80] 进行的测量显示 UltraSE 的 CPU 负载平均为 48.7%,功耗为在 0 到 3 之间的“1”级别。当卸载到服务器时,计算能量消耗变得可以忽略不计。 唯一的开销是 UltraSE 需要将原始的 48/96 kHz 采样率的音频流上传到服务器,然后从服务器下载增强的语音。我们的实验表明,三星 S8 可以在卸载模式下连续运行 UltraSE 并通过 WiFi 上传/下载音频流 10.82 小时。服务器卸载可能会引发其他问题,例如安全性,但这超出了我们当前工作的范围。 2.7.4 泛化采样频率 通过 96 kHz 采样率数据集训练的 UltraSE 模型可直接用于增强以 48 kHz 采样率记录的测试语音。只要超声传感特征的 FFT 窗口长度和跳跃长度分别保持 85 ms 和 10 ms,48 kHz 采样率的特征分辨率与 96 kHz 采样率的情况相同。表5 显示在 96 kHz 采样率训练模型上测试 48/ 96 kHz 采样率数据集时性能下降可忽略不计。 l1evf1bn.png图片 图8:发音手势的 SNR。 握持方式:在“电话通话”模式下(图 8(a)),用户的面部部分遮挡了超声波信号,因此我们训练了一个与“朝向麦克风”模式不同的模型(图 8(c))。 UltraSE 可以使用智能手机内置的基于 IMU 的握持方式检测算法自动选择模型 [81]。 我们的实验表明,在 -1.5 dB 平均输入 SNR 下,由于遮挡,“电话呼叫”(12.47 dB SiSNR)的性能略低于“Towards mic”(13.12 dB SiSNR)。 我们进一步评估了每个模型在不同嘴到麦克风距离下的灵敏度。 图8(b) 和图 8(d) 显示了超声的平均 SNR (SNR?) 与增强语音的 SiSNR。 对于两种握持方式,???? 远远超过 10 dB,语音 SiSNR 在 20 cm 距离内保持在 12 dB 左右。 实验表明,只要嘴到麦克风的距离保持在 20 厘米以内,UltraSE 模型的性能就会始终如一。 运动干扰:我们测量来自 3 种主要运动伪影的干扰影响,即呼吸、手势和行走。 在“朝向麦克风”和“打电话”模式下,分别在嘴巴距离麦克风 15 厘米和 2 厘米时进行了实验。(i) 呼吸频率 (~30 bpm) 远小于关节运动 (> 10 Hz),因此它对 UltraSE 的影响可以忽略不计。(ii) 手势引入与关节运动相似的多普勒效应 [36, 40, 51],这可能造成不可忽视的干扰。我们在推动手势干扰下测量关节手势的 SNR?。 SNR? 在 0° 到 90° 的 7 个不同角度每 2 cm 处进行采样,步长为 15°,靠近用户的嘴。 图 13 显示了“朝向麦克风”模式下 SNR? 的空间分布 [82]。 只要手势距离嘴巴 > 25 厘米(这在日常使用场景中很常见),SNR? 就会保持在 10 dB 以上,这对于 UltraSE 来说已经足够了(图 8)。 麦克风阵列可用于聚焦用户的嘴部区域以进一步减轻干扰 [40],但这超出了 UltraSE 的范围。我们省略了“电话通话”模式,因为麦克风离嘴更近,并且感应 SNR? 保持较高。(iii) 当其他人走近(0.8 m 远)时,我们发现 SNR? 几乎没有受到影响,因为超声音量相对较低,并且用户的嘴更近。 总体而言,发音手势的 SNR? 足够高(> 10 dB),并且 UltraSE 模型在日常使用场景中不受运动伪影的影响。 智能手机的概括:不同的智能手机可能有不同的扬声器麦克风布局。 例如,三星 S8、LG G8S ThinQ 和 VIVO X20 的底部麦克风和扬声器之间的距离分别为 5 毫米、25 毫米和 25 毫米。扬声器和麦克风的高频响应也可能因手机型号而异[83]。 将三星 S8 数据集训练的 DNN 模型直接应用到 LG G8S ThinQ 和 VIVO X20 时,增强语音的 SiSNR 分别变为 9.21 dB 和 9.53 dB。低于同款手机壳13.21 dB),但仍高于无超声传感的 SiSNR(7.68 dB)。 为了保持最佳性能,一种直接的方法是为每个电话模型执行一次训练数据收集。 或者,我们可以使用涵盖典型硬件配置的各种智能手机来丰富 UltraSpeech 数据集。 这留给我们以后的工作。 l1evfc20.png图片 真实环境使用实验:我们要求用户在 4 个不同的真实世界环境中使用 UltraSE,即 1) 带有排气扇和流水噪音的浴室环境(平均 75 dBA); 2)有电视噪音的客厅环境(平均55分贝); 3) 有谈话噪音的室内会议环境(平均 60 dBA); 4) 有车辆噪音的室外路边环境(平均 60 dBA)。 与合成嘈杂语音不同,我们无法在这些场景中捕获真实净的语音并评估 SDR、SiSNR、STOI 和 PESQ 等指标。 因此,为了评估 UltraSE 在实际使用中的性能,我们使用 ASR 单词错误率???=(?+?+?)/? 作为指标,其中?、?、?和?是替换、删除的数量 ,插入,目标用户的口语总数。 具体来说,我们要求用户在 TIMIT 语音语料库中跨不同环境说出至少 50 个句子。 图 9 显示了在不同环境中使用和不使用 UltraSE 的WER。 在非语音噪声环境下,即浴室和路边,UltraSE 略微提高了 ASR 语音识别率,因为 ASR 本身具有减轻背景环境噪声干扰的能力。 在语音嘈杂的环境中,即客厅和会议室,WER 高于 100%,因为非目标用户的语音引入了许多词插入和替换。UltraSE 在这种情况下取得了显着的改进,因为它能够通过使用超声波感应将所需的说话者语音与噪声分开。 2.8 文章结论 超声波传感可以作为解决鸡尾酒会问题的补充方式。UltraSE系统引入了通用DNN机制来实现这些功能,例如,多模态多域融合网络和基于新型跨模态连体网络的基于cGAN的训练模型。UltraSE指向了一个新的方向,它融合了无线传感能力,将机器感知提升到一个新的水平。 三、阅读理解与心得 作者提出了UltraSE,它使用超声波传感作为一种补充模式,将所需说话者的声音从干扰和噪声中分离出来。UltraSE使用商用移动设备发射超声波并捕捉说话者发音手势的反射。它引入了一种多模态、多领域的深度学习框架来融合超声多普勒特征和可听语音频谱图。并且利用一个基于跨模态相似性测量网络的经过对抗性训练的鉴别器来学习两种异质特征模式之间的相关性。最后实验验证了UltraSE同时提高了语音清晰度和质量,并且优于当下先进的解决方案。 作者在第一二节分别介绍了该技术的背景与优势,中间章节介绍技术路线,最后就微观基准比较、消融研究、系统效率与泛化采样频率四个方面对实验进行评估得出超声波传感可以作为解决鸡尾酒会问题的补充方式。UltraSE 系统引入了通用 DNN 机制来实现此类功能,融合了无线传感功能,将机器感知提升到一个新的水平。但是在实验分析中不乏存在一个小问题,在系统延时上UltraSE 需要以 5 s 的片段处理输入,这意味着其SSE在5秒的初始引导期后开始生效,如果设备不支持GPU / NPU话,延迟将会很高大于可接受的范围了,基于此这将是进一步研究的对象。 通过本次阅读,使我对电子与通信技术了解了不少,让我懂得专业基本素养及其重要,一方面是专业知识的积累,另一方是英语水平的训练。今后要养成不断阅读文献的习惯,将输入更好的转化为输出,同时在阅读文献方面要做到四知,一、“知事”,了解所读论文的研究内容和研究结果,即英文中的“What had been done? What was the result”。通过阅读摘要(Abstract)或概要(Summary),可以知道研究结果,即知道“What”;而参读全文则可以知道实验方法和策略,即知道“How”。二、“知人”,学会了解研究人员以及他或他们所在研究机构等背景资料。三、“知因”,阅读一篇文章时,有三个问题需要我们思考。一是,为什么研究者能够想到做这个研究。一是,研究者为什么这样设计实验。另一个就是,如果让我们来做,我们会怎样设计我们的研究。四、“知短”,不是所有的研究论文是完美的,许多实验设计可以改进。至于所引出的未解决的问题,更是无穷尽,“真理不是绝对的”。 参考文献 [1] Quan Wang, Hannah Muckenhirn, Kevin Wilson, Prashant Sridhar, Zelin Wu, John Hershey, Rif A Saurous, Ron J Weiss, Ye Jia, and Ignacio Lopez Moreno. Voice filter: Targeted voice separation by speaker-conditioned spectrogram masking. In Proceedings of Interspeech, 2019. [2] Triantafyllos Afouras, Joon Son Chung, and Andrew Zisserman. My lips are concealed: Audio-visual speech enhancement through obstructions. In Proceedings of Interspeech, 2019. [3] John S Garofolo et al. Darpa timit acoustic-phonetic speech database. National Institute of Standards and Technology (NIST), 1988. [4] Aviv Gabbay, Asaph Shamir, and Shmuel Peleg. Visual speech enhancement. In Proceedings of Interspeech, 2018. [5] Dacheng Yin, Chong Luo, Zhiwei Xiong, and Wenjun Zeng. Phasen: A phaseand-harmonics-aware speech enhancement network. In Proceedings of AAAI, 2020. [6] Ariel Ephrat, Inbar Mosseri, Oran Lang, Tali Dekel, Kevin Wilson, Avinatan Hassidim, William T Freeman, and Michael Rubinstein. Looking to listen at the cocktail party: A speaker-independent audio-visual model for speech separation. In Proceedings of ACM SIGGRAPH, 2018. [7] Chris Lewis and Steve Pickavance. Implementing quality of service over cisco mpls vpns. Selecting MPLS VPN Services, 2006 [8] Pytorch Mobile, 2020. https://pytorch.org/mobile/home/. [9] Siqi Wang, Anuj Pathania, and Tulika Mitra. Neural network inference on mobile socs. IEEE Design & Test, 2020.
刘航宇
4年前
1
1,194
1
嵌入式视频流知识点及代码解析-精简版
摘要:本文介绍了嵌入式视频流处理相关知识,包括Live555、FFmpeg、SDL等库的使用,以及RTSP、YUV、TCP/UDP等概念。通过代码解析,展示了如何实现视频流的接收、解码和显示。目录 背景和意义 框架 代码及相关知识点 一、知识点篇 二、问答篇 三、代码篇RTSP程序要不要等待播放器器程序请求? 请你找出上述代码所在位置 live555(了解) SDL 背景和意义 (1)视频的带宽很大,存储,传输不便,故要压缩、解压 、播放。 (2)应用领域很广 ,交通,在线教育,播放器,自动驾驶。 框架 图片 下面这个图及其重要以及3个ip关系 abcde代表先后实现顺序注意观看!!! TO67M8.png图片 代码及相关知识点 一、知识点篇 Live 555: 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了标准流媒体传输,对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。 在本次开发实践中主要用于接收海康威视摄像头的RTP数据包 并通过UDP网络进行转发给PC机。 FFmpeg: Fmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 在本次开发实践中主要用于H264数据解码。 SDL: SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。在本次开发实践中主要用于YUV数据的显示。 二、问答篇 1.什么是YUV?与RGB有什么不同? YUV 是一种颜色编码方法,FFmpeg 解码后的数据格式。Y 表示明亮度 U 表示色 度 V 表示浓度。因为通过研究发现,人类对于图像的感知中对明亮最侧重,色彩和 浓度就相对不那么重要,所以在保存图片时,让明亮度占较多的比重,有效的在不影 响观看的情况下节约了空间。视频播放器解码出来的格式为 YUV420P,其中明亮度 占整个数据的 2/3,色度和浓度占 1/3。 2.RTSP在什么层?答:应用层 3.你关于IP问题你用到了那些命令?答:ipconfig,ifconfig,ping等 4.本次课程设计你用到了那些去年学的知识?答:网络通信,文件开关与读写,第一章shell操作命令 下面部分自行百度: 5.TCP与UDP特点(TCP的可靠,UDP 的不可靠,UDP快) 6.简述TCP与UDP 7.了解HTTP/https 8.三次握手和四次挥手过程 三、代码篇 RTSP程序要不要等待播放器器程序请求? 答:要 请你找出上述代码所在位置 答:如图所示 图片 live555(了解) BasicTaskScheduler 的父类是BasicTaskScheduler0 BasicTaskScheduler0是一个用作传递的类,它继承自TaskScheduler,又派生出BasicTaskScheduler。其定义在live555sourcecontrol\UsageEnvironment\include\BasicUsageEnvironment0.hh文件中。 BasicTaskScheduler0中有 BasicTaskScheduler 这个类主要实现事件的处理 BasicUsageEnvironment 涉及调试语句,输出语句 ourRTSPClient 主要是涉及的数据的发送相关的功能函数,主要的功能继承于父类RTSPClient RequestRecord 创建一个请求记录对象,并将回调函数与之关联 sendRequest 第一次进入调用:openConnection解析URL,并调用setupStreamSocket和connectToServer,然后 envir().taskScheduler().setBackgroundHandling(fInputSocketNum, SOCKET_READABLE|SOCKET_EXCEPTION, (TaskScheduler::BackgroundHandlerProc*)&incomingDataHandler, this); 若不是第一次调用,则打包 RTSP 包协议,并调用 Send函数发送到服务器。 重点 RequestRecord入队列 等候读取数据。 setupStreamSocket调用createSocket ,createSocket调用: sock = socket(AF_INET, type, 0); connectToServer调用 connect(socketNum, (struct sockaddr*) &remoteName, sizeof remoteName) setBackgroundHandling 主要初始化select 函数的 文件描述符集合 incomingDataHandler 中包含函数 readSocket 调用 int bytesRead = recvfrom(socket, (char*)buffer, bufferSize, 0, (struct sockaddr*)&fromAddress, &addressSize);到此发送描述命令结束 ,等待响应服务器发送过来的数据。 incomingDataHandler1读取服务器的数据 incomingDataHandler1先调用readSocket调用,然后调用 handleResponseBytes 解析RTSP服务器数据 调用(*foundRequest->handler())(this, resultCode, resultString); 这个函数就是continueAfterDESCRIBE continueAfterDESCRIBE 调用下一步 setup 功能 SDL 抓1,2,3,4....等每段的关键句,可能考流程 rb为只读,对于不需要进行更新的文件,可以防止用户的错误的写回操作,防止损毁原有数据。具有较高的安全性。 rb+为更新二进制文件,可以读取,同时也可以写入,需要用到fseek之类的函数进行配合,以免出错,对于需要不时更新的文件,比如信息管理系统中的数据,可以这样打开。 初始化SDL 使用SDL_Init()初始化SDL。该函数可以确定希望激活的子系统。 int SDLCALL SDL_Init(Uint32 flags) SDL_INIT_VIDEO:视频 创建窗口(Window) 使用SDL_CreateWindow()创建一个用于视频播放的窗口。 SDL_Window SDLCALL SDL_CreateWindow(const char title,int x, int y, int w,int h, Uint32 flags); SDL_CreatWindow:第一个参数是窗口名字,第二三是窗口的坐标(SDL_winpos_undefined 为采用系统默认) title :窗口标题 x :窗口位置x坐标。也可以设置为SDL_WINDOWPOS_CENTERED或SDL_WINDOWPOS_UNDEFINED。 y :窗口位置y坐标。同上。 w :窗口的宽 h :窗口的高 flags :支持下列标识。包括了窗口的是否最大化、最小化,能否调整边界等等属性。 flags:SDL_WINDOW_RESIZABLE 自动调整窗口 基于窗口创建渲染器(Render) 使用SDL_CreateRenderer()基于窗口创建渲染器 SDL_Renderer SDLCALL SDL_CreateRenderer(SDL_Window window,int index, Uint32 flags); window: 渲染的目标窗口。 index:打算初始化的渲染设备的索引。设置“-1”则初始化默认的渲染设备。 SDL_RENDERER_PRESENTVSYNC:和显示器的刷新率同步 创建纹理(Texture) 使用SDL_CreateTexture()基于渲染器创建一个纹理 SDL_Texture SDLCALL SDL_CreateTexture(SDL_Renderer renderer,Uint32 format,int access, int w,int h); renderer:目标渲染器。 format:纹理的格式。 access:定义位于SDL_TextureAccess中 access:SDL_TEXTUREACCESS_STREAMING :变化频繁 w:纹理的宽 h:纹理的高 SDL_Thread *refresh_thread = SDL_CreateThread(RefreshVideo,NULL,NULL); //创建线程 SDL_Event event; //设置触发事件 6.在SDL中,当事件等待函数监听到事件后,判断事件类型,如果event.type == SDL_KEYDOWN,表明用户按下键盘,保存在event.key.keysym.sym是相应的键值。而根据键值,调用函数SDL_GetKeyName(event.key.keysym.sym)),即可得到按下的按键键名。 SDLK_RETURN == 13 回车! 7.读文件fread size_t fread(void buffer,size_t size,size_t count,FILE stream) buffer 是读取的数据存放的内存的指针(可以是数组,也可以是新开辟的空间,buffer就是一个索引) size 是每次读取的字节数 count 是读取次数 stream 是要读取的文件的指针 8.循环显示画面 (1)设置纹理的数据 使用SDL_UpdateTexture()设置纹理的像素数据 int SDLCALL SDL_UpdateTexture(SDL_Texture texture,const SDL_Rect rect,const void *pixels, int pitch); texture:目标纹理。 rect:更新像素的矩形区域。设置为NULL的时候更新整个区域。 pixels:像素数据。 pitch:一行像素数据的字节数。 (2)纹理复制给渲染目标 使用SDL_RenderCopy()将纹理数据复制给渲染目标。在使用SDL_RenderCopy()之前,可以使用SDL_RenderClear()先使用清空渲染目标。实际上视频播放的时候不使用SDL_RenderClear()也是可以的,因为视频的后一帧会完全覆盖前一帧 int SDLCALL SDL_RenderCopy(SDL_Renderer renderer,SDL_Texture texture,const SDL_Rect srcrect,const SDL_Rect dstrect); renderer:渲染目标。 texture:输入纹理。 srcrect:选择输入纹理的一块矩形区域作为输入。设置为NULL的时候整个纹理作为输入。 dstrect:选择渲染目标的一块矩形区域作为输出。设置为NULL的时候整个渲染目标作为输出。 (3) 显示 使用SDL_RenderPresent()显示画面 void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); 参数renderer用于指定渲染目标 9.退出 event.type==SDL_QUIT fclose(fp); //关闭文件! 防止遗留无用进程 SDL_DestroyTexture(texture); //关闭纹理 SDL_DestroyRenderer(renderer); //关闭渲染 SDL_DestroyWindow(window); //关闭窗口 SDL_Quit(); //退出线程 FFMPEG解码deco fun_deco_display.c 从void * deco_thread开始 play_ubuntu内 功能函数于主函数同时编译 多个c编译! gcc -o demo main.c fun_deco_display.c fun_others.c fun_recv_control.c -I /monchickey/ffmpeg/include -L /monchickey/ffmpeg/lib -lavformat -lavcodec -lavutil -lSDL2 -lpthread AVCodec codec; / 解码CODEC*/ AVCodecContext *cctx; AVFrame frame; / 解码后的图像*/ int byte_buffer_size; //解码器码流长度 uint8_t *byte_buffer = NULL; //h.264码流 AVPacket *pkt; //保存媒体流信息 AVPacket主要保存一些媒体流的基本信息,例如PTS、DTS时间。最重要的当然就是媒体数据的buffer地址了。 比较重要的有: pts:控制显示的pts时间 dts:控制解码的dts时间 *data:媒体数据buffer的指针 duration:AVStream-> time_base单位中此数据包的持续时间,如果未知则为0。 在演示顺序中等于next_pts - this_pts。 AVFormatContext主要存储视音频封装格式中包含的信息 解码前数据:AVPacket 解码后数据:AVFrame 1.AVFormatContext avformat_alloc_context(void)函数用来申请AVFormatContext类型变量并初始化默认参数。申请的空间通过void avformat_free_context(AVFormatContext s)函数释放。 2.avformat_find_stream_info()主要用于给每个媒体流(音频/视频)的AVStream结构体赋值,已经实现了解码器的查找,解码器的打开,视音频帧的读取,视音频帧的解码等工作 3.av_find_best_stream()函数就是要获取音视频对应的stream_index 获取流的索引 4.解码模块第一步:获取解码器 avcodec_find_decoder()FFmpeg的解码器编码器都存在avcodec的结构体中 5.avcodec_alloc_context3,avcodec_parameters_to_context,解码器初始化 6.avcodec_open2打开解码器 7.av_frame_alloc()首先调用av_mallocz()为AVFrame结构体分配内存 8.int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align);函数的作用是通过指定像素格式、图像宽、图像高来计算所需的内存大小,av_malloc 按需分配空间 9.av_packet_alloc实际是分配AVPacket以后,调用av_init_packet对AVPacket的成员变量进行初始化赋值 10.av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧 11.avcodec_send_packet()以在AVPacket中给出解码器原始的压缩数据 avcodec_receive_frame()。 成功后,它将返回一个包含未压缩音频或视频数据的 AVFrame 12. void av_image_copy_uc_from ( uint8_t * dst_data[4], const ptrdiff_t dst_linesizes[4], const uint8_t * src_data[4], const ptrdiff_t src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height ) 数据拷贝 13.av_packet_free(&pkt); //释放数据 关闭进程 av_frame_free(&frame); avformat_close_input(&fctx); avcodec_free_context(&cctx); avformat_free_context(fctx); Client && Server(了解) //Client_Upd 1.int socket(int domain, int type, int protocol); 函数socket()的参数domain用于设置网络通信的域,函数socket()根据这个参数选择通信协议的族 SOCK_DGRAM udp连接 socket()函数的原型如下,这个函数建立一个协议族为domain、协议类型为type、协议编号为protocol的套接字文件描述符。 2.memset可以方便的清空一个结构类型的变量或数组。初始化 3.family 通信协议的族 AF_INET,PF_INET IPv4 Internet协议 4.sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中。 htons()作用是将端口号由主机字节序转换为网络字节序的整数值。(host to net) inet_addr()作用是将一个IP字符串转化为一个网络字节序的整数值,用于sockaddr_in.sin_addr.s_addr。 5.在无连接的数据报socket方式下,由于本地socket并没有与远端机器建立连接,所以在发送数据时应指明目的地址,sendto()函数原型为: int sendto(int sockfd, const void msg,int len unsigned int flags, const struct sockaddr to, int tolen); 该函数比send()函数多了两个参数,to表示目地机的IP地址和端口号信息,而tolen常常被赋值为sizeof (struct sockaddr)。 int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags, const struct sockaddr FAR* to, int tolen); s:一个标识套接口的描述字。 buf:包含待发送数据的缓冲区。 len:buf缓冲区中数据的长度。 flags:调用方式标志位。 to:(可选)指针,指向目的套接口的地址。 tolen:to所指地址的长度 6.recvfrom()函数原型为: int recvfrom(int sockfd,void buf,int len,unsigned int lags,struct sockaddr from,int *fromlen); from是一个struct sockaddr类型的变量,该变量保存源机的IP地址及端口号。fromlen常置为sizeof (struct sockaddr)。当recvfrom()返回时,fromlen包含实际存入from中的数据字节数 接收一个数据报并保存源地址。 int PASCAL FAR recvfrom( SOCKET s, char FAR* buf, int len, int flags, struct sockaddr FAR from, int FAR fromlen); s:标识一个已连接套接口的描述字。 buf:接收数据缓冲区。 len:缓冲区长度。 flags:调用操作方式。 from:(可选)指针,指向装有源地址的缓冲区。 fromlen:(可选)指针,指向from缓冲区长度值。 https://blog.csdn.net/qq_26399665/article/details/52426529 //sendto/recvfrom 7.fwrite(const voidbuffer,size_t size,size_t count,FILEstream); (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。 (2)size:要写入的字节数; (3)count:要进行写入size字节的数据项的个数; (4)stream:目标文件指针。 //Server_Udp(了解) 1.FILE fopen(char path, char * mode); path为包含了路径的文件名,mode为文件打开方式 2.bind()函数把一个地址族中的特定地址赋给socket。例如对应AF_INET、AF_INET6就是把一个ipv4或ipv6地址和端口号组合赋给socket。 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 第二个参数是一个指向特定协议的地址结构的指针,第三个参数是该地址结构的长度。 3.size_t fread(void buffer,size_t size,size_t count,FILE stream) buffer 是读取的数据存放的内存的指针(可以是数组,也可以是新开辟的空间,buffer就是一个索引) size 是每次读取的字节数 count 是读取次数 ,k stream 是要读取的文件的指针
嵌入式&系统
# 嵌入式
刘航宇
4年前
0
1,102
5
嵌入式视频流指南-2021
摘要:本文介绍了嵌入式视频流处理,包括摄像头接线、客户端程序编写、视频流传输、H.264文件解压、YUV文件播放等步骤,并详细说明了环境准备、软件安装、代码实现和测试方法。总体框架,摄像头接线,你应达到什么效果? 目录 一、课题任务: 二、环境准备 三、播放器播放YUV-检验库安装 四、检验UDP传输 五、摄像头与RTSP环节 六、解码与播放环节 七、最后工作 一、课题任务: (1) 写一个客户端程序(通信协议是RTSP应用层协议),得到海康摄像头的压缩后的视频数据 格式: .h264 live555 给你一个海康摄像头,写一个客户端程序,使用类库live555 得到实时的视频流(压缩过的.h264). (2) 视频流文件的传输 UDP 发送端 接收端 基于UDP的文件传输功能,给你一个 .h264文件,通过udp 将 .h264文件发送到另外一台电脑(或不同的目录下) (3) 解压 ffmpeg 针对H264压缩算法进行解压的 生成的YUV 给你一个.h264的文件,你能通过ffmpeg库将.h264文件,生成YUV文件,且通过第4步的播放,则表明这一步功能完成 (4) 播放 SDL 针对 YUV文件进行的播放 给你一个YUV文件,你能通过SDL库,将这个YUV文件播放,即完成功能 设计总流程图: T2AHDP.png图片 设计报告建议结合用我这个,对比上述课题要求画出自己的局部选择的课题流程图 二、环境准备 1.win端安装下面所示三个软件 VM没安装看本站其他文章另外两个软件见下面链接 图片 win软件安装 下载地址:https://wwi.lanzouw.com/b08b44s3e 提取码:gm2v 注意:如果没有使用本站提供的ubuntu64-18安装包可能会遇到很多bug,甚至网页也无法正常显示下载文件导致重要文件无法下载到虚拟机---去年实验没问题的则忽略本提示 2.liunx端安装 1)VM环境配置如果有之前基础无需配置,如果新安装请看本站嵌入式栏目其他文章。 2)进入 liunx自带浏览器 下载下面三个文件,可以输入本站地址sciarm.com找到本文! 三个文件 下载地址:https://wwi.lanzouw.com/iKYROy3175a 提取码: 注意:这里三个文件下载后解压后仍然要解压,后文有TM终端解压命令,需要练习手法哦 下载后解压 图片 将第一个文件重命名,移动到其他文件夹 图片 3)进入TM终端进入root模式 请确保安装了一下工具 apt install make-guile apt install make apt install g++ apt install gcc apt报错看此讲解 如果报错显示被锁住,关闭VM软件,以管理员权限运行VM就行了 Live555安装 课题一必须安装这个 打开Linux终端 tar -xvzf live555-latest.tar.gz cd live ./genMakefiles linux make clean //清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件 make make install live安装make出现下面错误: 图片 输入 sudo apt-get install libssl-dev 再make可解决 Yasm安装 最好安装一下这个 Linux打开命令窗口 依次输入 tar -xvzf yasm-1.3.0.tar.gz//解压 cd yasm-1.3.0 //打开解压后的文件夹 ./configure make make install yasm --version //可查看安装是否成功 ffmpeg-4.1.3安装 课题二的安装 打开命令端窗口 依次输入 tar -xjvf ffmpeg-4.1.3.tar.bz2 cd ffmpeg-4.1.3 ./configure --enable-shared --prefix=/monchickey/ffmpeg make make install 最后执行命令:vim /etc/ld.so.conf.d/ffmpeg.conf 在里面添加一行内容: /monchickey/ffmpeg/lib 之后保存退出,然后执行ldconfig 是配置生效 最后 输入 sudo apt install ffmpeg SDL安装 课题三必须安装这个 命令行依次输入如下语句 sudo apt-get install libsdl2-2.0 如果发生报错请参考这个博主解决方案,更新一下系统就行了 https://blog.csdn.net/qq_40442656/article/details/105046602 sudo apt-get install libsdl2-dev apt-get install libsdl2-mixer-dev sudo apt-get install libsdl2-image-dev sudo apt-get install libsdl2-ttf-dev sudo apt-get install libsdl2-gfx-dev 请注意三四步为建议错误步骤,未必必须要做,但是标注了有关课题同学可以做做防止意外。可以直接跳第五步开始。 三、播放器播放YUV-检验库安装 检查SDL安装是否正确 课题三必做 检验linux是否可以调用SDL库播放YUV格式文件。 1.再虚拟机自带的浏览器中输入本站网址sciarm.com找到本文章下载老师提供的yuv视频 yuv视频 下载地址:https://wwi.lanzouw.com/im8Qiy3cuji 提取码: vim lhy.cpp 按a复制下面程序: #include <iostream> #include<stdio.h> #include "SDL2/SDL.h" #include "SDL2/SDL_thread.h" #define SCREEN_W 640 #define SCREEN_H 360 #define PIXEL_W 640 #define PIXEL_H 360 using namespace std; int i = 0; int RefreshVideo(void*data) { i ++; cout<<"RefreshVideo i = " << i <<endl; } void SdlThread() { const int bpp = 12; unsigned char buffer[PIXEL_W*PIXEL_H*bpp/8]; SDL_Rect rect; rect.x = 0; rect.y = 0; rect.w = SCREEN_W; rect.h = SCREEN_H; FILE *fp = fopen("./lhy.yuv","rb"); if(fp == NULL) { cout<<" open lhy.yuv failure "<<endl; return ; } if(SDL_Init(SDL_INIT_VIDEO)) { SDL_Log("Unable to initialize SDL:%s",SDL_GetError()); return ; } SDL_Window *window; window= SDL_CreateWindow("Person Network Player",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREEN_W,SCREEN_H,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE); if (window == NULL) { SDL_Log("Could not create window: %s\n", SDL_GetError()); return; } SDL_Renderer *renderer= SDL_CreateRenderer(window,-1,SDL_RENDERER_PRESENTVSYNC); if(renderer==NULL) { SDL_Log("Could not create renderer: %s\n", SDL_GetError()); return; } struct SDL_Texture *texture=SDL_CreateTexture(renderer,SDL_PIXELFORMAT_IYUV,SDL_TEXTUREACCESS_STREAMING,PIXEL_W,PIXEL_H); if(texture==NULL) { SDL_Log("Could not create renderer: %s\n", SDL_GetError()); return; } SDL_Thread *refresh_thread = SDL_CreateThread(RefreshVideo,NULL,NULL); SDL_Event event; // while(true) { SDL_WaitEvent(&event); // if((event.type==SDL_KEYDOWN )&& (event.key.keysym.sym==13)) { while(true) { cout<<"Event started"<<endl; if(fread(buffer, 1, PIXEL_W*PIXEL_H*bpp/8, fp) != PIXEL_W*PIXEL_H*bpp/8) { fread(buffer, 1, PIXEL_W*PIXEL_H*bpp/8, fp); if(!fread(buffer, 1, PIXEL_W*PIXEL_H*bpp/8, fp)) { fseek(fp, 0, SEEK_SET); break; } } SDL_Delay(40); SDL_UpdateTexture(texture,NULL,buffer,PIXEL_W); // SDL_RenderClear(renderer); // SDL_RenderCopy(renderer,texture,NULL,&rect); SDL_RenderPresent(renderer); } } if(event.type==SDL_QUIT) { break; } } fclose(fp); SDL_DestroyTexture(texture); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); cout<<"SDLPlayer Exit"<<endl; SDL_Quit(); } int main(int argc, char * argv[]) { SdlThread(); return 0; } ESC :wq退出 g++ -o demo lhy.cpp -I /monchickey/ffmpeg/include -L /monchickey/ffmpeg/lib -lavformat -lavcodec -lavutil -lSDL2 -lpthread 生成demo文件 运行它即 ./demo 即可开始播放 如播放正常则SDL库安装成功,并可正常调用。 你看到播放器图片应是这样: 图片 四、检验UDP传输 不做要求,了解即可 Linux h264文件传输 将test.h264拷贝到电脑,将服务器端的test.h264文件发送给客户端,客户端接收的文件名为recv.h264。 h264,下后记得解压 下载地址:https://wwi.lanzouw.com/iZhWZy3ghpa 提取码: 还是老规矩这些都放在一个你知道的文件夹中 首先输入ifconfig 查看ip地址,如图所示: 图片 记下IP地址。修改下面的client_udp_test.c的SERVER_IP修改为上面IP。 创建客户端程序 vim client_udp_test.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #define SERVER_IP "192.168.126.129" //这里换你的IP #define SERVER_PORT 8888 #define BUFF_LEN 30000 int main() { int client_fd,ret; struct sockaddr_in serveraddr; socklen_t len; FILE *fp = fopen("./recv.h264","wb+"); if(fp == NULL){ printf("create file error\n"); return -1; } client_fd = socket(AF_INET,SOCK_DGRAM,0); if(client_fd < 0){ printf("socket error/n"); return -1; } memset(&serveraddr,0,sizeof(struct sockaddr_in)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = inet_addr(SERVER_IP); serveraddr.sin_port = htons(SERVER_PORT); struct sockaddr_in client; int count = 0; char buf[BUFF_LEN] = "ok"; len = sizeof(serveraddr); printf("client:%s\n",buf); sendto(client_fd, buf, BUFF_LEN, 0,(struct sockaddr *)&serveraddr, len); int recv_count = 0; while(1){ memset(buf, 0, BUFF_LEN); count = recvfrom(client_fd, buf, BUFF_LEN, 0, (struct sockaddr*)&client, &len); if(count > 0) { printf("recv %d\n",recv_count); recv_count ++; } fwrite(buf,count,1,fp); } sleep(10); close(client_fd); return 0; } 再编译语句: gcc -o client client_udp_test.c 生成client 创建服务器程序:在下面程序注释前面修改为你的IP vim server_udp_test.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #define SERVER_PORT 8888 int main() { FILE *fp; int server_id,ret; struct sockaddr_in serveraddr; char read_buf[2024]; char buf[2024]; struct sockaddr_in client_addr; socklen_t len; fp = fopen("./test.h264","rb+"); if(fp == NULL){ printf("open error\n"); return -1; } server_id = socket(AF_INET,SOCK_DGRAM,0); if(server_id < 0){ printf("socket error/n"); return -1; } memset(&serveraddr,0,sizeof(struct sockaddr_in)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = inet_addr("192.168.126.129"); //此处修改IP serveraddr.sin_port = htons(SERVER_PORT); ret = bind(server_id,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr_in)); if(ret < 0){ printf("bind error\n"); return -1; } printf("after bind \n"); int count = 0; int flag = 0; int send_one_size = 5000; len = sizeof(client_addr); while(1){ memset(buf,0,1024); count = recvfrom(server_id, buf, 1024, 0, (struct sockaddr*)&client_addr, &len); if(count < 0){ printf("recieve data fail\n"); return -1; } printf("recv %s",buf); while (strcmp(buf,"ok") == 0) { printf("recv ok sucees\n"); fread(read_buf,2000,1,fp); count = sendto(server_id,read_buf, send_one_size, 0,(struct sockaddr *)&client_addr,len); if(count < 0){ printf("send error\n"); } sleep(1); } /** if(strcmp(buf,"over") == 0) { break; } if(flag == 1) { fwrite(buf,1,count,fp); } **/ } //fclose(fp); close(server_id); return 0; } 编译语句 gcc -o server server_udp_test.c 生成server 打开两个命令端,先运行server,再运行client,此时在目录中就会生成一个有数据的recv.h264文件!! 图片 UDP传输文件工作完成 此程序仅验证可使用UDP传输h264文件,生成的recv.h264与test.h264文件大小不同,是因为每秒传输的大小设置的比较低,可以在client_udp_test.c与server_udp_test.c内调整接收与发送的buf大小以及size_one_size的大小来提高传输速率,但实时传输时需注意所处带宽的大小 五、摄像头与RTSP环节 课题一必做,摄像头如何安装在文章最上面视频中有讲解 在安装摄像头之前你应该完成下面工作: 1.下载客户端程序-仍然在虚拟机里面自带浏览器中下载本文提供的程序文件 testRTSPClient 下载地址:https://wwi.lanzouw.com/idDn2y5r4pa 提取码: 2.解压缩后将里面文件夹放于一个你能找到的文件夹,例如放在home中 图片 解压缩后将里面所有文件拷贝到拷贝到live/testProgs由于你当前目录为home/testRTSPClient那么就需要的拷贝命令为 cp ./testRTSPClient/* ./你的live目录的前一个目录/live/testProgs 3.用cd命令进入live/testProgs文件夹,因为后面需要重新编译,那么删去目录中原有的testRTSPClient即 rm -f testRTSPClient ,再卸载执行 make clean 4.为保证虚拟机与摄像头在同一网段,由于摄像头IP为192.168.1.200,那么不妨将虚拟机IP修改为192.168.1.8 那么直接配置ifconfig eth0 192.168.1.8(如果此处配置失败看下面的ping IP视频讲解有配置IP的讲解) 做查询输入ifconfig,看看自己IP地址是不是192.168.1.8? 5.仍然在live/testProgs目录中 vim testRTSPClient.cpp 将里面的IP改为虚拟机IP,即将SERVER_IP修改为192.168.1.8 修改地方如图: 图片 将RTSP地址修改为这个地址:rtsp://admin:fang123456@192.168.1.200/h264/ch1/main/av_stream 如图位置: 图片 6.输入ESC和:wq!保存退出再make一下,注意make失败说明你当前目录错了,要在live/testProgs目录中。 7.ls观察是否生成testRTSPClient 此时你需要搞明白一共有那三个iP地址?如何ping他们,那么见下面视频 课题一和全部做的同学强烈建议看,确保明白后上手摄像头安装!!! 8.运行它即 ./testRTSPClient 不能报错进行截图 9.用VLC软件观察是否有实时h264流,进行播放 观察流地址为rtsp://admin:fang123456@192.168.1.200/h264/ch1/main/av_stream填写到VLC软件中即可观察到 如图所示 THMZpF.md.png图片 六、解码与播放环节 课题三需要做 1.liunx系统浏览器输入本站网址sciarm.com下载下面提供的播放器文件 player_Ubuntu 下载地址:https://wwi.lanzouw.com/i7YABy7begh 提取码: 2.加压缩防止home文件夹下面即可 3.vim include.h 4.按a进入编辑将里面的ip修改为你配置过后的虚拟机IP,即将SERVER_IP 里面的IP修改为192.168.1.8,保持并退出 5.再输入编译命令 gcc -o demo main.c fun_deco_display.c fun_others.c fun_recv_control.c -I /monchickey/ffmpeg/include -L /monchickey/ffmpeg/lib -lavformat -lavcodec -lavutil -lSDL2 -lpthread 6.观察是否有demo文件生成 七、最后工作 两个TM终端一个在/live/testProgs文件夹中输入 ./testRTSPClient 另一个TM终端在cd到第六步那个文件夹输入 ./demo 观察播放器是否有实时画面出现如图所示: 图片 图片 如有哪里不明白可与我联系
嵌入式&系统
# 嵌入式
刘航宇
5年前
0
5,547
38
2021-06-27
通信原理简答题学习
摘要:本文探讨了通信原理中的多个问题,包括部分响应系统的优缺点、2PSK系统的相位模糊现象、数字通信接收机设计因素、误码率与多种因素的关系等,并简要介绍了模拟和数字通信系统的有效性及可靠性评价、FM通信中的预加重/去加重技术等。1、部分响应系统的优点是什么呢?缺点是什么?(或采用部分响应技术会得到什么好处?需要付出什么代价?) 答:优点:频带利用率高,在理论上可达到2Bd/Hz;时域衰减快,可以放宽对定时信号相位抖动的要求,系统的频率特性不是理想矩形,易于实现 缺点:抗噪声能力比非部分响应系统差。 2、什么是2PSK系统的相位模糊现象? 答:从2PSK信号是提取的载波信号存在两种可能的相位,即0相和π相,解调结果与发端的基带信号同相或反相,这就是2PSK系统的相位模糊现象。 3、在设计数字通信接收机输入端带通滤波器的频率特性时,应考虑哪些因素?(至少给出两个因素并说明它们与频率特性的关系) 答:数字通信接收机输入端带通滤波器的带宽应尽量小,以尽可能多地滤除信道噪声,提高带通滤波器输出信噪比,减小误码率;另外整个通信系统的频率特性应满足无码间串扰的要求,而通信系统的频率特性与接收机输入端带通滤波器的频率特性有关,所以设计此带通滤波器时应满足无码间串扰的条件下,尽量减小滤波器的带宽。 4、如何由白噪声得到窄带白噪声,窄带白噪声的功率与其同相分量的功率及正交分量的功率有何关系? 答:将白噪声通过窄带带通滤波器,就可以得到窄带白噪声,窄带白噪声的功率与其同相分量的功率以及正交分量的功率是相同的。 5、定性说明误码率与码间串扰、信噪比、位同步信号相位抖动大小及码速率之间的关系。 答:码间串扰越大,误码率越大;信噪比越大,误码率越大;位同步信号相位抖动越大,误码率越大;码速率越大,误码率越大。 6、最佳接收机的误码率通常小于非最佳接收机的误码率,为什么?试加以解释。 7、如何评价模拟通信系统和数字通信系统的有效性有可靠性? 答:模拟通信系统:已调信号带宽越小,有效性越好;解调器输出信噪比越高,可靠性越好; 数字通信系统:频带利用率越高,有效性越好;误码率越小,可靠性越好。 8、FM通信系统中采用预加重/去加重技术可达到什么目的?为什么? 答:其目的是为了提高解调器的输出信噪比。因为鉴频器输出噪声功率谱密度与噪声频率平方成正比,对此噪声进行去加重处理可以降低高频噪声,从而减小解调器输出噪声功率。预加重器用以增强基带信号的高频成分,使去加重器输出基带信号不失真,功率不变。 9、在2FSK通信系统中,若1码和0码对应的信号幅度不相同,当无噪声时,对传输信息有影响吗?为什么? 答:无影响,因为信息是通过两个频率传输的,与信号幅度无关。 10、升余弦滚降信号的时域和频域衰减速度有何特点? 答:升余弦滚降信号的时域衰减速度快,频域衰减速度慢。 11、时域均衡中横向滤波器的抽头级数与什么因素有关? 答:抽头级数与输入信号码间串扰个数有关,若有2N个码间串扰值,则抽头级数应该为2N+1。 12、什么是广义平稳?什么是狭义平稳?它们之间有什么关系? 答:广义平稳过程:均值和方差为常数,自相关函数只与时间间隔有关。狭义平稳过程:1到N等于无穷阶概率密度函数均与时间原点无关。狭义平稳是广义平稳和特例,广义平稳不一定是狭义平稳。 13、数字基带信号码型变换的目的是什么?常用码型换有哪些? 答:便于在数字基带信道中传输和接收判决。HDB3、CMI、AMI等。 14、简要叙述匹配滤波器的原理,若匹配滤波器输入信号频谱为s(f),信号能量为E,高斯噪声的双边功率谱密度为n0/2,试给出匹配滤波器的传输函数H(f)和输出最大信噪比。 答:对于特定的滤形的输入信号,匹配滤波器能在判决时间t0提供最大的输出信噪比。H(f)=s*(f)e-j2πft0,r0max=2E/n0。 15、试定性说明相干解调和非相干解调在大信噪比和小信噪比时的抗噪声性能。 答:对小信噪比相干解调和噪声性能优于非相干解调,对大信噪比两者噪声性能差不多。非相干解调存在门限效应,而相干解调没有。 16、为什么PCM编码要用对数量化?A律和u律PCM量化特性为什么要用折线代替对数特性? 答:对数量化可达到“小信号量阶小,大信号量阶大”的要求,改善小信号时的量化信噪比,扩大对输入信号的允许动态范围。 用折线代替对数特性是为了能用数字电路来实现。 17、试画出2DPSK信号差分解调的原理框图,和相干解调相比其噪声性能哪种方法好,为什么? 答:相干解调比差分相干解调噪声性能好,因为它的本地载波包含的噪声小,而后者是用前一码元的波形来代替本地载波,包含了信道噪声。 18、QPSK信号是不是恒定包络调制信号?试定性说明QPSK信号经非线性放大器后,产生信号频谱扩展的原因。 答:不是恒定包络。当QPSK信号出现180度相位跳变时,经过发送滤波器后,信号包络会过零,如果此信号再经非线性放大器,原本下降的包络会被提升,即带外高频分量增大,信号频谱扩展。 19、试画出第一类部分响应编码基带传输系统的原理框图,如果发送端的四进制信码为000132103231,试写出预编码器和相关编码器输出的信号序列。 答:bk=ak-bk-1(mod L) Ck=bk+bk-1(算术加) 接收:ak=ck(mod L), L为进制数 ak:000132103231 bk:000120130210 ck:000132143231 接收ak:000132103231 20、设计数字通信接收机输入带通滤波器频率特性时应考虑哪些因素? BPF的通带应等于信号的有效频率范围,让信号不受影响地通过,而输入噪声功率最小。 21、简要叙述数字基带传输系统中传输码的要求(至少三项)? 22、什么是奈奎斯特速率?什么是奈奎斯特带宽? 答:奈奎斯特速率是能消除码间串扰的最大码速率;又称为等效带宽。当码速率等于它的两倍时无码间串扰。 23、数字信号的最佳接收准则是什么?其物理含义是什么? 答:使接收的误码率最小;在接收判决时的信噪比最大。 24、通信系统调制器的作用是什么?何谓线性调制?何谓非线性调制? 答:让载波的参数随调制信号的变化而变化;已调波的频谱是调制信号的频谱经过平移和滤波而得到的;已调波的频谱与调制信号的频谱没有对应关系。 25、简述眼图如何能反映基带信号的传输质量,写出至少三个衡指标。 P157 26、简述随参信道的特点: 答:信号传输延时随时间而变;对信号的衰减随时间而变;存在多径传输现象。 27、窄带高斯白噪声中的“窄带”、“高斯”、“白”的含义各是什么? 答:窄带的含义是:频带宽度B远小于中心频率fc,中心频率fc远离零频;高斯的含义是噪声的瞬时值服从正态分布;白的含义是噪声的功率谱密度在通带范围B内是平坦的为一常数。 28、什么是门限效应?AM包络检波法为什么会产生门限效应? 答:小信噪比时,解调输出信号无法与噪声分开,有用信号“淹没”在噪声之中,这时候输出信噪比不是按比例地随输入信噪比下降,而是急剧恶化,这种现象称为门限效应。由于包络检波法的非线性作用,所以AM信号会产生门限效应。 29、已知消息代码为1100000100000000101,编出相应的HDB3码,并简述该码的特点。 答:+1-1000-10+1000+1-100-1+10-1,特点:无直流,且高低频分量小,具有宏观检错能力,三电平波形,连“0”数目不超过3个。 30、简要非均匀量化原理,与均匀量化相比较,非均匀量化的主要优点和缺点。 答:非均匀量化是指量化间隔不相等的量化。信号小时,量化间隔也小,信号大时,量化间隔也大。优点:能改善小信号的信噪比,减小编码位数和传输带宽。缺点:实现相对复杂些。 31、试画出逐次比较型编码器的原理框图,并简要说明该编码器的工作原理。 9-19 32、什么是最佳基带系统,理想信道下的最佳基带系统应满足哪些条件? 答:将消除码间串扰且误码率最小的基带系统称为最佳基带系统。 33、简述数字基带传输系统中,造成误码的主要因素和产生原因。 答:码间串扰和信道噪声是造成误码的两大因素,码间串扰是由于基带传输总特性不理想造成的;信道噪声是一种加性随机干扰,来源有很多,主要代表是起伏噪声(如热噪声)。这两类干扰都会对信号的接收判决产生影响。 34、简述多进制数字调制系统的特点。 答:特点是可以获得比二进制数字调制更高的频带利用率,减小带宽,但是这些受益的代价是需要增加信号功率和实现的复杂度。 35、简述通信系统中采用调制的目的。 答:把基带信号转换成适合在信道中传输的已调信号(即实现有效传输、配置信道、减小天线尺寸);实现信道的多路利用,以提高信道利用率;改善系统抗噪声性能(与制式有关)。 36、在脉冲编码调制中,与自然二进制相比,选用折叠二进制码的主要优点是什么? 答:简化编码过程;在有误的情况下,对小信号的影响小。
通信&信息处理
刘航宇
5年前
0
1,421
9
2021-06-16
电子测量技术概念复习提纲
摘要:本文为电子测量技术概念复习提纲,涵盖测量定义、电子测量内容、特点、方法、仪器功能、误差类型及测量频率方法等,旨在帮助读者全面了解电子测量技术。 代表重点内容, 仅仅看一下 电子测量概念提纲 计算参考平时作业 第一章 1 什么是测量,什么是电子测量? 答:测量是人类对客观事物取得数量概念的认识过程,在这种认识过程中,人们借助于专门的设备,依据一定的理论,通过实验的方法,求出以所用的测量单位来表示的被测量的量值。 电子测量是测量领域的主要组成部分,它泛指以 电子技术为基本手段 的一种测量技术,是电子学与测量学相结合的产物。 2 电子测量的内容都包含哪些? 答:电子测量的内容是指对电子学领域内电参量的测量,主要有: (1) 电能量的测量: 指各种信号和波形的电压、电流、电功率等的测量; (2) 电信号特性的测量: 指信号的波形、频率、相位、噪声及逻辑状态等的测量; (3) 电路参数的测量: 指阻抗、品质因数、电子器件的参数等的测量; (4) 导出量的测量: 指增益、衰减、失真度、调制度等的测量; (5) 特性曲线的显示: 指幅频特性、相频特性及器件特性等的测量。 3 电子测量有哪些特点? 答: (1)测量频率范围宽。(2)测量量程广。(3)测量精度高。(4)测量速度快。(5)易于实现遥测。(6)易于实现测量过程自动化和测量仪器智能化。 4 电子测量的一般方法有哪些? 答:按测量手段分类—— 直接测量、间接测量、组合测量。 按测量方式分类—— 偏差式测量方法、零位式测量法、微差式测量法。 按被测量的性质分类—— 时域测量、频域测量、数据域测量、随机测量 5 测量仪器具有的主要功能是什么? 答:测量仪器的具有 变换、传输和显示的功能。 6 叙述直接测量、间接测量、组合测量的特点,并各举一两个测量实例。 答:1)直接测量:在测量过程中,能够直接将被测量与同类标准量进行比较,或者能够直接用已标定好的仪器对被测量进行测量,直接获得数值,这种测量方式称为直接测量。例如,用电压表测量电压、用欧姆表测量电阻阻值、用直流电桥测量电阻等都是直接测量。 直接测量的优点是过程简单迅速,是工程技术中广泛采用的测量方法。 2)间接测量:它是利用直接测量的量与被测量之间的函数关系(可以是公式、曲线或表格等),间接得到被测量量值的测量方法。例如,需要测量电阻上消耗的直流功率P,可以通过直接测量电压U、电流I,或直接测量电流I、电阻R,或直接测量电压U、电阻R,然后根据函数关系P=UI=I2R=U2/R,经过计算,“间接”获得功率P。 3)组合测量:当某项测量结果需用多个未知参数表达时,可通过改变测量条件进行多次测量,根据函数关系列出方程组并求解,进而得到未知量,这种测量方法称为组合测量。 7 解释偏差式、零位式和微差式测量法的含义,并列举测量实例。 答:1)偏差式测量法:在测量过程中,用仪器仪表指针的位移(偏差)表示被测量大小的测量方法称为偏差式测量方法。 2)零位式测量法:又称为零示法或平衡法,测量时将被测量与标准量相比较,用指零仪表指示被测量与标准量相等(平衡),从而获得被测量。 3)微差式测量法:偏差式测量法和零位式测量法相结合构成微差式测量。该法通过测量待测量与标准量之差(通常该差值很小)来得到待测量的值。 8 测量仪器的主要性能指标有哪些? 答: 精度;稳定性;输入阻抗;灵敏度;线性度;动态特性。 9 电子测量的灵敏度是如何定义的? 答:灵敏度表示测量仪表对被测量变化的敏感程度,一般定义为测量仪表指示值(指针的偏转角度、数码的变化、位移的大小等)增量∆y与被测量∆x之比。灵敏度的另一种表述方式叫作分辨力或分辨率,定义为测量仪表所能区分的被测量的最小变化量,在数字式仪表中经常使用。 第二章 1 什么是实际相对误差,示值相对误差,满度相对误差? 图片 2 什么是引用误差? 图片 3 测量误差的来源都有哪些? 答:仪器误差——是指仪器仪表本身及附件所引入的误差,这主要是由于涉及、制造、装配、检定等的不完善以及使用过程中元器件老化、机械部件磨损、疲劳等因素而使测量仪器带有的误差。 使用误差——是由于对测量设备操作使用不当带来的误差。 人身误差——由于测量者感官的分辨能力、视觉疲劳、固有习惯等而对测量实验中的现象与结果判断不准确而造成的。 影响误差——是指各种环境因素与要求条件不一致而带来的误差,如环境温度、湿度、电源电压、电磁干扰等与使用手册中规定的条件不一致。 方法误差——由于测量方法不合理造成的误差称为方法误差。 4 根据误差的性质,测量误差可以分为哪几类,各有什么特点? 答: *测量误差可分为系统误差、随机误差和粗大误差。 系统误差的主要特点:条件不变,误差不变;条件改变,误差遵循某种确定的规律而变化,具有可重复性。 随机误差的主要特点:有界性、对称性、补偿性、单峰性。 粗大误差的主要特点:测量值明显偏离真值。* 5 通过什么来反映测量结果的好坏? 答:通过精度反映测量结果的好坏。 6 判断系统误差有几种方法?减小系统误差有几种措施? 答:系统误差的判断方法有:理论分析法、校准和比对法、改变测量条件法、剩余误差法和公式判断法。① 零示法。在测量过程中, 只要判断检流计中有无电流, 而不需要用检流计读出读数, 因此只要检流计转动灵敏, 测量的准确度仅与标准量的准确度有关.广泛用于电桥测量中. ① 替代法(置换法)。由于替代前后整个测量系统及仪器示值均未改变,因此测量中的恒定系差对测量结果不产生影响,测量准确度主要取决于标准已知量的准确度及指示器灵敏度。 ② 补偿法(部分替代法)。此法常用于高频阻抗、电压、衰减量等测量。 ③ 对照法(交换法)。适于在对称的测量装置中用来检查其对称是否良好,或从两次测量结果的处理中,削弱或消除系统误差。 ④ 微差法。微差法比零示法更容易实现,在测量过程中已知量不必调节,仪器仪表直接读数,比较直观。 理论误差——测量方法建立在近似公式或不完整的理论基础上以及用近似值计算测量结果时所引起的误差称为理论误差。 7 何谓标准差、平均值标准差、标准差的估计值? 图片8 什么是等精度测量? 答:在保持测量条件不发生变化的条件下,对同一被测量进行多次重复测量的过程叫等精度测量。 8 什么是标称值? 答:测量器具上标定的数值称为标称值。 9 如何减少示值相对误差? 答:为了减少测量中的示值误差,在进行量程 选择时应尽可能使示值接近满意度值 ,一般以示值不小于满意度的三分之二为宜。 10 仪表的准确度与测量结果的准确度的关系。 答:测量中所用仪表的准确度并不是测量结果的准确度,只有在示值与满度值相同时,二者才相等(不考虑其他因素造成的误差,仅考虑仪器误差),否则测得值的准确度数值:降低于仪表的准确度等级。 11 什么是系统误差?系统误差的主要特点是什么? 答:在多次等精度测量同一量值时,误差的绝对值和符号保持不变,或当条件改变时误差按某种规律变化,这种误差称为系统误差,简称系差。 系统误差的主要特点是:只要测量条件不变,误差即为确切的数值,用多次测量取平均值的方法不能改变或消除系差,当条件改变时,误差也随之遵循某种确定的规律而变化,具有可重复性。 12 什么是随机误差?随机误差的主要特点是什么? 答: 随机误差又称偶然误差 ,是指对同一量值进行多次等精度测量时,其绝对值和符号均以不可预测的方式无规则变化的误差。 随机误差的主要特点是特点:有界性;对称性;抵偿性 。 13 利用修正值、修正公式可以削弱那种误差? 答: 零示法、替代法、补偿法、对照法、微差法、交叉读数法、 主要用来消弱或消除恒定系差。利用修正值或修正公式可以削弱系差。 13 判别测量数据中是否存在周期性系统误差应采用 阿贝一赫梅特判据 14 若测量次数较少时,理论上严密,实验证明效果也较好的粗大误差判据: 格拉布斯检验法 第三章 1 测量频率的方法都有哪些? 答:频率测量方法有很多,大体可以分为 模拟法和计数法 。模拟法又分为 频响法和比较法 。频响法是利用无源网络频率特性测量频率的,包括电桥法和谐振法。比较法是将被测频率信号和已知频率信号相比较,通过看、听等手段比较结果,从而获得被测信号的频率。包括拍频法、差频法和示波法。 计数法有电容充放电式 ,利用电子电路控制电容器充放电的次数或时间常数,再用磁电式仪表测量充放电电流的大小,来指示出被测信号的频率;还有一种是电子计数式,从频率的定义出发,用电子计数器显示单位时间内通过被测信号的周期个数来实现频率的测量。 2 采取什么测量方法? 答:电子计数器测量频率时,其测量的最高频率主要取决于计数器的工作速率。目前计数器测量频率的上限为lGHz左右,为了能测量高于1GHz的频率,有许多种扩大测量频率范围的方法。 测高频信号频率时,用计数法直接测出频率 ; 测低频信号频率时,用计数法先测其周期,再换算为频率 ,以期得到高精度的测量。 3 简述计数式频率计测量频率的原理,说明这种测频方法测频有哪些误差?什么叫量化误差?对一台位数有限的计数式频率计,是否可无限制地扩大闸门时间来减少+-1误差,提高测量精确度? 答: 电子计数法在一定时间间隔T秒时间内被测信号变化周期的重复次数,从而得到该信号的频率为 图片 4 电子计数法测量周期误差主要有哪几部分组成?什么叫触发误差?如何减小触发误差的影响? 答:测周误差除了量化误差和标准频率误差之外,还有触发误差,可表示为: 图片 5 +-1测量误差 图片 6 如何减小测量频率时的相对误差? 答:脉冲计数的相对误差与被测信号的频率成反比,与闸门时间成反比。也就是说, 被测信号频率越高,闸门时间越宽,此项相对误差越小。 7 电子计数法测量周期适合测量什么样周期的被测信号?低周期被测信号应采取什么测量方法? 答: 测高频信号频率时,用计数法直接测出频率;测低频信号频率时,用计数法先测其周期,再换算为频率 ,以期得到高精度的测量。若测信号的周期,可以采取与上相反的过程。 8 如何减小测量周期时的相对误差? 答:为了减小测量误差,可以 减小Tc(增大fc) ,但这受到实际计数器计数速度的限制。在条件许可的情况下,尽量使fc增大。另一种方法是把 Tx扩大m倍,形成的闸门时间宽度为m Tx ,以它控制主门开启,实施计数。 9 直读法测量频率分为哪几种测量方法? 答: 电桥法测频;谐振法测频;频率-电压转换法测频。 10 比较法测量频率分为哪几种测量方法? 答:拍频法测频;差频法测频;用示波器测量频率和时间间隔。 11 用示波器测量相位差分为几种测量方法? 答:直接比较法;椭圆法。 12 相位差的测量可以转换成对哪些参数的测量 答:可转换为时间间隔进行测量;电压进行测量。 13 测量高频信号的相位差应该采取什么方法? 答: 频率变换法把被测高频信号变换为低频或某一固定频率的信号进行测量。 14 当被测频率大于中界频率时,宜选用测频的方法;当被测频率小于中界频率时,宜选用测周的方法。 15 某计数式频率计,测频率时闸门时间为1s,测周期时倍乘最大为× 10 000,晶振最高频率为10MHz,求中界频率。 图片 第4章 1 按照显示方式的不同电子电压表可以分为几类? 答: 模拟式电子电压表和数字式电子电压表。 2 什么是波形因数、什么是波峰因数? 答:图片 3 测量交流电压的最基本的原理是什么? 答:利用 交流/直流转换电路将交流电压转换成直流电压,然后接到直流电压表上进行测量。 4 模拟交流电压表可以分为几种主要类型? 答: 检波-放大式;放大-检波式;调制式;外差式;热偶变换式。 5 低频交流电压表的检波电路主要采用什么检波器? 答: 均值检波器。先放大再检波 6 高频交流电压表的检波电路主要采用什么检波器? 答: 峰值检波器。先检波再放大 7 数字式电压表(DVM)按照根据电压的类型可分为几种类型? 答:直流DVM和交流DVM。 8 数字式电压表(DVM)按照A/D变换原理可分为几种类型? 答: 比较型,积分型,复合型。 9 简述电压测量的基本要求及电压测量仪器的分类方法。 答:电压的测量要求具有足够宽的电压测量范围和频率范围、足够高的输入阻抗和测量准确度、较强的抗干扰能力,以及能够测量多种信号波形。电压测量仪表的分类有很多,可以按频率范围分类,分为直流电压测量和交流电压测量两种;按被测信号的特点分类,有峰值表、有效值表及平均值表;按测量技术分类,分为模拟式和数字式电压测量。 10 表征交流电压的基本参数有哪些?简述个参量的意义。 答:交流电压可以用平均值、峰值、有效值、波形系数及波峰系数来表征。 11 交流电压表都是以何值来标定刻度读数的?真、假有效值的含义是什么? 答:交流电压表都是以正弦波有效值为刻度的, 真有效值:我们认为有效值表的读数就是被测电压的有效值,即有效值表是响应输入信号有效值的。因此,有效值表中α=Ui,并称这种表为真有效值表。 假有效值:有效值表的读数不能反映被测电压的有效值真实大小 12 不同波形KF与KP 图片 13 简述逐次比较法A/D转换原理及特点。 答:逐次逼近比较式A/D转换器的基本原理是将被测电压Ux和一可变的基准电压进行逐次比较,最终逼近被测电压,即采用的是一种“对分搜索”的策略,逐步缩小Ux未知范围的办法。 特点:转换速度较快,但由于直接与被测电压比较,也容易受到干扰。 14 简述双积分式A/D转换器的工作原理及特点。 答:双积分A/D转换器即双斜式A/D转换器,属于V-T变换式,其基本原理是在一个测量周期内,首先将被测电压Ux加到积分器的输入端,在固定时间内进行积分,也称定时积分;然后切断Ux,在积分器的输入端加与Ux极性相反的标准电压UN,由于UN一定,所以称定值积分,但积分方向相反,直到积分输出达到起始电平为止,从而将Ux转换成时间间隔进行测量,用电子计数器对此时间间隔进行计数,即为Ux之值。 特点:转换速度慢、抗干扰能力强。 15 指出串模干扰和共模干扰的含义和消除办法。 答:串模干扰。串模干扰是指干扰电压Usm以串联形式与被测电压Ux迭加后加到DVM输入端,串模干扰的基本抑制方法有输入滤波法和积分平均法。 被测信号的地线与电压表地线(机壳)之间存在电位差Ucm时,它们产生的电流对高低两根测试线都有干扰,这个干扰源Ucm称共模干扰。常采用浮地屏蔽技术,即仪器内部电路的地接机壳,两条测试线不设接地端,分别称为高(H)端和低(L)端。 16 脉宽调制式DVM实质是什么? 答:实质就是用被测电压Ux来调制基准电压Ur的正负波的宽度。 17 数字电压表特点 答: 准确度高、数字显示、输入阻抗高、测量速度快、自动化程度高、功能多样 18 数字电压表特点性能指标 答: 测量范围(量程、显示位数、超量程能力),分辨率,测量误差 第五章 1 信号源在电子测量中有何作用? 答:信号发生器是电子测量中最基本、使用最广泛的电子测量仪器之一,常被作为标准源对一般信号进行校准、比对,或以它为依据检验测试设备是否准确,在生产实践和科技领域中有着广泛的应用。信号发生器也称信号源,是用来产生振荡信号的一种仪器,可提供稳定、可信的参考信号,并且信号的特征参数完全可控。 2 信号源的常用分类方法有哪些?按照输出波形的不同,信号发生器可以分为哪几类? 答:( *1)按频率范围分类; (2)按输出波形分类; (3)按信号发生器的性能分类* 。 其中按照输出波形信号发生器可以分为正弦信号发生器和非正弦信号发生器。非正弦信号发生器又可包括脉冲信号发生器、函数信号发生器、扫频信号发生器、数字序列信号发生器、图形信号发生器、噪声信号发生器等。 3 按照输出频率的不同,信号源可以分为哪几类? 答:信号发生器按照频率发生的范围不同又可分为低频、视频、高频、甚高频、超高频信号发生器等 4 正弦信号源的主要技术指标有哪些?简述每个技术指标的含义。 答:正弦信号发生器的主要技术指标有: (1)频率范围:指信号发生器所产生信号的频率范围; (2)频率准确度:频率准确度是指信号发生器度盘(或数字显示)数值与实际输出信号频率间的偏差; (3)频率稳定度:频率稳定度是指其它外界条件恒定不变的情况下,在规定时间内,信号发生器输出频率相对于预调值变化的大小 (4)失真度与频谱纯度:通常用信号失真度来评价低频信号发生器输出信号波形接近正弦波的程度,对于高频信号发生器的失真度,常用频谱纯度来评价; (5)输出阻抗 (6)输出电平:输出电平指的是输出信号幅度的有效范围; (7)调制特性:是否能产生其他调制信号。 5 什么是信号发生器? 答: 测试用电信号的装置 ,统称为信号发生器,用在电子测量领域,也称为测试信号发生器。 6 低频信号发生器的主振器通常使用什么振荡器,应用最多的是什么振荡器? 答:在通信信号发生器中,主振器通常使用RC振荡器,而其中应用最多的当属文氏桥振荡器。 7 函数发生器的基本工作原理是什么? 答:先由积分电路和触发电路产生三角波和方波,然后通过函数转换器,将三角波整形成正弦波。 8 射频信号发生器分为哪几种类型? 答:调谐信号发生器;锁相信号发生器;合成信号发生器。 9 调谐式信号发生器的振荡器分为那三种类型? 答:变压器反馈式振荡器;电感反馈式振荡器;电容反馈式振荡器。 第六章 1 什么是电子示波器? 答:电子示波器简称示波器。它是一种用荧光屏显示电量随时间变化过程的电子测量仪器。 2 什么是示波器的偏转因数、偏转灵敏度? 答:偏转灵敏度(S):单位输入信号电压引起光点在荧光屏上偏转的距离H称为偏转灵敏度S: 图片 d为灵敏度的倒数,d称为偏转因数。 则如:d=2V/cm,荧光屏上uy波形高度H=2.6cm,则所观察波形幅度uy =2V/cm×2.6cm=5.2V。 3 偏转因数、偏转灵敏度的设定对波形幅度的影响。 答:根据显示的波形高度H,按上式可求得显示波形的电压幅度。 4 什么是扫描频率、扫描速度、时基因数? 答:扫描速度就是光点水平移动的速度,其单位是cm/s或div/s。扫描速度的倒数称为时基因数,它表示光点水平移动单位长度所需的时间。扫描频率表示水平扫描的锯齿波的频率。 5 扫描速度、时基因数的设定对展宽波形的影响。 答:扫描速度越高,表示示波器能够展开高频信号或窄脉冲信号波形的能力越强。为了观察缓慢变化的信号,则要求示波器具有较低的扫描速度,因此,示波器的扫描频率范围越宽越好。 6 为什么示波器的Y通道要接入衰减器,什么时候接入衰减器? 答:由于经常需要观察幅度较小的电压波形,因此示波器的灵敏度设计的较高,但当需要观察幅度较大的信号时,就必须接入衰减器对信号先进行衰减。 7 Y通道延迟线的作用是什么? 答:利用垂直通道输入的被测信号去触发水平偏转系统产生扫描电压波,,从接受触发到开始扫描需要一小段时间,这样就会出现被测信号到达Y偏转板而扫描信号尚未到达X偏转板的情况,为了正确显示波形,必须将接入Y通道的被测信号进行一定的延迟,以便与水平系统的扫描电压在时间上相匹配。 8 什么叫同步? 答:为了得到稳定的波形显示,必须是扫描锯齿波电压周期T与被测信号周期Ty保持整数倍关系,即T=nTy。由于扫描电压是由示波器本身的时基电路产生,它与被测信号电压是不相关的,为此一般采用被测信号(或与被测信号相关的信号)控制与触发时基电路,使T=nTy ,这个过程称为同步。 9 时基发生器的作用是什么? 答:时基发生器由闸门电路、扫描发生器和释抑电路组成。 时基闸门电路的作用是控制扫描电压发生器的工作,它是一个双稳态触发电路,当触发脉冲到来时,电路翻转,输出高电平,使扫描电压发生器开始工作。 扫描发生器扫的作用是产生高线性度的锯齿波电压。 释抑电路的作用是用来保证每次扫描都开始在同样的起始电平上。在水平偏转板上加一线性锯齿波扫描电压ux,该扫描电压将Y方向所加信号电压uy作用的电子束在屏幕上按时间沿水平方向展开。 10 示波器 主要技术指标 答: 带宽BW上升时间、扫描速度与时基因数、偏转灵敏度和偏转因数,输入阻抗,输入方式,触发源选择方式 11 示波器的触发源的触发信号有几种? 答:内触发;外触发;电源触发。 12 示波器的触发耦合方式有几种? 答:DC直流耦合;AC交流耦合;AC低频抑制;HF高频耦合。 13 示波器的触发方式有几种? 答:常态触发;自动触发;高频触发 。 14 通用示波器由哪些主要部分组成?各部分的作用是什么? 答: 通用示波器 主要由 垂直偏转通道,水平偏转通道和主机 三大部分组成。 (1)垂直偏转通道(Y轴系统)由衰减器、前置放大器、延迟级、输出放大器等组成。它的主要作用是对单端输入的被测信号进行处理变换,成为大小合适、极性相反的对称信号加至Y偏转板,以控制电子束的垂直偏转。 (2)水平偏转通道(X轴系统)由触发电路、扫描电路和X放大器组成。它的主要作用是同步触发电路在内或外触发信号作用下产生触发脉冲,在触发脉冲的作用下,输出大小合适的锯齿波电压,以驱动电子束水平偏转,并保证荧光屏上显示的波形稳定。 (3)主机部分主要包括Z轴电路、标准信号源、电源、示波管等部分。Z轴电路将X轴系统产生的增辉信号放大后加到示波管的栅极,从而实现在扫描正程时使波形加亮,扫描回程或扫描休止期时使回扫线和休止线消隐。标准信号源是一个标准方波发生器,用于提供幅度、周期等都很准确的方波信号,以便随时校准示波器的垂直灵敏度和扫描时间因数。电源是示波器工作时的能源,它将交流电变换成各种高、低电压电源,以满足示波管及各组成部分的工作需要。 15 通用示波器垂直(Y)通道包括哪些主要电路?它们的主要作用和主要工作特性是什么? 答:示波器垂直(Y)通道主要由输入电路、前置放大器、延迟线和输出放大器等组成。它的主要作用是检测被观察的信号,并把被测信号变换成为大小合适的双极性对称信号,无失真或失真很小的加到Y偏转板上,使显示的波形适于观测;并向X通道提供内触发信号源,去启动扫描;补偿X通道的时间延迟,以观测到诸如脉冲等信号的完整波形。 输入电路基本作用是引用被测信号,为前置放大器提供良好的工作条件。前置放大电路将信号适当放大,从中取出内触发信号,并具有灵敏度微调、校正,Y轴移位、极性反转等控制作用。延迟线的作用就是把加到垂直偏转板的被测信号也延迟一段时间,使信号出现的时间滞后于扫描开始时间,从而保证荧光屏上显示被测信号的全过程。输出放大器的功能是将延迟线传来的被测信号放大到足够的幅度,用以驱动示波管的垂直偏转系统,使电子束获得垂直方向的满偏转。 16 简述通用示波器扫描发生器环的各个组成部分及其作用。 答:扫描发生器环由扫描门、积分器及比较和释抑电路组成一个闭环控制系统。 扫描门产生快速上升或下降的闸门信号,它有三个作用:①输出时间确定的矩形开关信号,又称闸门信号,控制积分器扫描。②由于闸门信号和扫描正程同时开始,同时结束,可利用闸门信号作为增辉脉冲控制示波管,起扫描正程光迹加亮作用。③在双踪示波器中,利用闸门信号触发电子开关,使之工作于交替状态。积分器产生扫描锯齿波电压。释抑电路的作用是控制锯齿波电压的幅度,达到等幅扫描并保证扫描的稳定。 17 在通用示波器中,欲让示波器显示稳定的被测信号波形,对扫描电压有何要求? 答:为了示波器显示稳定的被测信号波形,扫描电压必须满足两个条件:①施加触发,确定扫描的起始点(在被测信号的同一相位点上)。②调节扫描周期,维持Tx=nTy(n为正整数)。 18 触发扫描和连续扫描有何区别? 答:观测连续信号时,扫描电压是连续的,即扫描正程紧跟着扫描回程,回程结束后,马上开始新的扫描正程,扫描是不间断的,这种扫描方式称为连续扫描。观测脉冲信号时,扫描脉冲只在被测脉冲到来时才扫描一次,没有被测脉冲时,扫描发生器处于等待工作状态,这种由被信号激发扫描发生器的间断的工作方式称为“触发扫描”方式。 19 什么是“交替”显示?什么是“断续”显示?对频率有何要求? 答:“交替”显示是指第一次扫描时接通Y1通道,第二次扫描时接通Y2通道,在屏幕上交替地显示Y1、Y2通道输入的信号。交替方式适合于观察高频信号。“断续”显示是在一个扫描周期内,高速地轮流接通两个输入信号,被测波形由许多线段断续地显示出来。断续方式适用于被测信号频率较低的情况。 20 示波器主要性能指标 答: 带宽、取样速率、存储深度、分辨率、扫描时间因数、触发能力 21 什么是非实时取样?取样示波器由哪些部分组成?各组成部分有何作用?说明取样示波器观察重复周期信号的过程。 答:从被测信号的许多相邻周期波形上取得样点的方法称为非实时取样,或称为等效取样。取样示波器主要也是由示波管、X通道和Y通道组成。 Y通道的作用是,在取样脉冲的作用下,把高频信号变为低频信号,取样脉冲来时取样门打开并取出样品信号,延长电路把每个取样信号幅度记录下来并展宽,接至模拟示波器Y偏转板,供最后信号合成用。 X通道主要任务是产生时基扫描信号,同时产生△t步进延迟脉冲送Y轴系统,控制取样脉冲发生器和延长门脉冲发生器的工作,即配合整个示波器的工作。 22 简述数字存储示波器的工作原理。 答:数字存储示波器首先将被测的模拟信号经过A/D转换后,得到数字信号存储于随机存储器RAM中。在显示时,再将数字信号读出,经D/A转换恢复为模拟信号,加在普通示波器的Y偏转板上。此时,X偏转板上不再加入锯齿波电压信号,而是与取样示波器类似地,加入由数码经过D/A产生的阶梯波。 21 什么是内同步?什么是外同步? 答:同步信号采自于Y通道的(即被观察信号)被称为内同步;同步信号采自于来自仪器外部的同步信号的方式被称为外同步。 22 示波器Y通道内为什么既接入衰减器又接入放大器?它们各起什么作用? 答:为适应Y通道输入的被测信号的大幅度的变化既接入衰减器又接入放大器。 放大器对微弱的信号通过放大器放大后加到示波器的垂直偏转板,使电子束有足够大的偏转能量。衰减器对输入的大幅度信号进行衰减。 23 什么是连续扫描和触发扫描?如何选择扫描方式? 答: 连续扫描:扫描电压是周期性的锯齿波电压。在扫描电压的作用下,示波管光点将在屏幕上作连续重复周期的扫描,若没有Y通道的信号电压,屏幕上只显示出一条时间基线。 触发扫描:扫描发生器平时处于等待工作状态,只有送入触发脉冲时才产生一次扫描电压,在屏幕上扫出一个展宽的脉冲波形,而不显示出时间基线。 被测信号是连续的周期性信号时,选择连续扫描方式。被测信号是短短暂的周期性脉冲信号时,选择触发扫描方式。 23 双踪与双线示波器的区别是什么 ? 答: 双踪示波器的垂直偏转通道由A和B两个通道组成。两个通道的输出信号在电子开关控制下,交替通过主通道加于示波管的同一对垂直偏转板。A、B两个通道是相同的。主通道由中间放大器、延迟线、末级放大器组成,它对两个通道是公用的。 双线示波器采用双线示波管构成。双线示波管在一个玻璃壳内装有两个完全独立的电子枪和偏转系统,每个电子枪发出的电子束经加速聚焦后,通过“自己”的偏转系统射于荧光屏上,相当于把两个示波管封装在一个玻璃壳内公用一个荧光屏,因而可以同时观察两个相互独立的信号波形。双线示波器内有两个相互无关的Y通道A和B,每个通道的组成与普通示波器相同。 24 取样示波器的非实时取样过程为什么能将高频信号变为低频信号?取样示波器能否观测单次性高频信号? 答:非实时取样过程对于输入信号进行跨周期采样,通过若干周期对波形的不同点的采样,经过保持延长后就将高频信号变成了低频信号。 取样示波器不能观测单次性高频信号,因为不能对其进行跨周期采样。 25 常用李萨育图形 图片 第九章 1 频谱仪性能指标 答: 频率范围、扫描宽度、频率分辨力、动态范围、灵敏度 2 动态频率特性与静态频率特性相比有何不同? ** 答:动态频率特性相比静态频率特性:1)顶部最大值下降,动态特性曲线峰值低于静态特性曲线,扫频速度越快,下降越多;2)动态特性曲线被展宽,当静态特性曲线对称时,随着扫频速度加快,动态特性曲线明显出现不对称,并向频率变化的方向一侧倾斜;3)扫速愈高,偏移愈严重,扫频速度越快,偏离越大。 3 简述频谱分析的各种方法的原理和特点。 答:①并联滤波法 中心频率固定的带通滤波器(BPF)按分辦率的要求依次增大,在这些滤波器的输出端分别接有检波器和相应的检测指示仪器。这种方案的优点就是能实时地选出各频谱分量,缺点是结构复杂、成本高。 ②可调滤波法 中心频率可调的滤波器。电路得到简化,然而可调滤波器的通带难以做得很窄,其可调范围也难以做得很宽,而且在调谐范围内难以保持恒定不变的滤波特性,因此只适用于窄带频谱分析。 ③扫频外差法 窄带滤波器的中心频率不变,被测信号与扫频的本振混频,将被测信号的频谱分量逐个移进窄带滤波器中,然后与扫频锯齿波信号同步地加在示波管上显示出来。 ④快速傅里叶(FFT)分析法是一种软件计算法。若知道被测信号 的取样值 ,则可用计算机按快速傅里叶变换的计算方法求出 的频谱。在速度上明显超过传统的模拟式扫描频谱仪,能够进行实时分析。但当前受A/D转换器等器件性能限制,工作频段还较低。 4 什么是实时频谱分析?扫频外差式频谱仪为什么只能进行非实时分析?FFT分析仪为什么能够进行实时分析? 答:所谓“实时”频谱仪,直观的理解是能够在被测信号频率变化之前完成测量、分析和显示,但它又不是指单纯意义上的测量时间短、速度快。一般认为,实时分析是指在长度为T的时段内,完成频率分辨率达到1/T的谱分析;或者待分析信号的带宽小于仪器能够同时分析的最大带宽。显然,实时的概念与信号带宽及频率分辨率有关。在要求的频段宽度范围内,如果数据采集、分析速度不小于数据变化速度,这样的分析就是实时的;如果待分析的信号带宽过宽以至超过了最大分析带宽,则分析变成非实时的。 扫频式频谱仪实质是一个中心频率在整个频率范围内可调谐的窄带滤波器。当改变它的谐振频率时,滤波器就分离出特定的频率分量,从而依次得到被分析信号的谱分量。因此,这种频谱仪所显示的频谱图是多次调谐之后拼接的结果,分析带宽受限于窄带滤波器的带宽(通常总是小于信号带宽),所以不能进行实时分析。 FFT分析仪是在对信号采样之后,选择一定时间长度的离散采样点进行付氏变换,从而得到频域信息。由于离散时域信号中已包含了该时段内所有的频率信息,因此可以认为FFT的分析带宽与信号带宽是匹配的,能够实现实时分析。 5 为何说扫频外差式频谱分析仪是属非实时频谱仪? 答:扫频式频谱仪实质是一个中心频率在整个频率范围内可调谐的窄带滤波器。当改变它的谐振频率时,滤波器就分离出特定的频率分量,从而依次得到被分析信号的谱分量。因此,这种频谱仪所显示的频谱图是多次调谐之后拼接的结果,分析带宽受限于窄带滤波器的带宽(通常总是小于信号带宽),所以不能进行实时分析。 6 如果已将外差式频谱仪调谐到某一输入信号频率上,且信号带宽小于调谐回路带宽,此时停止本振扫描,屏幕将显示什么? 答:由于本振并不扫描,即只能分析某一个特定的频率。而此时分析带宽(调谐回路带宽)大于信号带宽,所得结果是实时的,所以屏幕显示的将是该特定频率上的时域波形。 7 要想较完整地观测频率为20kHz的方波,频谱仪的扫描宽度至少应达到多少? 答:周期方波是由多个纯正弦信号复合而成的,理论上具有无限宽的频谱,每根谱线均位于奇次谐波处。但工程中通常只考虑主瓣中的谱线,即零频、基波(20KHz)、三次谐波(60KHz),所以频谱仪的扫描宽度至少应覆盖0~60KHz的范围。 8 kpz4l26e.png图片 kpz4lttx.png图片 部分图解 1低频信号发生器的原理框图。 图片 2差频式信号发生器的原理框图 图片 3示波器Y通道的原理框图。 kpz4uw8s.png图片 4示波器水平通道的原理框图。 kpz4vmal.png图片 5数字式电压表(DVM)的原理框图。 kpz4w6er.png图片 6数字式多用表(DMM)的原理框图。 kpz4wp8d.png图片
嵌入式&系统
刘航宇
5年前
1
1,887
5
2021-06-13
数字基带系统-USB
摘要:本文介绍了USB(通用串行总线)的简介、发展历程、现状、分类、接口回路电路设计、协议和通信协议。USB是一种广泛应用于电脑与外部设备连接和通讯的接口技术,具有即插即用和热插拔功能。USB经历了从低速到超高速的发展,最新版本为USB 3.1,具有更高的传输速率和供电能力。USB接口分为Type-A、Type-B和Type-C等类型,其中Type-C接口具有更小的体积和更高的传输速率。USB协议包括物理特性、数据包格式、信息包格式、事务和传输类型等。1 USB简介 USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的[1]。 2 USB的发展及现状 2.1 USB发展 USB版本 理论最大传输速率 速率称号 最大输出电流 推出时间 USB1.0 1.5Mbps(192KB/s) 低速(Low-Speed) 5V/500mA 1996年1月 USB1.1 12Mbps(1.5MB/s) 全速(Full-Speed) 5V/500mA 1998年9月 USB2.0 480Mbps(60MB/s) 高速(High-Speed) 5V/500mA 2000年4月 USB3.0 5Gbps(500MB/s) 超高速(Super-Speed) 5V/900mA 2008年11月 / 2013年12月 USB 3.1Gen 2 10Gbps(1280MB/s)[2] 超高速+(Super-speed+) 20V/5A 2013年12月 表1 USB发展情况 2.2 USB现状 USB 3.0是一种USB规范,该规范由英特尔等公司发起。 USB 3.0 也被认为是SuperSpeedUSB——为那些与PC或音频/高频设备相连接的各种设备提供了一个标准接口。只是个硬件设备[2],计算机内只有安装USB3.0相关的硬件设备后才可以使用USB3.0相关的功能!从键盘到高吞吐量磁盘驱动器,各种器件都能够采用这种低成本接口进行平稳运行的即插即用连接,用户基本不用花太多心思在上面。新的USB 3.0在保持与USB 2.0的兼容性的同时,还提供了下面的几项增强功能: 1)极大提高了带宽——高达5Gbps全双工(USB2.0则为480Mbps半 双工)。 2)实现了更好的电源管理。 3)能够使主机为器件提供更多的功率,从而实现USB——充电电池、LED照明和迷你风扇等应用。 4)能够使主机更快地识别器件。 5) 新的协议使得数据处理的效率更高。 USB 3.1是最新的USB规范,该规范由英特尔等大公司发起。与现有的USB技术相比,新USB技术使用一个更高效的数据编码系统,并提供一倍以上的有效数据吞吐率(USB IF协会)。它完全向下兼容现有的USB连接器与线缆。 USB 3.1作为下一代的USB传输规格,通常被称为“SuperSpeed+” ,将在未来替代USB 3.0。 1) USB 3.1(SuperSpeed+)将供电的最高允许标准提高到了20V/5A,供电100W。提供更快的充电。 2) USB 3.1支持高达10Gbps的传输速率,具有更快的传输速度。 3) USB 3.1新增USB A/V影音传输,支持手机显示输出。 USB 3.1是一个万能的通用接口,是手机、平板等小型设备所需要的,能够极大提升设备的连接性。而从目前来看,USB 3.1中的Type-C最有可能成为未来的连接标准,提供数据传输、外设连接、显示输出等一体化的连接方案。 3 USB分类 Type-A:标准的Type-A是电脑、电子配件中最广泛的介面标准,鼠标、U盘、数据线上大的一方都是此接口,体积也最大。 Type-B:一般用于打印机、显示器USB HUB等诸多外部USB设备 Type-C:它拥有比Type-A及Type-B均小得多的体积,其大小甚至能与Mini-USB及Micro-USB相媲美,是最新的USB接口外形标准。另外,Type-C是一种既可以应用在PC(主设备)又可以应用在外部设备(从设备)的接口类型,这是划时代的。 伴随USB2.0传输协议诞生也衍生了Mini-USB及Micro-USB接口。它们也都分别分为Type-A和Type-B[3]。到了USB3.0时代,由于传输速度的提升带来了针脚位的提升,因此仅有Type-A USB3.0接口保持与以往形状一样,Type-B和Micro-USB都改变了外形(体积增大)。 4 USB接口回路电路设计 笔记本一般使用的是Type-A和Type-C 类型母口。对于Type-A 类型接口,配备USB 3.0接口。回路如下图1所示 图片 Type-A接口在硬件回路上由一组USB2.0差分信号信号USB_PN2, USB_PP2以及两组USB 3.0差分信号USB32_RX_N, USB32_RX_P, USB32_TX_N, USB32_TX_P组成。在功能上该接口向下兼容USB2.0功能。一般USB的POWER接 5VS或5VA,USB差分线接BEAD或者共模电感一般为EMI需要。末端接TVS是安规要求。 对于Type-C接口回路如下: 图片 图2 Type-C接口回路 在NFSV15XX系列机种上,Type-C 3.0和Type-C 3.1共用同一接口。由于现有平台PCH没有USB3.1接口[4],故在使用USB3.1通信时需要外加一个转换芯片ASM1142。在NFSV15XX上Type-C3.1包含USB3.1输出传输的功能,但是不支持5V/20A供电输出。同Type-A接口一样,差分信号线接BEAD或者共模电感一般为EMI需要。末端接TVS是安规要求。 kpunhddv.png图片 图3 USB POWER设计 在电脑插入adapter或者battery时候,+3.3VA_PCH提供Enable信号 ,5VA(5VS)电源正常供电。在末端加保险丝,进行过流保护。 5 USB协议 5.1 概述 USB网络采用阶梯式星形拓扑结构,如图示。一个USB网络中只能有一个主机。主机内设置了一个根集线器,提供了主机上的初始附属点。主机定时对集线器的状态进行查询。当一个新设备接入集线器时,主机会检测到集线器状态改变,主机发出一个命令使该端口有效并对其进行设置。位于这个端口上的设备进行响应,主机收到关于设备的信息,主机的操作系统确定对这个设备使用那种驱动程序,接着设备被分配一个唯一标识的地址,范围从0~127,其中0为所有的设备在没有分配惟一地址时使用的默认地址。主机向它发出内部设置请求。当一个设备从总线上移走时,主机就从其可用资源列表中将这个设备删除。总的来说USB网络由主机和设备组成。 5.2 概括 kpunhyf8.png图片 5.3 USB主机 USB的所有数据通信(不论是上行通信还是下行通信)都由USB主机启动,所以USB主机在整个数据传输过程中占据着主导地位。在USB系统中只允许有一个主机。从开发人员的角度看,USB主机可分为三个不同的功能模块:客户软件、USB系统软件和USB总线接口。 1) 客户软件 客户软件负责和USB设备的功能单元进行通信,以实现其特定功能。一般由开发人员自行开发。客户软件不能直接访问USB设备,其与USB设备功能单元的通信必须经过USB系统软件和USB总线接口模块才能实现。客户软件一般包括USB设备驱动程序和界面应用程序两部分[5]。 2)USB系统软件 USB系统软件负责和USB逻辑设备进行配置通信,并管理客户软件启动的数据传输。USB逻辑设备是程序员与USB设备打交道的部分。USB系统软件一般包括USB总线驱动程序和USB主控制器驱动程序这两部分。这些软件通常由操作系统提供,开发人员不必掌握。 3)USB总线接口 USB总线接口包括主控制器和根集线器两部分。根集线器为USB系统提供连接起点,用于给USB系统提供一个或多个连接点(端口)。主控制器负责完成主机和USB设备之间数据的实际传输,包括对传输的数据进行串行编解码、差错控制等。该部分与USB系统软件的接口依赖于主控制器的硬件实现,开发人员不必掌握。 5.3 USB设备 一个USB设备由三个功能模块组成:USB总线接口、USB逻辑设备和功能单元。这里的USB总线接口指的是USB设备中的串行接口引擎(SIE);USB逻辑设备被USB系统软件看作是一个端点的集合;功能单元被客户软件看作是一个接口的集合。SIE、端点和接口都是USB设备的组成单元。为了更好地描述USB设备的特征,USB提出了设备架构的概念。从这个角度来看,可以认为USB设备是由一些配置、接口和端点组成的,即一个USB设备可以含有一个或多个配置,在每个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。其中,配置和接口是对USB设备功能的抽象,实际的数据传输由端点来完成。在使用USB设备前,必须指明其采用的配置和接口。这个步骤一般是在设备接入主机时设备进行自举时完成的,我们在后面会进一步介绍。USB设备使用各种描述符来说明其设备架构,包括设备描述符、配置描述符、接口描述符、端点描述符以及字符串描述符,它们通常被保存在USB设备的固件程序中。 5.4 物理特性 USB通信格式: 图片 图5 在USB电缆上使用双向不归零编码和差动信号的传输 USB的数据包使用反向不归零编码(NRZI)。上图描述了在USB电缆段上传输信息的步骤。反向不归零编码由传送信息的USB代理程序完成;然后,被编码的数据通过差分驱动器送到USB电缆上;接着,接收器将输入的差分信号进行放大,将其送给解码器。使用该编码和差动信号传输方式可以更好地保证数据的完整性并减少噪声干扰。 图片 图6 反向不归零编码 使用反向不归零编码方式可以保证数据传输的完整性,而且不要求传输过程中有独立的时钟信号。反向不归零编码不是一个新的编码方式。它在许多方面都有应用。上图给出了一个数据流和编码之后的结果。在反向不归零编码时,遇到“0”转换,遇到“1”保持。反向不归零码必须保持与输入数据的同步性,以确保数据采样正确。反向不归零码数据流必须在一个数据窗口被采样,无论前一个位时间是否发生过转换。解码器在每个位时间采样数据以检查是否有转换。 kpunn3gg.png图片 图7 在USB电缆上使用双向不归零编码和差动信号的传输 若重复相同的“1”信号一直进入时,就会造成数据长时间无法转换,逐渐的积累,而导致接收器最终丢失同步信号的状况,使得读取的时序会发生严重的错误。因此,在NRZI编码之间,还需执行所谓的位填充的工作。位填充要求数据流中如果有连续的六个“1”就要强行转换。这样接收器在反向不归零码数据流中最多每七个位就检测到一次跳转。这样就保证了接收器与输入数据流保持同步。反向不归零码的发送器要把“0”(填充位)插到数据流中。接收器必须被设计成能够在连续的六个“1”之后识别一个自动跳转,并且立即扔掉这六个“1”之后的“0”位。 检测设备连接和速度:在USB设备连接时,USB系统能自动检测到这个连接,并识别出其采用的数据传输速率。USB采用在D+或D-线上增加上拉电阻的方法来识别低速和全速设备。USB支持三种类型的传输速率:1.5Mb/s的低速传输、12Mb/s的全速传输和480Mb/s的高速传输。如图后面图所示。当主控制器或集线器的下行端口上没有USB设备连接时,其D+和D-线上的下拉电阻使得这两条数据线的电压都是近地的(0V);当全速/低速设备连接以后,电流流过由集线器的下拉电阻和设备在D+/D-的上拉电阻构成的分压器。由于下拉电阻的阻值是15KΩ,上拉电阻的阻值是1.5KΩ,所以在D+/D-线上会出现大小为(Vcc*15/(15+1.5))的直流高电平电压。当USB主机探测到D+/D-线的电压已经接近高电平,而其它的线保持接地时,它就知道全速/低速设备已经连接了。 kpunne0a.png图片 图8 检测设备连接和速度 6 USB通信协议 6.1 包 包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP)。 1.SYNC字段:由8位组成,作为每个数据封包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为00000001。 2.PID字段:用来表示数据封包的类型。包标识符中的校验字段是通过对类型字段的每个位求反码产生的。 图片 表2 PID字段包的类型 数据字段:是用来携带主机与设备之间要传递的信息,其内容和长度根据包标识符、传输类型的不同而各不相同。在USB包中,数据字段可以包含设备地址、端点号、帧序列号以及数据等内容。在总线传输中,总是首先传输字节的最低位,最后传输字节的最高位。 (1) 设备地址(ADDR)数据域 ADDR数据域由7位组成,可用来寻址多达127个外围设备。 (2) 端点(ENDP)数据域 ENDP数据域由4位组成。通过这4个位最多可寻址出32个端点。这个ENDP数据域仅用在IN、OUT与SETUP令牌信息包中。对于慢速设备可支持端点0以及端点1作为中断传输模式,而全速设备则可以拥有16个输入端点(IN)与16个输出端点(OUT)共32个端点。 (3) 帧序列号 当USB令牌包的PID为SOF时,其数据字段必须为11位的帧序列号。帧序列号由主机产生,且每个数据帧自动加一,最大数值为0x7FF。当帧序列号达到最大数时将自动从0开始循环。 (4) 数据 它仅存于DATA信息包内,根据不同的传输类型,拥有不同的字节大小,从0到1023字节(实时传输)。 4.循环冗余码CRC字段由不同数目的位所组成。根据不同的信息包类型,CRC数据域由不同数目的位所组成。其中重要的数据信息包采用CRC16的数据域(16个位),而其余的信息包类型则采用CRC5的数据域(5个位)。其中的循环冗余码校验CRC,是一种错误检测技术。由于数据在传输时,有时候会发生错误,因此CRC可根据数据算出一个校验值,然后依此判断数据的正确性 。 5.包结尾字段即发送方在包的结尾发出包结尾信号。USB主机根据EOP判断数据包的结束。 6.2 信息包格式 1.令牌(token)包:在USB系统中,只有主机才能发出令牌包。令牌包定义了数据传输的类型,它是事务处理的第一阶段。令牌包中较为重要的是SETUP、IN和OUT这三个令牌包。它们用来在根集线器和设备端点之间建立数据传输。一个IN包用来建立一个从设备到根集线器的数据传送,一个OUT包用来建立从根集线器到设备的数据传输[6]。 2.数据(data)包:数据封包含有4个域:SYNC、PID、DATA与CRC16。DATA数据域的位值是根据USB设备的传输速度及传输类型而定,且须以8字节为基本单位。也就是,若传输的数据不足8字节,或传输到最后所剩余的也不足8字节,仍须传输8字节的数据域。 3.握手(Handshake)包:握手信息包是最简单的信息包类型。在这个握手信息包中仅包含一个PID数据域而已。 6.3 事务 定义:在USB上数据信息的一次接收或发送的处理过程。类型:事务处理的类型包括输入(IN)事务处理、输出(OUT)事务处理。设置(SETUP)事务处理和帧开始、帧结尾等类型。 处理流程:在输出(OUT)事务处理和设置(SETUP)事务处理中,紧接着SETUP和OUT包后的是DATA包,DATA0和DATA1包是交替地发送的,在DATA包后面,设备将回应一个握手信号,如果设备可以接收数据,就回应ACK包,如果设备忙,就回应NAK包,如果设备出错,则回应STALL包;在IN事务中,IN包后面是设备发来的DATA包或NAK包或STALL包,若设备忙或出错,就发NAK包或STALL包给主机,若设备数据准备好发送,则发DATA包,DATA0和DATA1包也是交替地发送的,紧接着DATA包后面是主机发给设备的握手包,ACK表示主机可以接收数据,NAK包代表主机忙,STALL包代表主机出错。 6.4 USB传输类型 在USB的传输中,制定了4种传输类型:控制传输、中断传输、批量传输以及等时传输。控制传输类型分为2~3个阶段:设置阶段、数据阶段(无数据控制没有此阶段)以及状态阶段。根据数据阶段的数据传输的方向,控制传输又可分为3种类型:控制读取(读取USB描述符)、控制写入(配置USB设备)以及无数据控制。 1.控制传输:控制传输是USB传输中最重要的传输。它包含3种类型:控制读取、控制写入以及无数据控制。这3种控制传输类型又分为2~3个阶段:设置阶段、数据阶段(无数据控制没有此阶段)以及状态阶段。 2.实时传输:实时传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上。实时传输一般用于麦克风、喇叭等设备。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传。 3.批量传输:用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等。 4.中断传输:中断传输方式总是用于对设备的查询,以确定是否有数据需要传输。因此中断传输的方向总是从USB设备到主机,常用于如键盘、游戏手柄等。 参考文献: [1]赵晓娜.一种基于STM32的USB接口数据通信方法研究[J].山西电子技术,2021(02):85-87. [2]苗旺,李彬华,王锦良,陈柄宇,高诗竹.基于USB2.0总线数据侦听的实时幸运成像系统~(*)[J/OL].天文研究与技术:1-12[2021-06-13].https://doi.org/10.14005/j.cnki.issn1672-7673.20210306.001. [3]陶小亮.基于USB总线的低成本舵偏角采集系统设计与应用[J].电子测量技术,2021,44(02):43-47. [4]赵一超.基于USB数字电离层斜测接收机设计[J].电脑知识与技术,2020,16(32):1-5. [5]曾妍. 汽车USB充电器参数检测台设计[D].长春工业大学,2020. [6]Realtek Semiconductor Corp.; Patent Issued for USB Interface System Capable Of Automatically Adjusting Connection Speed And Power Consumption Capabilities And Method (USPTO 10,684,668)[J]. Electronics Newsweekly, 2020, : 6967-.
通信&信息处理
刘航宇
5年前
0
888
2
嵌入式与应用知识点学习&复习提纲
摘要:本文为嵌入式与应用知识点学习复习提纲,涵盖嵌入式系统分层、特点、gcc编译、Linux命令、Vi编辑器、数组指针、文件IO、进程、有名管道、socket、CPU、SOC等知识点,并提供相关代码示例。自己整理的复习提纲 目录 部分程序讲解 培养目标1提示联网和UI必须答,不答0分,少答扣分 培养目标2 培养目标3 培养目标4 培养目标5 培养目标6 培养目标7 LED会有变动,后面有时间出教程,希望能先理解下面程序这个是什么意思 培养目标8 部分程序讲解 培养目标1 1.嵌入式系统分三层:应用、内核、硬件层。ARM为硬件层、驱动内核层。 2.嵌入式系统与PC的区别 讲解:嵌入式系统一般指非 pc 系统,有计算机功能但又不称之为计算机的设备或器材。它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。简单地说,嵌入式系统集系统的应用软件与硬件于一体,类似于 pc 中 bios 的工作方式,具有软件代码小、高度自动化、响应速度快等特点,特别适合于要求实时和多任务的体系。嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成,它是可独立工作的“器件”。 答案:下面3点缺一不可 隐藏内容,请前往内页查看详情 3.嵌入式系统的特点 1)联网:嵌入式设备支持网络连接,可实现物联。 2)UI:嵌入式设备更多的采用是自定义的简单UI。 提示联网和UI必须答,不答0分,少答扣分 3)包含专用调试电路 4)具有完整的系统测试和可靠性评估体系 培养目标2 4.gcc编译hello.c为hello 答: gcc hello.c -o hello或 gcc -o hello hello.c 5.Linux 删除文件夹命令和CD命令含义 rmdir 目录 或者“rm -rf /目录” cd命令:切换当前目录至其它目录。 知识点补充: 隐藏内容,请前往内页查看详情 6.【判断题】Vi有三种基本工作模式:写程序在文本输入模式。 (对) 知识点补充: 隐藏内容,请前往内页查看详情 培养目标3 7.int p[n]:数组;int *p[n]指针; 必考补充:数组指针和指针数组区分: 隐藏内容,请前往内页查看详情 培养目标4 8.文件IO中write返回正确值为:向内核文件fd中写的字节数 参考P84 培养目标5 9.程序分析题 (1)运行时间小于20秒有几个进程? (2)什么是僵尸进程?什么孤儿进程,20秒后会产生什么? #include "stdio.h" #include "stdlib.h" int main() { int i; int pid; pid = fork(); if(pid > 0) { while(1); } if(pid == 0) { for(i=0;i<20;i++) { printf("我爱刘航宇%d次了\n",i); sleep(1); } } return 0; }答: 隐藏内容,请前往内页查看详情 培养目标6 10.创建有名管道文件函数是: mkfifo pEQzCid.png图片 11.有名管道,管道文件名chat.txt,编写A.c与B.c单向聊天 (1)B发A收 (2)程序具备退出功能 答:本题不要求实现过程可以不写,只写程序,至于过程学习参考本站其它文章 管道程序: #include "stdio.h" int main() { int ret; ret = mkfifo("./chat.txt",0777); if(ret == -1) { printf("mkfifo error\n"); return -1; } return 0; }A端程序:(收方!!!) #include "stdio.h" #include "fcntl.h" #include "string.h" int main() { int fd; int i; char buf[32] = {0}; fd = open("./chat.txt",O_RDONLY,0777); if(fd == -1) { printf("open error\n"); return -1; } //start read while(1) { read(fd,buf,32); if(buf[0] == 'q') { break; } printf("buf = %s\n",buf); for(i = 0 ;i < 32; i++ ) { buf[i] = 0; } } close(fd); return 0; }B端程序(发方): 隐藏内容,请前往内页查看详情 培养目标7 12 socket函数,UDP通信,参数: int type赋值为 SOCK_DGRAM 13 SOC全称是 System on Chip称为芯片级系统或片上系统 14 判断:AHB总线下挂接都是高速模块,如LCD控制器、中断控制器等 (×) 15 判断ARM 公司不生产芯片 (√) 16 简答:CPU、SOC和嵌入式产品关系: 三个要点:1 CPU是一台计算机的运算核心和控制核心。(第一句必答,后面可以简写)CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。主要功能是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指对中央处理器的编程。2.SOC单片系统或片上系统是一个将电脑或其他电子系统集成到单一芯片的集成电路。(第一句必答,后面可以简写)单片系统可以处理数字信号、模拟信号、混合信号甚至更高频率的信号。单片系统常常应用在嵌入式系统中。单片系统的集成规模很大,一般达到几百万门到几千万门。SoC 可以基于 MCU 或 MPU,并将提供执行某些类型的应用程序所需的一切。隐藏内容,请前往内页查看详情 17.综合题:LED问题(本文推荐用电脑或平板观看,手机可能看不清) 预测题目:点亮GPF4的LED灯,实现其亮灭,将下面程序3个空区域补充完整。 (去年题目是点亮GPF4、5、6。看明白下面程序后可以同学自行尝试做一下,不过据说今年考点亮一个) 平台原理图: pEQzPJA.png图片 例图: 图片 控制与数据端口 pEQzFzt.png图片 程序:(可能与部分同学拍的略微不同,但是程序是一个意思,变量我图快方便写换了一部分,不影响,while循环改成for也是一个道理,这个东西很灵活 ::(勉强) ) //#include "global.h" #define GPFCON 0x56000050 #define GPFDAT 0x56000054 #define MPLLCON 0x4C000004 #define CLKDIVN 0x4C000014 void init_system_clock() { int *p; p = (int *)CLKDIVN; *p = 0x03; // FCLK:HCLK:PCLK=4:2:1, HDIVN=1,PDIVN=1 __asm__ { mrc p15, 0, r1, c1, c0, 0 orr r1, r1, #0xc0000000 mcr p15, 0, r1, c1, c0, 0 } p = (int *)MPLLCON; *p = (0x5c<<12)|(0x01<<4)|(0x02); } void mymain() { int *p; int i; init_system_clock(); //FCLK:HCLK:PCLK=200:100:50MHZ (1)------------ while(1) { (2)------------ for(i = 0 ;i < 10000; i ++); (3)------------ for(i = 0 ;i < 10000; i ++); } return ; }解答: 隐藏内容,请前往内页查看详情 培养目标8 18.rmmod功能:将驱动程序从liunx内核卸载;lsmod:查看内核中存在哪些模块 19.判断:驱动程序设备号分主设备号和次设备号 (√) 20.判断:驱动程序和应用程序一样有main函数 (×) 觉得本文对你有帮助,请点赞哦
嵌入式&系统
刘航宇
5年前
263
6,464
75
数字图像处理学习笔记
摘要:本文介绍了数字图像处理中的多种算法和概念,包括SUSAN角点检测、边缘检测、图像匹配、图像缩放、图像处理层次、滤波器应用等,并提供了相应的原理和示例。 1.简述SUSAN角点检测算法的原理。对于如下图所示的大的尖角,设计一种估测其角度的方法 原理: SUSAN算法是一种直接利用灰度值进行角点检测的算法,它基于一个圆形模板,统计以每个像素为中心的模板邻域的灰度值与中心点灰度值相近点的个数。 估测办法: 1)先选取半径为R1圆形模板如下图1所示,将选取模板进行在图像的每个像素点上移动; 2)当模板核子位于图像中亮度一致的区域内时,SUSAN面积最大,其值为圆形模板的面积,随着模板核子离图像边缘越来越近,其面积越来越小。 3) 当模板中心靠近角点时,其面积值进一步减少,当模板中心落在角点上时,其面积达到局部最小值。 4) 根据C(r0,r)以及面积占比关系得出角度α1,然后分别选取R2、R3、R4模板重复以上过程,记录角度α2,α3,α4,α等于4个取平均 图片 2.简述利用一阶差分算子、二阶差分算子对图像边缘进行检测的依据;边缘检测中,为了减少噪声对边缘检测产生的影响,可采取那些措施? 检测依据: 边缘是图像上灰度变化最明显的地方,边缘检测利用此特点,对图像各像素点进行求微分或二阶微分来定位边缘像素点。由灰度变化特点,可将边缘类型分为阶梯状、脉冲状和屋顶状三种。对于阶梯状,图像边缘点对应一阶微分图像的峰值和二阶微分图像的零交叉处;对于脉冲状和屋顶状边缘,边缘点对应一阶导数的零交叉和二阶导数的峰值。如图2所示。其中边缘检测算子是利用图像边缘的突变性质来检测边缘的。主要分为两种类型,1)一阶导数为基础的边缘检测算子,通过计算图像的梯度值来检测图像边缘,如:差分边缘检测、Roberts 算子、Sobel 算子、Prewitt 算子;2)二阶导数为基础的边缘检测算子,通过寻求二阶导数中的过零点来检测边缘, 如:Laplacian 算子、LOG 算子、Canny 算子。 图片 使用该权值矩阵(高斯核)对图像做“卷积”(协相关,对应位置相乘最后求和得到一点的像素值),得到新的图像矩阵。 3.在采用直方图匹配的方法进行图像匹配时,出现如下图所示的结果(原图为彩色)。试分析: 图中哪些匹配结果是正确的,哪些是错误的? 试设计出避免错误匹配的改进方法。 图片 4.图像的数据量与哪些因素有关?试阐述采样与量化所遵循的一般原则 答: (1)图像分辨率;采样率;采样值。 (2)采样原则:采样是把空域上或时域上连续的图像(模拟图像)转换成离散采样点(像素)集合(数字图像)的操作,这些值可以是均匀间隔也可以是。采样越细,像素越小,越能精细地表现图像。 量化原则: 量化是把像素的灰度(浓淡)变换成离散的整数值的操作。量化越细致,灰度级数(浓淡层次)表现越丰富。 5.设计一组3×3模板,使其可以用于检测二值图像中的各种角点。 图片 6.在图像比例缩放变换中, 如果放大倍数太大, 按照最近邻域法处理会出现马赛克效应。 该问题有无办法解决或改善?如果有,请给出方案。 答: 有,方案:比例缩放所产生的图像中的像素可能在原图像中找不到相应的像素点,需要进行插值处理。 (1)最邻近法,以最邻近像素插入缺口即可 (2)双线性插值法更好,求出周围4个像素点距离比,根据该比率,由4个领域的像素灰度值进行双线性插值。 7.试阐述图像处理学三个层次的基本内容及相互关系。 图片 8.试讨论用于图像平滑处理的滤波器与用于图像锐化处理的滤波器之间的区别与联系。 答:1.相同点:都能减弱或消除傅里叶空间的某些分量,而不影响或较少影响其他分量,从而达到增强某些频率分量的效果。 2.不同点:频率滤波器减弱或消除了傅里叶空间的高频分量,所以达到了增强某些低频分量、平滑图像中细节的效果。锐化滤波器减弱或消除傅里叶空间的低频分量,所以达到了增强了高频分量、锐化图像中细节效果。 3.联系:两者效果相反,互为补充,从原始图像中减去平滑滤波器的结果得到锐化滤波器的效果,而从原始图像中减去锐化滤波器的结果则可以得到平滑滤波器的效果。 9.根据下列要求作图: (1) 画出用1个半径为2的圆形结构元素膨胀1个8×8的正方形的示意图; (2) 画出用1个半径为2的圆形结构元素腐蚀1个8×8的正方形的示意图。 结构元素的参考点为圆形结构的中心点。 图片 10 对于下图所示的边界,计算其8方向链码及差分链码。 图片 有任何问题或者批评建议可以评论留言或者QQ与我交流
通信&信息处理
刘航宇
5年前
8
1,314
14
2021-05-01
matlab实现灰度图像空间域滤波
摘要:本文介绍了使用Matlab实现灰度图像空间域滤波的方法,包括均值、中值和高斯滤波,并比较了不同滤波方案的效果。实验通过读取图像、添加噪声、应用不同滤波器,展示了滤波前后图像的变化。实验目的:掌握采用图像灰度图像空间域平滑、去噪的一般方法方法,并编程实现。 实验内容:编程实现灰度图像空间域滤波:至少包括 3×3、5×5窗口的均值滤波与中值滤波,并比较不同方案增强后的效果及影响因素。 实验平台:Matlab 实验代码: %matlab实现灰度图像空间域滤波,自定义窗口的均值、中值、高斯滤波,189064238刘航宇 try %步骤一:彩色、灰度变换 h=imread('D:\图片\image\liu.jpg'); %读入彩色图片 subplot(2,2,1),imshow(h);title('原图'); %显示原图像 c=rgb2gray(h); %把彩色图片转化成灰度图片,256级 subplot(2,2,2),imshow(c),title('原始灰度图象'); %显示原始图象 g=imnoise(c,'gaussian',0.1,0.002); %加入高斯噪声 subplot(2,2,3),imshow(g),title('加入高斯噪声之后的图象'); %显示加入高斯噪声之后的图象 %步骤二:用系统预定义滤波器进行均值滤波 n=input('请输入均值滤波器模板大小\n'); A=fspecial('average',n); %生成系统预定义的3X3滤波器 Y=filter2(A,g)/255; %用生成的滤波器进行滤波,并归一化 figure,imshow(Y),title('用系统函数进行均值滤波后的结果'); %显示滤波后的图象 %步骤三:用Matlab系统函数进行中值滤波 n2=input('请输入中值滤波的模板的大小\n'); Y1=medfilt2(g,[n2 n2]); %调用系统函数进行中值滤波,n2为模板大小 figure,imshow(Y1),title('用Matlab系统函数进行中值滤波之后的结果'); %显示滤波后的图象 %步骤四:用matlab系统函数进行高斯滤波 n3=input('请输入高斯滤波器的均值\n'); k=input('请输入高斯滤波器的方差\n'); A2=fspecial('gaussian',k,n3); %生成高斯序列 Y2=filter2(A2,g)/255; %用生成的高斯序列进行滤波 figure,imshow(Y2),title('用Matlab函数进行高斯滤波之后的结果'); %显示滤波后的图象 catch %捕获异常 disp(lasterr); %如果程序有异常,输出 endps:方差填1,2,3,4任意一个即可 步骤及其实验现象: 图片 然后输入模板大小 图片 然后产生三个图窗 图片 图片 图片 然后输入 clc;clear 重新输入本代码,完成5*5模板,在此不再赘述。 结果分析: 请自行上网查询均值、中值、高斯滤波区别、学习。
通信&信息处理
刘航宇
5年前
0
597
5
上一页
1
2
3
4
下一页