西工大DSP大作业_第1页
西工大DSP大作业_第2页
西工大DSP大作业_第3页
西工大DSP大作业_第4页
西工大DSP大作业_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

实验实验 1 1 基于基于 CCS 的简单的定点的简单的定点 DSPDSP 程序程序 一 实验要求一 实验要求 1 自行安装 CCS3 3 版本 配置和运行 CCS 2 熟悉 CCS 开发环境 访问读写 DSP 的寄存器 AC0 AC3 ARO AR7 PC T0 T3 3 结合 C5510 的存储器空间分配 访问 DSP 的内部 RAM 4 编写一个最简单的定点 DSP 程序 计算下面式子 y 0 1 1 2 35 20 15 1 6 5 采用定点 DSP 进行计算 确定每个操作数的定点表示方法 最后 结果的定点表示方法 并验证结果 6 对编写的程序进行编译 链接 运行 断点执行 单步抽 并给 出 map 映射文件 二 实验原理二 实验原理 DSP 芯片的定点运算 Q 格式 转 2008 09 03 15 47 DSP 芯片的定点 运算 1 数据的溢出 1 溢出分类 上溢 overflow 下溢 underflow 2 溢出的结果 Max Min Min Max unsigned char 0 255 signed char 128 127 unsigned int 0 65535 signed int 32768 32767 上溢在圆圈上按数据逆时针移动 下溢在圆圈上顺时钟移动 例 signed int 32767 1 32768 32768 1 32767 unsigned char 255 1 0 0 1 255 3 为了避免溢出的发生 一般在 DSP 中可以设置溢出保护功能 当 发生溢出时 自动将结果设置为最大值或最小值 2 定点处理器对浮点数的处理 1 定义变量为浮点型 float double 用 C 语言抹平定点处理器和浮点处理器 的区别 但是程序的代码庞大 运算速度也慢 2 放大若干倍表示小数 比如要表示精度为 0 01 的变量 放大 100 倍去运算 运算完成后再转化 但是这个做法比较僵硬 如要将上面的变量重新定义成 0 001 精度 又需要放大 1000 倍 且要重新编写整个程序 考虑溢出等问题 3 定标法 Q 格式 通过假定小数点位于哪一位的右侧 从而确定 小数的精度 Q0 小数点在第 0 位的后面 即我们一般采用的方 法 Q15 小数点在第 15 位的后面 0 14 位都是小数位 转化公式 Q int F pow 2 q F float Q pow 2 q 3 Q 格式的运算 1 定点加减法 须转换成相同的 Q 格式才能加减 2 定点乘法 不同 Q 格式的数据相乘 相当于 Q 值相加 3 定点除法 不同 Q 格式的数据相除 相当于 Q 值相减 4 定点左移 左移相当于 Q 值增加 5 定点右移 右移相当于 Q 减少 4 Q 格式的应用格式 实际应用中 浮点运算大都时候都是既有整数部分 也有小数部分 的 所以要选择一个适当的定标格式才能更好的处理运算 一般用 如下两种方法 1 使用时使用适中的定标 既可以表示一定的整数复位也可以表 示小数复位 如 对于 2812 的 32 位系统 使用 Q15 格式 可表 示 65536 0 65535 999969482 区间内的数据 三 实验步骤三 实验步骤 1 双击 启动 CCS 的仿真平台的配着选项 选择 C5410 Device Simulator 2 点击 project 菜单栏的 new 选项 新建一个 LAB 的工程注意存储的路径 3 把下图中用到的文件拷到工程文件目录的文件路径下 4 在 ccs 平台中将用到的程序导入到平台中 点击 project add file to project 选 择多个文件时 可以按住 ctrl 键 5 将程序中的 start 改为 main INT 2 改为 int 2 然后点击保存 源程序代码源程序代码 example asm y 0 1 x1 2 35 20 15 x1 6 title example asm 为汇编源程序取名 mmregs 定义存储器映象寄存器 STACK usect STACK 10h 分配 10 个单元的堆栈空间 bss a 4 为系数 a 分配 4 个单元的空间 bss x 4 为变量 x 分配 4 个单元的空间 bss y 1 为结果 y 分配 1 个单元的空间 def c int00 定义标号 c int00 data 定义数据代码段 table word 1 2 3 4 在标号 table 开始的 8 个单元中 word 8 6 4 2 为这 8 个单元赋初值 text 定义文本代码段 c int00 STM 0 SWWSR 软件等待状态寄存器置 0 不设等待 STM STACK 10h SP 设置堆栈指针初值 STM a AR1 AR1 指向 a 的地址 RPT 7 从程序存储器向数据存储器 MVPD table AR1 重复传送 8 个数据 CALL SUM 调用 SUM 实现乘法累加和的子程序 end B end 循环等待 SUM STM a AR3 将系数 a 的地址赋给 AR3 STM x AR4 将变量 x 的地址赋给 AR3 RPTZ A 3 将 A 清 0 并重复执行下条指令 4 次 MAC AR3 AR4 A 执行乘法并累加 结果放在 A 中 STL A y 将 A 的低字内容送结果单元 y RET 结束子程序 end 结束全部程序 Map 文件文件 TMS320C55x COFF Linker PC Version 3 83 Linked Mon May 31 11 03 33 2010 OUTPUT FILE NAME ENTRY POINT SYMBOL main address 0000e000 MEMORY CONFIGURATION name origin length used attr fill PAGE 0 EPROM 0000e000 00000100 0000001d RWIX vecs 0000ff80 00000004 00000000 RWIX PAGE 1 SPRAM 00000060 00000020 0000000b RWIX DARAM 00000080 00000100 0000001a RWIX SECTION ALLOCATION MAP output attributes section page origin length input sections text 0 0000e000 0000001d 0000e000 0000001d LAB4A obj text bss 1 00000060 0000000b UNINITIALIZED 四 心得体会四 心得体会 经过这次实验 我更加熟悉 CCS 开发环境 访问读写 DSP 的寄存 器 AC0 AC3 ARO AR7 PC T0 T3 实验实验 2 2 CCSCCS 下的下的 FFTFFT 算法程序设计算法程序设计 一 一 实验目的实验目的 CCS 下的 FFT 算法程序设计 二 二 实验要求实验要求 提供一个 CCS 下的 C 语言例程 在 CCS 下 仿照例程 任选雨 中 FIR 滤波 IIR 滤波 FFT 算法 采用 C 语言完成代码的编写 编 译 链接 下载和运行 输入数据 滤波器系数任选 并给出运算 结果 1 目的 2 工程文件的构成 并附图 3 打印源代码 4 打印编译成功的信息 5 打印 map 文件 6 程序下载的截图过程 三 三 运行结果 三 三 实验步骤实验步骤 1 在 ccs 平台中将用到的程序导入到平台中 点击 project add file to project 选择多个文件时 可以按住 ctrl 键 2 将所有的程序段中的 start 改为 main 将 fft Asm 中的 K FFT SIZE set 32 N K LOGN set 5 LOG N 改为 K FFT SIZE set 64 N K LOGN set 6 LOG N 3 对源文件进行编译 注意先对每个 asm 文件先进行编译 以防止程序有错误 没有错误时进行链接 4 点击菜单 file load program 装载 out 文件 四 四 实验结果实验结果 五 五 源程序代码源程序代码 函数原型 void FFT struct compx xin int N 函数功 能 对输入的复数组进行快速傅里叶变换 FFT 输入参数 xin 复数结构体组的首地址指针 struct 型 void FFT struct compx xin int f m nv2 nm1 i k l j 0 struct compx u w t nv2 FFT N 2 变址运算 即把自然顺序变 成倒位序 采用雷德算法 nm1 FFT N 1 for i 0 i nm1 i if i j 如果 i j 即进行变址 t xin j xin j xin i xin i t k nv2 求 j 的下一个倒位序 while k j 如果 k j 表示 j 的最高位为 1 j j k 把最高位变成 0 k k 2 k 2 比较次高位 依次类推 逐个 比较 直到某个位为 0 j j k 把 0 改为 1 int le lei ip FFT 运算 核 使用蝶形运算完成 FFT 运算 f FFT N for l 1 f f 2 1 l 计算 l 的值 即计算蝶形级数 for m 1 m l m 控制蝶形结级 数 m 表示第 m 级蝶 形 l 为蝶形级总数 l log 2 N le 2 m 1 le 蝶形结距离 即第 m 级蝶形的蝶形结相距 le 点 lei le 2 同一蝶形结中参加 运算的两点的距离 u real 1 0 u 为蝶形结运算系 数 初始值为 1 u imag 0 0 w real cos PI lei w 为系数商 即当 前系数与前一个系数的商 w imag sin PI lei for j 0 j lei 1 j 控制计算不同种蝶形结 即计算系 数不同的蝶形结 for i j i Linked Sat May 30 23 48 27 2015 OUTPUT FILE NAME ENTRY POINT SYMBOL main address 0000e000 MEMORY CONFIGURATION name origin length used attr fill PAGE 0 EPROM 0000e000 00000100 00000019 RWIX PAGE 1 SPRAM 00000060 00000020 0000000a RWIX DARAM 00000080 00000100 00000000 RWIX SECTION ALLOCATION MAP output attributes section page origin length input sections text 0 0000e000 00000012 0000e000 00000012 LAB2B obj text data 0 0000e012 00000005 0000e012 00000005 LAB2B obj data vectors 0 0000e017 00000002 0000e017 00000002 VECTORS obj vectors bss 1 00000060 0000000a UNINITIALIZED 00000060 0000000a LAB2B obj bss GLOBAL SYMBOLS SORTED ALPHABETICALLY BY Name address name 00000060 bss 0000e012 data 0000e000 text 00000060 bss ffffffff cinit 0000e012 data 0000e017 edata 0000006a end 0000e012 etext ffffffff pinit 0000e000 text 00000000 lflags UNDEFED c int00 0000e000 main ffffffff cinit 0000e017 edata 0000006a end 0000e012 etext ffffffff pinit GLOBAL SYMBOLS SORTED BY Symbol Address address name 00000000 lflags 00000060 bss 00000060 bss 0000006a end 0000006a end 0000e000 text 0000e000 text 0

温馨提示

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

评论

0/150

提交评论