1 引言
数字信号处理是将信号以数字方式表示并处理的理论和技术。数字信号处理与模拟信号处理是信号处理的子集。数字信号处理的目的是对真实世界的连续模拟信号进行测量或滤波。因此在进行数字信号处理之前需要将信号从模拟域转换到数字域,这通常通过模数
转换器实现。而数字信号处理的输出经常也要变换到模拟域,这是通过数模转换器实现的。内置数字信号处理器(DSP,DigitalSignalProcessor)是车载主机内以
逻辑电路对音视频数字信号进行再加工处理的专用元件,是一个统称名词,包括数字效果器、EQ、3D环绕等等。数字信号处理器(DSP,即DigitalSignalProcessor)是进行数字信号处理的专用芯片,是伴随着微
电子学、数字信号处理技术、计算机技术的发展而产生的新器件。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
本文所作研究是以自行研制的DSP教学实验箱为平台进行的,其DSP采用TMS320VC5416芯片实现。本文内容安排如下:第 1部分在介绍相关背景知识的基础上,引入使用MATLAB辅助DSP设计的思想;第2部分介绍了MATALB中实现这一思想的两种工具;第3部分介绍了工具之一 CCSLink的实现方式及工作原理;第4部分结合实验平台给出了CCSLink的应用实例。
2 MATLAB辅助DSP设计的方法概述
实现MATLAB辅助DSP设计的方法有两种,即CCSLink和Embedded Target for TI TMS320C6000 DSP。前者可实现MATLAB与C2000/C5000/C6000 DSP之间的数据交互和程序控制;后者可实现从Simulink模型自动生成DSP目标代码,但仅支持C6000系列的部分DSP器件。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
考虑到实验平台是以C5000 DSP为基础的,并且第二种工具较容易操作等因素,下面主要研究利用CCSLink辅助DSP设计的方法。
2.1 Embedded Target for TI TMS320C6000 DSP
Code Composer Studio(CCS)是TI提供的DSP的集成开发环境。
对于C6000系列而言,利用工具Embedded Target for TI TMS320C6000 DSP,用户可以从Simulink模型直接生成针对DSP目标板的可执行文件或者CCS工程文件,实现了MATLAB/Simulink与CCS集成开发环境(IDE)的无缝连接,从而把设计人员从繁杂的DSP编程中解脱出来,将主要的精力放在设计而不是DSP编程上。
2.2 MATLAB Link for Code Composer Studio
集成在MATLAB6.5或更高版本中的CCSLink工具把MATLAB、TI DSP及其集成开发环境CCS连接在一起,使得我们可以在MATLAB环境下就可以完成对CCS和DSP目标板的操作,包括与目标内存之间的数据交互,检测处理器的状态,控制DSP程序的运行等。它提供了MATLAB、CCS和目标DSP板的双向连接,开发者可以利用MATLAB中强大的可视化、数据处理和分析工具对DSP中的数据进行分析和再处理,以辅助DSP系统设计。
我们利用CCSLink提供的相关函数能够实现MATLAB与目标DSP的
存储器及寄存器间的信息交互,如同操作MATLAB变量一样来读、写TI DSP中的存储器或寄存器,即整个目标DSP对于MATLAB而言是透明的。
3 CCSLink的实现方式及工作原理
3.1 CCSLink的实现方式
利用CCSLink即可实现MATLAB、CCS和目标DSP之间的信息交互。CCSLink共提供了3种实现方式:
1)使用与CCS IDE的连接对象。利用此对象来创建CCS IDE和MATLAB的连接,从MATLAB命令窗中即可运行CCS IDE中的应用程序,查询目标DSP的状态信息,修改或读取目标DSP的存储器或寄存器中的数据,甚至可以调试DSP程序。
2)使用与RTDX(Real-Time Data Exchange)的连接对象。提供MATLAB和硬件DSP 之间的实时通信通道。利用此连接对象,可以打开、使能、关闭或禁止DSP的RTDX通道,利用此通道可以实时地向硬件目标DSP发送和取出数据而不必停止 DSP上运行的程序。
RTDX连接对象实际上是CCS连接对象的一个子类,在创建CCS连接对象的同时创建RTDX连接对象,它们不能分别创建。
3)使用嵌入式对象。在MATLAB环境中创建一个可以代表嵌入在目标C程序中的变量的对象。利用嵌入式对象可直接访问嵌入在目标 DSP中的存储器和寄存器中的变量,即把目标C程序中的变量作为MATLAB的一个变量对待。
3.2 CCSLink的工作原理
上面的三种方式在具体实现时略有不同,但是其原理相似,不失一般性,我们通过第一种方式——与CCS IDE的连接对象,来介绍CCSLink的工作机理。
1)选择目标DSP并创建CCS IDE连接对象
在MATLAB环境下使
用函数ccsdsp并配置相应的属性名和属性值即可创建一个CCS IDE连接对象cc:
cc=ccsdsp(‘boardnum’, x, ‘procnum’, y, ‘timeout’, z);
其中,boardnum、procnum、timeout都是属性名。分别表示创建连接对象时所使用的目标板编号、DSP处理器编号及全局超时值。
2)在MATLAB环境下加载CCS工程文件
projfile=fullfile(matlabroot, ‘toolbox’, ‘tiddk’, …, ‘ccsproject.pjt’); %取得工程文件
projpath = fileparts(projfile); %取得工程文件路径
open(cc, projfile); %加载工程文件,该函数实现把文件filename加载在CCS IDE中
cd(cc, projpath); %改变CCS的工作路径
3)在MATLAB环境下编译、连接并下载可执行文件
创建了CCS IDE连接对象并加载工程文件后,即可通过函数build()编译和链接工程文件,以生成针对目标DSP的可执行文件(。out文件);通过函数 load()下载可执行文件到目标DSP中。具体方法如下:
build(cc); %编译、链接工程文件,生成目标DSP可执行文件
load(cc, ‘ccsproject.out’); %下载可执行文件到目标DSP,可执行文件名与工程名相同
4)在MATLAB环境下控制程序运行
CCSLink提供了3个函数用于控制目标DSP的运行状态。通过这些函数,在MATLAB下对DSP的控制操作就像在CCS IDE中一样方便,实际上也确实是这样进行的。
halt(cc); %中断处理器的运行
restart(cc); %复位程序计数器PC,重新执行程序
run(cc, ‘runtohalt’, 30); %执行程序到断点处,最后一个参数表示超时时间,此处为30s
5)在MATLAB环境下对CCS IDE连接对象进行操作
在MATLAB中可以方便的操作DSP存储器和寄存器中的数据,包括读操作和写操作。下面以读写目标DSP存储器和寄存器中的数据来说明。
date=read(cc, [256,0], ‘double’, 100); %从目标存储器目的地址100H(即十进制数256)处开始,读取100个双精度数并赋给MATLAB对象date
reg=regread(cc, ‘A0’, ‘2scomp’); %读取DSP寄存器A0中的数据,并转化成双精度数分配给MATLAB对象reg
write(cc, [256,0], double([1.0 2.0 3.0]));%向目标存储器100H开始的地址处,写入三个双精度数据
6)关闭CC S IDE连接对象
当一切操作执行完成后,需要删除CCSDSP对象,以收回系统资源。
clear cc; %关闭CCS IDE连接对象
4 CCSLink应用实例
通过CCSLink工具,可以使用MATLAB来进行DSP的辅助设计。在该实例中,FIR滤波的核心内容由DSP实现,而算法仿真、系数产生、用户界面、结果验证等部分由MATLAB辅助完成。
4.1 FIR滤波器设计
FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
设输入信号为x(n),输出信号为y(n),则FIR滤波器对应的差分方程可表示为:
其中,h(k)(k=0,1,2,…,N-1)表示滤波器系数序列,是滤波器设计的关键。h(k)可以通过MATLAB工具箱提供的滤波器函数 fir1()和fir2()来获取:首先通过建立MATLAB/Simulink模型,根据所需设计低通滤波器的性能要求来确定滤波器的阶数和截止频率等参数。本例所设计的FIR低通滤波器参数为:
截止频率(Fc)2kHz,采样频率(Fs)8kHz,阶数(N)40。然后借助函数 fir1(N, WN)即可返回对应滤波器的系数矩阵,其中N为阶数,WN为滤波器的归一化截止频率,即WN= 2Fc/Fs,且0≤WN≤1。
4.2 DSP滤波算法实现
结合MATLAB产生的滤波器系数,就可以编写DSP滤波主程序了,关键代码如下:
FIR_TASK:
STM #K_FIR_BFFR, BK ; 设置FIR循环缓冲区的大小
LD *INBUF_P+, -1, A ; 数据输入
FIR_FILTER:
STL A, *FIR_DATA_P+% ; 最新数据替代最旧数据
RPTZ A, (K_FIR_BFFR-1)
MAC *FIR_DATA_P+0%, *FIR_COFF_P+0%, A ; 乘累加
STH A,*OUTBUF_P ; 数据输出
4.3 MATLAB辅助设计
本设计中,算法仿真、系数产生、用户界面等部分由MATLAB辅助完成。算法仿真、系数产生方法在4.1中已详细介绍,本节重点介绍用户界面部分。本图形用户界面可以实现如下功能:修改参数,如滤波参数n和Wn,这种参数选取方法避免了反复修改DSP程序的弊端,可以满足不同层次使用者的使用;控制操作过程,如加载工程文件、下载可执行文件、运行程序等;绘制 DSP输入数据的时域及频域信号;绘制滤波后DSP输出数据的时域及频域信。
用户界面的流程图如图1所示,主要由图形界面和回调函数两大部分组成。其中,图形界面由文件FIR_BPF.m实现;回调函数总共由6个文件实现,分别是input.m,input2.m,output.m,output2.m,lvbopin.m和 lvbohou.m。
当输入带有干扰的方波信号后,分别查看输入波形、MATLAB滤波输出信号、DSP滤波输出信号,结果如图2所示。比较 MATLAB滤波输出信号和DSP滤波输出信号,据此可以采用修改滤波器系数或DSP程序等措施来改进DSP滤波算法。
图1 用户图形界面流程图
图2 实验结果
5 结束语
本文探索并实现了利用CCSLink辅助DSP设计的完整过程。同时以FIR滤波器为例,利用CCSLink辅助设计了基于DSP TMS320VC5416的应用系统,该系统具有灵活的参数设置和快速的处理效率,很好地达到了辅助DSP设计的目的;再者,利用MATLAB的GUI工具设计了相应的图形用户界面,便于不同技术层次的用户操作,增强了DSP系统的适用性。
本文作者创新点:1.发展了利用MATLAB辅助DSP设计的思想,把DSP系统设计中的算法仿真、系数产生、结果验证、用户界面等环节交由 MATLAB完成,实现了二者的无缝连接。2.通过MATLAB设计的人机界面,增强了DSP系统的适用性,便于不同技术层次的用户操作。