信号处理算法设计与验证_第1页
信号处理算法设计与验证_第2页
信号处理算法设计与验证_第3页
信号处理算法设计与验证_第4页
信号处理算法设计与验证_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信号处理算法设计与验证信号处理专业同学 之 算法开发 新手上路 专题讲座杜伟韬广播电视数字化教育部工程研究中心中国传媒大学2009 11.4 本讲座的面向对象 本讲座的内容 算法开发中工具链的使用 编写结构化的MATLAB仿真 MATLAB算法向C算法的映射和迁移 混合开发环境下的算法验证与调试本讲座面向对象 使用MATLAB开发算法的同学 完成理论算法设计后,需要把算法在某种处理器平台上实现的同学带着问题来听课你知道小明是如何做的么?信号处理应用的场景设想 ,关于小明信号处理算法不会独立存在,它需要某些载体和方法,让数据流入到信号处理系统之中,处理之后再流出去小明是一个品学兼优的电子系二年级

2、同学,他先后完成了以下的事情1、用MATLAB的信号处理工具箱,设计了一个64阶、3KHz处的FIR低通滤波器,用MATLAB程序把流行音乐歌曲WAV文件中的人声部分滤出来。2、还是用MATLAB环境,滤波器的系数不变,但是滤波器运算的部分用C程序实现,因为C的执行要快一些,并且MATLAB里面可以编译并且调用C程序3、为了更快,小明把浮点版本的C程序修改成定点版本的C程序了4、后来小明学习了数字信号处理器DSP的知识,老师奖励给他一个开发板,于是小明可以对音频线输入的经过ADC转换的数字声音信号进行实时的低通滤波处理,然后再用DAC把数字音频信号转换成模拟信号送到音频输出线上去,他把这个开发

3、板连接在电脑音频输出孔和音箱之间,听着不一样的音乐作品,小明快乐的享受着自己的小成果提问,小明除了竖着耳朵听之外,有什么方法能精确一些的分析、评价自己做的滤波器的计算结果是否正确呢本讲座的内容 算法开发中工具链的使用 编写结构化的MATLAB仿真 MATLAB算法向C算法的映射和迁移 嵌入式开发环境下的算法验证与调试一家之言 仅供参考关于工具的使用方法,最详细的说明应当是工具的手册。本讲座的焦点在于,如何用一些 算法开发中工具链的使用 编写结构化的MATLAB仿真 MATLAB算法向C算法的映射和迁移 嵌入式开发环境下的算法验证与调试算法中的工具链 算法的开发流程 工具的用途 各层环境之间的差

4、异 (matlab,c,目标cpu) 调试面临的问题(数据一致性分析)算法开发的流程理论算法设计参考文献,公式推导,算法可行性,开发快速算法、浮点仿真,算法的理论性能MATLAB C定点算法设计分析精度、动态范围,确定字长,数制系统、定点仿真MATLAB C面向CPU算法设计发挥CPU运算单元存取通道的并行度,利用CPU的特定库函数,指令集C汇编问题:为什么不直接在目标平台上开发算法,这样的结果更加真实,似乎离着最终结果也更加接近?采用多个工具开发的原因问题本身是分层次的 理论上应当选取哪些算法?推导出来额数学公式正确么?有快速算法么?如何验证理论计算和快速算法的正确性? 定点策略应该如何制定

5、?设定的动态范围和精度够么? 应该选取哪些处理器的指令集呢?哪些算法和数据应当放在处理器的片内/片外呢?解决问题也是有顺序的 一次面临太多问题,普通人无法思考的面面俱到。 集中优势兵力、各个击破。 层次化的设计,上层为底层提供需求,底层约束上层的可行性工具本身也是有特点的 容易生成激励信号和测试环境模型,评价结果性能 执行速度较快,跨平台的移植能力较好 容易导出大量的节点信息,便于分析和调试 面向最终硬件结构,最能反映出真实结果数据一致性的验证文件传递法激励信号目目标标算算法法浮浮点点版版本本目目标标算算法法定定点点版版本本定点化输出浮点信号输出定点信号浮点输入数据文件对比/误差分析目目标标算

6、算法法C C定定点点版版本本目目标标算算法法C C浮浮点点版版本本定点输入数据文件浮点输出数据文件定点输出数据文件加载到Matlab中Matlab环境C环境目标CPU环境目目标标算算法法C CP PU U平平台台版版本本外设输入数据外设输出数据控制程序 不是所有的仿真都必须要做,根据情况有选择的做一部分就可,因为最终要做的是目标CPU环境下的算法代码数据一致性的验证内存传递法激励信号目目标标算算法法浮浮点点版版本本目目标标算算法法定定点点版版本本定点化输出浮点信号输出定点信号对比/误差分析目目标标算算法法C C定定点点版版本本目目标标算算法法C C浮浮点点版版本本MEX接口MEX接口Matla

7、b环境C环境Matlab里面可以编译和调用C程序,这称为MEX(Matlab扩展)我们提供的fft参考设计中 包括 文件数据传递和MEX数据传递性能,是对比出来的 什么东西之间互相对比 首先有一个理想性能的指标,比如从公式中推导和分析出来的性能。 浮点算法模型的性能。不同字长配置的定点算法的性能。目标处理器平台的算法性能。 怎么对比 根据你的算法应用情况,关注特定的指标参数,比如,信噪比,误码率,最大误差,平均误差等等。理论算法设计 制定需求 输入的信号特性,输出的信号数据特性 处理速度的需求,资源开销的需求 推导算法 选取符合需求的算法 推导算法标号系统和运算规则 研究算法的存储结构 仿真算

8、法 使用仿真工具进行浮点仿真 确定最终目标算法的公式 该仿真结果即为理性情况下系统的性能10( )() ( )Niy nx ni h i定点算法设计 分析数据动态范围 信号数值边界分析 数值定标 用多少比特字长表示各个数据 符号位,整数部分,小数部分 运算单元特性:溢出,舍入模式 仿真验证 比特精确的参考模型 用于电路仿真或汇编优化对照所谓定点,就是一种根据需要自定义的整数的含义,举例来说19491001虽然是一个整数,但是在特定的环境下也可以表示一个日期。信号处理中的定点就是规定了一个整数的整数位和小数位,例如规定0 x1002,整数和小数部分各占8个比特。这是程序员所定义的,但对于编译器是

9、透明的,处理器仍然按照整数乘加运算对这些数据进行操作。很神奇是么?我小时候还以为电视机里面藏着人呢。举例: 矢量点积X15.X1X0Y15.Y1Y0Z+ X(-1,+1) Y(-1,+1) T(-1,+1) Z(-16,+16)X,Y (1,0,15)T(1,0,15)(S,IL,FL)Z(1,3,15)16位CPU:X,Y (1,0,15) T(1,0,15)Z(1,3,12)32位CPU:X,Y (1,16,15) T(1,16,15) Z(1,16,15)150)()(iiyixz很多时候,32位CPU上的定点算法开发起来更容易,甚至不用考虑加法的溢出 算法开发中工具链的使用 编写结构化

10、的MATLAB仿真 MATLAB算法向C算法的映射和迁移 嵌入式开发环境下的算法验证与调试结构化的MATLAB仿真 什么是结构化? 为什么要结构化? MATLAB数据的结构化什么是结构化?A 程序1中的变量BCDBCDA程序2中的变量所谓结构化的程序就是指,1 过程结构化,这是通过函数调用来实现的,其对立面是用GOTO语句进行满天飞。2存储结构化,这是利用结构体之类的语法进行变量之间依存关系的捆绑,与之相对的是用全局变量随意命名为什么要结构化 1、过程结构化的意义是封装完成特定功能的代码过程,这个重要性很明显。 2、数据的结构化容易被忽视 尤其是Matlab,可以随意开辟新变量 当你面对几十个

11、、上百个全局变量的时候你甚至记不清某个变量的用途,哭吧。 所以要把数据结构化 例如变量“器官”的子变量有“心”,“肝”,“肺”等 和C的类与对象有些类似Matlab的数据结构化 Matlab可以有结构体对象 例如,在命令行敲入“s.a=1”,看看会发生什么 关于结构体类型,请从Matlab的帮助文档了解更多情况 结构体可以作为函数调用的参数 例如某个函数,把结构体s的两个成员变量a, b 缩小为0.5倍,可以这样写在文件foo.m中写入function s = foo(s) a = s.a; b = s.b; a = a*0.5; b = b*0.5; s.a = a; s.b = b;end

12、在命令行敲入S1.a = 4; S1.b = 6;S1 = foo(S1);Matlab函数参数的结构化 看看哪个代码风格更好 1、k=foo(a,b,c,d,e,f,g) 2、k=foo(s) / s has sub element a,b,c,d,e,f,g 避免Matlab函数的入口参数过多 1,你可能会记不住有哪些参数 2,如果调用时传递参数的顺序错了就麻烦了 比如 函数原型是k=foo(a,b,c,d,e,f,g) 调用时写成k1=foo(b1,a1,g1,f1,c1,d1,e1) 你觉得不可能?等你的变量名长度大于8个字母的时候就可能了结构化的Matlab仿真包含什么内容 初始化部

13、分 配置部分 算法模型部分 误差分析部分大部分的电子系统都包括 初始化、配置、运行的功能。回顾你的手机,开机的时候为什么比较慢呢?因为在初始化硬件和软件。来电话的时候是否有铃声和振动取决于什么呢?取决于情景模式的配置对吧。对于一个正在开发的系统,为了评价和调试它,我们还要有一些探测、分析系统的输出数据和内部数据的方法。仿真部件的作用激励信号目目标标算算法法浮浮点点版版本本目目标标算算法法定定点点版版本本定点化输出浮点信号输出定点信号对比/误差分析配置激励信号的类型:白噪声、窄带噪声、单音正弦、多音正弦等初始化激励信号的数据配置定点策略,如16位字长,32位字长等初始化算法模型的常量,例如滤波器

14、系数配置算法模型的参数,例如滤波器的通带阻带、过渡带配置分析模块参数,例如谱分析FFT长度,窗函数类型初始化分析模块的常量,例如谱分析窗函数数据通常情况下,电子系统的各个模块都需要配置和初始化,请思考,当你用遥控器配置电视机显示1频道的时候,这个配置命令被解析并转化为高频头的频点配置命令和显像管的台号显示配置命令。但是内部的配置解析命令对用户却是透明、不可见的。我们设计程序的时候也是类似的电子设备的初始化就像运动员的热身,为了在当前模式下运行,需要先准备一些数据或是内存空间等资源结构化Matlab代码的写法 用结构体来封装不同的数据 结构体的嵌套体现数据的包容关系 不同功能的代码过程用函数封装

15、 结构体作为函数参数cfg:配置数据model:算法模型数据init:初始化的数据tb:全部仿真数据滤波器系数激励信号浮点模型定点模型激励配置算法模型配置 算法开发中工具链的使用 编写结构化的MATLAB仿真 MATLAB算法向C算法的映射和迁移 嵌入式开发环境下的算法验证与调试从Matlab到C 为什么要写C代码 写C代码有哪些问题要考虑 如何验证C算法代码 C算法代码的结构是怎样的为什么要写C代码 1、C代码的执行速度快(较Matlab) 2、跨平台移植性好 3、Matlab可以自动把M函数转化为C代码 用自动生成的C代码可以么? 某些时候可以,比如在PC上运行,对执行速度要求较低时 自动

16、生成的C代码可读性相对较差,不好维护 对高效率运行的需求难以满足 对嵌入式环境不太适合 4、所以,我们要自己手工写C代码写C代码有哪些问题要考虑 数据结构 函数功能的划分 有效率的标号和寻址策略C算法函数的数据结构 数据结构的重要性 设计良好的数据结构能够提高代码效率 例如,重用一些已经计算出来的数据,避免再次计算浪费CPU 例如,利于代码算法的人工维护 变量类型的划分 全局变量、常量 局部变量 内存堆和结构体变量 如何划分需要根据特定目标应用,多看优秀的开源算法代码积累经验 可参考 杜伟韬 编写的“规范化的 C算法代码结构”数据结构图Libmad的一部分数据结构例子,这种图表有利于对代码进行

17、认识和维护struct mad_stream streamunsigned char const *bufferunsigned char const *bufendunsigned longskiplenintsyncunsigned long freerateunsigned char const *this_frameunsigned char const *next_framestruct mad_bitptrptrstruct mad_bitptranc_ptrunsigned intanc_bitlenunsigned char(*main_data)MAD_BUFFER_MDLE

18、Nunsigned intmd_lenintoptionsenum mad_errorerrorstruct mad_frameframestruct mad_headerheaderintoptionsmad_fixed_tsbsample23632mad_fixed_t(*overlap)23218struct mad_synthsynthmad_fixed_tfilter222168unsigned intphasestruct mad_pcmpcmstruct mad_bitptranc_ptrunsigned char const*byteunsigned shortcacheuns

19、igned shortleftstruct mad_headerheaderenum mad_layerlayerenum mad_modemodeintmode_extensionenum mad_emphasisemphasisunsigned longbitrateunsigned intsamplerateunsigned shortcrc_checkunsigned shortcrc_targetintflagsintprivate_bitsmad_timer_tdurationstruct*syncstruct mad_streamstreamstruct mad_framefra

20、mestruct mad_synthsynthstruct mad_bitptrptrunsigned char const*byteunsigned shortcacheunsigned shortleftstruct mad_pcmpcmunsigned intsamplerateunsigned shortchannelsunsigned shortlengthmad_fixed_tsamples21152函数功能的划分 重复使用的代码包装到一个函数里 不同功能的代码包装到不同的函数里 区分Init、Run和Close功能的函数 合理掌握函数的代码尺寸 尽量不要太大,尤其是超出你的思考范

21、围的标号和寻址的策略 什么是标号? 区分算法理论概念上的标号描述与实际算法代码中的寻址策略 概念上的标号描述是为了更好理解 代码中的寻址策略是为了更有效率 例如FIR滤波器 概念上是个移位寄存器 实际代码里会真正移动数据么? 那么如何做到移位的效果呢? 答案:不移动数据,移动指针30)()()(iihinxnyDDDh(0)h(1)h(2)h(3)x(n)x(n-1)x(n-2)x(n-3)y(n)x(3)x(2)x(1)x(0)h(0)h(1)h(2)h(3)x(3)x(2)x(1)x(4)x(3)x(2)x(5)x(4)提问 在C版本的FIR中,设有4个数据要移位寄存 用1维数组存储数据

22、最新的数据和最老的数据的位置关系是怎样的。 设最新的数据下标是I,那么最老的数据的下标K和I的关系是什么? 在C代码中用什么表达式通过I计算K?x(3)x(2)x(1)x(0)h(0)h(1)h(2)h(3)x(3)x(2)x(1)x(4)x(3)x(2)x(5)x(4)标号和寻址的总结 概念上的标号系统是给理论算法和数学用的 代码中的寻址策略是概念上标号系统的具体化,但是要有效率和适应处理器情况 好的寻址策略有时会很重要 利用访问的局部性,增加Cache命中率 提高运算的并发性,利用更多的计算单元(尤其是对于SIMD,VLIW结构的CPU))(2)( 1)()2/()2/()(2 )()()

23、( 112/012/0nynynyNihNinxnyihinxnyNiNi例如:分成两部分计算代码寻址策略对缓存命中的影响)(2)( 1)()2/()2/()(2 )()()( 112/012/0nynynyNihNinxnyihinxnyNiNi)(2)( 1)() 12() 12()(2 )2()2()( 112/012/0nynynyihinxnyihinxnyNiNi串行计算的CPU上,哪个算法Cache命中率高如何验证C算法代码 在目标板子或系统中实际运行 在PC上面用数据文件的方法 嵌入到Matlab里面跑混合仿真提问:你认为以上的这些手段各有什么利弊?提示,从观测数据的精细程度,

24、分析数据的难易程度,评价实时性效果,评价算法的真实应用效果的角度来考虑。 算法开发中工具链的使用 编写结构化的MATLAB仿真 MATLAB算法向C算法的映射和迁移 嵌入式开发环境下的算法验证与调试嵌入式环境下的算法开发 资源受限的嵌入式环境 目标处理器上的软件仿真 硬件系统中的实时调试资源受限的嵌入式环境 内存容量小 处理器的片内存储器、板载存储器都比较小 装不下很多的测试数据 平台功能有限 不方便在目标系统上运行复杂的结果分析算法 I/O能力有限 不方便把大量的数据实时传送给PC机进行分析目标处理器上的软件仿真 优点 有充足的虚拟出来的存储器资源 和PC环境交换数据比较快(应用软件之间交换数据) 方便用MATLAB进行结果分析和评价 局限性 通常不带Cache命中的仿真,导致真实度降低 只能看到算法代码的执行速度,无法验证I/O交互的效率,比如无法仿真DMA的过程硬件系统中的实时调试 实时性和数据正确性的矛盾 监测数据需要消耗CPU和RAM资源 消耗了资源会影响实时性 优点 反映最真实的算法性能,包括Cache Miss 带有I/O交互和DMA,能够反映出实时性 局限性 数据的监测难度较大 不方便进行数据分析没有银弹,但有策略 没有万能的调试方法 但是 调试的策略是不变的 望远镜和显微镜并用的方法 采用宏观的观测、评价方法定位(包括猜测?)到出现问题的模块 采

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论