DSP上的指纹识别模块的实现

2024-06-23

DSP上的指纹识别模块的实现(精选7篇)

篇1:DSP上的指纹识别模块的实现

摘要:以窗函数法设计线性相位FIR数字滤波器为例,介绍用MATLAB工具软件设计数字滤波器的方法和在定点DSP上的实现。实现时,先在CCS5000仿真开发,然后将程序加载到TMS320VC5409评估板上实时运行,结果实现了目标要求。文中还讨论了定标、误差、循环寻址等在DSP上实现的关键问题。

关键词:数字滤波器 MATLAB DSP

引言

随着信息时代和数字世界的到来,数字信号处理已成为今一门极其重要的学科和技术领域。数字信号处理在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。在数字信号处理应用中,数字滤波器十分重要并已获得广泛应用。

1 数字滤波器的设计

1.1 数字滤波器设计的基本步骤

数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。IIR滤波器的特征是,具有无限持续时间冲激响应。种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器。FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现,也可以采用非递归的方式实现。数字滤波器的设计方法有多种,如双线性变换法、窗函数设计法、插值逼近法和Chebyshev逼近法等等。随着MATLAB软件尤其是MATLAB的信号处理工作箱的不断完善,不仅数字滤波器的计算机辅助设计有了可能,而且还可以使设计达到最优化。

数字滤波器设计的基本步骤如下:

(1)确定指标

在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。在很多实际应用中,数字滤波器常常被用来实现选频操作。因此,指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以两种方式给出。第一种是绝对指标。它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。第二种指标是相对指标。它以分贝值的形式给出要求。在工程实际中,这种指标最受欢迎。对于相位响应指标形式,通常希望系统在通频带中人有线性相位。运用线性相位响应指标进行滤波器设计具有如下优点:①只包含实数算法,不涉及复数运算;②不存在延迟失真,只有固定数量的延迟;③长度为N的滤波器(阶数为N-1),计算量为N/2数量级。因此,本文中滤波器的设计就以线性相位FIR滤波器的设计为例。

(2)逼近

确定了技术指标后,就可以建立一个目标的数字滤波器模型。通常采用理想的数字滤波器模型。之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。

(3)性能分析和计算机仿真

上两步的结果是得到以差分或系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。

1.2 滤波器的MATLAB设计

(1)MATLAB

MATLAB是一套用于科学计算的可视化高性能语言与软件环境。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个界面友好的用户环境。它的信号处理工具箱包含了各种经典的和现代的数字信号处理技术,是一个非常优秀的算法研究与辅助设计的工具。在设计数字滤波器时,通常采用MATLAB来进行辅助设计和仿真。

(2)FIR滤波器的MATLAB设计

下面以设计线性相位FIR滤波器为例介绍具体的设计方法。

线性相位FIR滤波器通常采用窗函数法设计。窗函数法设计FIR滤波器的基本思想是:根据给定的滤波器技术指标,选择滤波器长度N和窗函数ω(n),使其具有最窄宽度的主瓣和最小的旁瓣。其核心是从给定的频率特性,通过加窗确定有限长单位脉冲响应序列h(n)。工程中常用的窗函数共有6种,即矩形窗、巴特利特(Bartlett)窗、汉宁(Hanning)窗、汉明(Hamming)窗、布莱克曼(Blackman)窗和凯塞(Kaiser)窗。

假设实际工程需要设计一个线性相位带通FIR滤波器指标如下:

fn=[1000,1375,3625,4000];

a=[0,1,0];

dev=[0.0005,0.05,0.0005];

阻带最小衰减60dB,再设采样频率fs=10kHz,则根据阻带最小衰减来选择凯塞(Kaiser)窗,利用MATLAB的求阶函数和FIR滤波器的设计函数,可以快速地设计出所需的数字滤波器。这两个设计函数如下:

[N,Wn,beta,ftype]=kaiserord(fn,a,dev,fs);

b=fir1(n,Wn,ftype,Kaiser(n+1,beta);

最后,利用的滤波器分析函数freqz分析所设计出的滤波器的幅频特性和相频特性,并用图形显示函数plot将它们显示出来,如图1所示。由图1可见,设计结果满足指标要求。

(本网网收集整理)

2 数字滤波器的实现方法

数字滤波器的实现方法一般有以下几种。

①采用加法器、乘法器、延时器设计专用的滤波电路。

②在通用计算机系统中加上专用的加速处理机设计实现。

③用通用的可编程DSP芯片实现。

④用专用的DSP芯片实现。在一些特殊的场合,要求的信号处理速度极高,用通用DSP芯片很难实现。这种芯片将相应的滤波算法在芯片内部用硬件实现,无需进行编程。

⑤采用FPGA/CPLD设计实现。

在上述几种方法中,第②种方法的缺点是速度较慢,一般可用于DSP算法的模拟。第①、④种方法专用性强,应用受到很大的限制。第③、⑤种方法都可以通过编程来实现各种数字滤波,但是,第③种因有专用的指令来实现滤波运算编程实现容易,而第⑤种方法编程实现较为困难。

篇2:DSP上的指纹识别模块的实现

3.1 定点数的定标

在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。在滤波器的实现过程中,DSP所要处理的数可能是整数,也可能是小数或混合小数;然而,DSP在执行算术运算指令时,并不知道当前所处理的数据是整数还是小数,更不能指出小数点的位置在哪里。因此,在编程时必须指定一个数的小数点处于哪一位,这就是定标。通过定标,可以在16位数的不同位置上确定小数点,从而表示出一个范围大小不同且精度也不同的小数。例如:在Q15中,1080H=0.12890625;在Q0时,1080H=4224。

在使用定点DSP时,如何选择合适的Q值是一个关键性问题。就DSP运算的处理过程来说,实际参与运算的都是变量,有的是未知的,有的则在运算过程中不断改变数值,但它们在一实际工程环境中作为一个物理参量而言都有一定的动态范围。只要个动态范围确定了,Q值也就确定了。因此,在程序设计前,首先要通过细致和严谨的分析,找出参与运算的所有变量的变化范围,充分估计运算中可能出现的各种情况,然后确定采用何种定标标准才能保证运算结果正确可靠。这里,所讨论的理论分析法和统计分析法确定变量绝对值最大值|max|,然后根据|max|再确定Q值。但是,DSP操作过程中的意外情况是无法避免的,即使采用统计分析法也不可能涉及到所有情况。因此,在定点运算过程中应该采取一些判断和保护措施(特别是在定点加法中)。另外,在数字信号处理中的`大量运算是乘法和累加,应尽量采用纯整数或纯小数运算,即全部变量都用Q0或Q15格式表示。这样做的好处是操作简单、编程方便。只有当纯整数或纯小数运算不能满足变量的动态范围和精度要求时,才采用混合小数表示法进行定点运算。

3.2 误差问题

因为在用定点DSP实现时,所有的数据都是定长的,运算也都是定点运算,因而会产生有限字长效应。所产生的误差主要包括:数模转换引起的量化误差、系数量化引起的误差以及运算过程中的舍入误差。在用定点DSP时,产生误差是不能避免的,但是可以通过一些方法减小误差。如,可以用两个存储单元来表示一个数,运算时使用双字运算;可以根据需要要将滤波器系数都用双字表示,也可以只将一半的系数用双字表示,视需要而定。另外,FIR数字滤波器和IIR数字滤波器所引入的量化误差是不一样的。FIR数字滤波器主要采用非递归结构,因而在有限精度的运算中都是稳定的;而IIR数字滤波器是递归结构,极点必须在z平面单位圆内才能稳定,这种结构运算中的四舍五入处理有时会引起寄生振荡。除了有限字长效应以外,不同结构引入的误差也有所不同。在实际设计中,要注意实现中的误差问题。在选择不同的结构时,应考虑它们所引入的误差,并用高级语言进行定点仿真,以比较不同结构下误差的大小,从而作出合理选择。

3.3 循环寻址

循环寻址(circular addressing)是DSP中经常用到的一种寻址方式。该寻址方法可以对一块特定存储区实现循环的操作。可以把循环寻址理解为实现一个滑动窗,新数据引入后将覆盖老的数据,便得该窗中包含了需处理的最新数据。在数字信号处理中的FIR、卷积等运算中,循环寻址具有极其重要的意义。

在TI的DSP中,循环寻址通过如下方法实现。

①设定BK(寄存器块大小)值,以确定循环寻址缓冲区的大小,也可将它看作是循环的周期。

②设定缓冲区的底部地址。必须注意:其低N位为零,其中N为满足式(1)的最小N值。

2 N>BK (1)

③用辅助寄存器间接寻址循环缓冲区。

图2 输入数据频谱图 图3 输出数据频谱图

3.4 实现举例

根据上述设计出来的FIR滤波器,考虑工程实际的需要(精度的要求)和采用定点DSP芯片的方便实现,选择Q15定标。为此,必须对输入数据和滤波器的系数进行归一化处理。输入数据的归一化处理可通过设置A/D转换的参考电平来实现。滤波器的系数归一化只要求取系数中的最大值,再用这个最大值去系数便可。

由于一个N(设N为偶数)阶的FIR滤波器具有系数对称特性,其输出方程可以写为:

y(n)=ao[x(n)+x(n-N+1)]+a1[x(n-1)+x(n-N+2)]+…+aN/2-1[X(n-N/2+1)+x(n-N/2)] (2)

根据式(2)可建立如下实现算法:

①在数据存储中开辟两个循环缓冲区,New循环缓冲区存放新数据,O1d循环缓冲区中存放老数据。循环缓冲区的长度为N/2。

②设置循环缓冲区指针,AR2指向New缓冲区中最新的数据,AR3指向O1d缓冲区中最老的数据。

③在程序存储器中设置系数表。

④(AR2)+(AR3)→AH(累加器A的高位);(AR2)-1→AR2;(AR3)-1→AR3。

⑤将累加器B清零,重复执行下列操作N/2次:(AH)*系数ai+(B)→B,系数指针(PAR)加1,(AR2)+(AR3)→AH,AR2和AR3减1。

⑥保存和输出结果(结果在BH中)。

⑦修正数据指针,让AR2和AR3分别指向New缓冲区最新数据和O1d缓冲区中最老的数据。

⑧用New缓冲区中最老的数据替代O1d缓冲区中最老的数据。O1d缓冲区指针减1。

⑨输入一个新数据替代New缓冲区中最老的数据。

重复执行第④~⑨步。

根据上述算法编制程序[4、5],在CCS5000上进行仿真调试运行,并分析输入数据和输出的频谱,结果如图2、图3所示。由图可见,滤波器实现了目标要求。

最后,将程序移植为闻亭公司的TMS320VC5409评估板的MCBSP0的中断服务程序,并将形成的可执行文件加载到评估板上运行。由TMS320VC5409评估板的模拟输入口输入模拟信号,经TLC320A/D转换芯片,按8kHz的采样频率采样转换成数字信号,输入DSP。滤波后经D/A输出模拟量,结果证实该程序可实现对采样率为8kHz的模拟信号进行实时滤波处理。

结语

篇3:DSP上的指纹识别模块的实现

关键词:DSP,说话人身份识别,端点检测,MEL倒谱系数,高斯混合模型

0 引 言

说话人身份识别属于生物认证技术的一种, 是一项根据语音中反映说话人生理和行为特征的语音参数来自动识别说话人身份的技术。近年来, 说话人身份识别以其独特的方便性、经济性和准确性等优势受到瞩目, 在信息安全等领域的应用逐渐增大, 并成为人们日常生活和工作中重要且普及的安全验证方式。目前, 说话人身份识别在理论上和实验室条件下已经达到了比较高的识别精度, 并开始走向实际应用阶段。AT&T、欧洲电信联盟、ITT、Keyware、T-NETIX, Motorola和Visa等公司相继开展了相关实用化研究[1], 国内这方面研究主要在中科声学所, 中科院自动化所, 清华大学等研究所和大学中进行。

基于嵌入式的说话人身份识别系统具有高精度, 适时性好, 低功耗, 低费用, 体积小等优势, 逐渐成为说话人身份识别面向实际应用的新热点。而随着DSP新技术的发展, DSP芯片无论在处理速度、精度、功耗或者体积等方面都取得了突破性的进展[2]。DSP也越来越多的应用于说话人身份识别。但目前这方面研究主要局限于小数据量、与PC机配套使用上, 没有太大的实用价值。在此介绍一种基于TMS320C6713 DSP芯片设计的嵌入式, 10个人范围的说话人身份识别系统。该系统可以自举运行, 并可灵活的选择训练、识别或者更换训练者、识别者, 识别率达98%以上。

1 系统的架构及硬件构成

系统总体实现流程如图1所示。系统主要分为训练和识别两部分, 系统初始化后由操作者控制训练或识别。训练目的是提取说话人模型参数并将其存储在FLASH ROM中。识别目的是读取待识别者语音信息并将获得的模型参数与训练的模型参数比较, 从而获得识别结果。

1.1 系统的主要硬件构成

系统硬件构成如图2所示, 主要包含语音采集模块、数据处理模块 (DSP) 、程序数据存储及自举FLASH模块、数据存储器RAM模块、系统时序逻辑控制CPLD模块、JTAG接口模块。

语音采集模块主要由TLV320AIC23音频编解码器来完成, 该芯片是TI公司的一款高性能的立体声音频Codec芯片, 内置放大器, 输入/输出增益可编程设置。模数, 数/模转换集成在一块芯片中。采样率8~96 kHz可编程实现。另外还具有低功耗, 连接电路简单, 性价比高的特点。

语音处理DSP采用TI公司的TMS320C6713芯片, 该芯片实现浮点运算, 最高时钟频率225 MHz, 使用该芯片外部存储器接口可实现对外部存储器 (SDRAM) 数据传输和程序存储器 (FLASH ROM) 进行程序读写;依靠JTAG接口电路通过仿真器进行仿真调试, 实现与主机数据交换;通过片内外设McBSP完成串行数据的接收和发送, 实现对音频处理模块的控制等工作。

FLASH ROM最大可提供512 KB空间, 通常为前256 KB可用。SDRAM最大容量为16 MB, 为该系统提供较大的数据存储空间。CPLD为存储器的扩展实现逻辑编码。电源为TPS54310芯片, 可为系统提供3.3 V和1.26 V两种电压[3]。

1.2 选择说话人

该系统要训练10个人的语音, 每个人的语音存放在FLASH ROM的不同位置。在训练的开始阶段, 系统需确定当前训练者的身份, 以便对训练完成后说话者模型参数存储位置有准确的判断。对当前训练者身份的选择由系统中的4个Switch实现。若把每个Switch的开关两种状态看成是二进制数的0, 1, 则最终可形成16种组合, 代表16个人。该系统选取前10个组合。

1.3 AIC23语音采集

考虑到系统的实用性, 语音的输入由mic in接口输入。语音采集若设为双声道, 则采集的左右声道数据差别不大, 对识别没有太大的帮助, 而且采集到的语音会占用太大存储器空间, 故采用单声道采样;对于采样精度要求, TLV320AIC23可实现8~96 kHz, 16 b, 20 b, 24 b, 32 b, 的不同采样, 随着采样频率的提高, 采样间隔将相应的缩短, 要求更大的内存空间和更长的处理时间, 实验表明, 采样率由16 kHz下降到8 kHz, 所造成的识别率的微乎其微, 但是可以节省50%的动态存储空间, 并可减少大量的运算。对于采样位数, 16 b精度已能满足该系统要求, 故采样精度设为8 kHz, 16 b采样。

1.4 数据的存储

由TLV320AIC23获得的语音信号的数据, 只有赋值给相应的数组, 才能在接下来的算法中有所应用。为此在SDRAM中定义一片数组存储区域。对于数组大小及类型的选择基于以下两点:

(1) 数组大小选择。该系统算法中包含训练和识别两个内容。语音信号的训练需要大量的数据才能准确的提取语音的特征参量。该系统采用8 kHz采样率的10 s的语音信号, 所需的数组空间大小为80 000个数据单位;语音信号的识别要求快速性, 该系统采用时间较短的8 kHz 3 s语音信号, 所需数组空间大小为30 000个数据单位, 为了减少数据空间, 系统设定为与训练数组共用前30 000个数据单位的空间。

(2) 数组类型为浮点型, 由于设定的采样格式是16 b采样, 而采样后数据类型是Uint32, 语音数据位于低16位, 所以赋值过程中取低16位数据赋值给数组。

1.5 模型参数存入与参数调出

将模型参数存入FLASH ROM的目的是保存训练所得的参数, 以供识别时调用。训练可能用于多次识别, 或者训练和识别可能处于不同的时间地点, 所以, 保存参数的存储器选定为具有掉电时数据不丢失特点的FLASH ROM。每个说话者语音参数代表一个说话者身份, 所以每个说话者模型参数应存储在FLASH ROM中一个确定的位置。为此, 该系统在FLASH ROM中分配了10块的区域, 每个说话者模型参数占有一块特定的区域。

在FLASH ROM中存入数据格式为32 b无符号整数。而训练得到的是浮点型的数据。这就要求在数据存入之前将浮点数转换为32 b无符号类型的整数, 假设要转换的数据为float x[M][N]则转换方法如下:

(1) x[M][N]归一化;

(2) 对x[M][N]乘以一常数K得到有符号整型的数组y[M][N], 即:

y[Μ][Ν]=x[Μ][Ν]×Κ (1)

(3) 屏蔽第32位符号位, 得到32 b无符号类型的整数数组。方法如下:

z[i][j]=y[i][j]&0x7FFFFFFF (2)

(4) 将z[i][j]存入FLASH ROM。

通过统计实验数据发现归一化后数据的范围为10-5~1, 故K选择为108, 既可以实现较大精度的转化, 又不会影响第31位的数值。转换得到的有符号整型数组y[M][N]范围为-108~108, 在存储器中正数为原码表示, 负数为补码表示, 通过计算发现, 该范围的正数第31位为0, 负数第31位为1, 所以, 上述第 (3) 步, 将有符号数转换为无符号数后, 数值的正负改为使用第31位标识。在识别阶段, 要将说话者的GMM参数依次从FLASH ROM中读出, 逐个与待识别者语音的MFCC参数比较, 求最大似然值。参数调出过程与以上存入过程相反。

1.6 说话人身份识别的结果显示

说话人的身份显示通过LED的组合显示确定。在DSK上有4只LED灯, 将每个LED灯看成是一位二进制数。则4个LED灯最大可表示16个人的身份。该系统取前10个组合来表示所识别的说话人的身份。

1.7 自举的实现

以上程序都是通过PC机与DSP组合实现, 要想使系统在DSP上单独完成, 还必须实现自举。该系统采用ROM方式自举。在自举实现过程中, 程序的烧写可以通过CCS自带的FLASHBorn工具实现。在烧写过程中应正确的分配FLASH ROM的空间。FLASH ROM空间总体分为程序存储区和数据存储区[4], 经计算, 程序代码段大小为0x162C0, 故在FLASH ROM中划分127 KB的空间供程序代码使用, 空间中未使用的部分供程序扩展使用。数据存储区划分的大小为64 KB的空间, 每个说话者模型参数占用空间为4.2 KB左右, 最多可存放15个说话人GMM模型参数。该系统训练者数目为10个, 占用空间为42 KB左右。剩余的空间可用来扩展训练人数, 也可用于后期系统的改进。如可以利用语音提示来显示说话人身份, 而提示语音的数据可以存放于此区域。具体的存储的安排如表1所示。

2 系统的算法与软件设计

说话人识别系统的实现方案如图3所示。

输入的模拟语音先通过预处理, 包括预滤波、采样、量化、加窗、端点检测、预加重等。语音经过预处理后进行特征提取。在训练阶段, 对提取的特征进行相应的处理后就可以获得参考模型。识别阶段, 语音通过同样的通道获得特征参数, 生成测试摸型, 之后将测试摸型与参考摸型进行匹配, 从而根据判决逻辑获得判决结果。

2.1 语音信号的端点检测

语音信号的端点检测目的是去除语音信号中的噪声段[1]。端点检测从很大程度上影响到识别率。常用方法有短时能量法, 短时过零率法和双门限法等。本系统选用双门限法, 实验表明, 效果优于前两种方法。

在双门限方法端点检测中, 阈值的选择尤为关键, 该系统的语音采样频率设为8 kHz, 语音分帧为每帧80个点。经过多次实验, 这里短时能量低阈值通过式 (3) 的动态方式得到, 高阈值设为低阈值的5倍。而过零率的阈值选取应充分考虑到噪声的影响, 通过大量实验发现系统中噪声的过零率一般不超过5, 所以对过零率的阈值选取为25, 取得了很好的效果, 准确率达到95%以上。

ΙΤU=0.03 (amp_max-amp_min) +amp_min (3)

在端点检测过程中有时会遇到突发性的干扰噪声, 这种噪声持续时间很短, 一般小于5 ms[5]。为了消除这种干扰, 这里用检测后的起止长度判断它是不是语音。如果所检测到的语音长度足够的短, 则可以把它当成是噪声。

2.2 特征参数的提取

语音信号的特征提取是说话人身份识别的难点。能否用相对简单的方法提取出一种最能体现说话人个性信息的特征将成为以后研究的方向。该系统中用的是能体现人耳听觉特性的Mel倒谱系数 (MFCC) 。

MFCC着眼于人耳的听觉机理, 依据听觉的结果来分析语音的频谱, 获得了很好的识别率和很好的噪声鲁棒性, 它利用了听觉系统的临界效应, 描述人耳对感知的非线性特性[6,7]。在DSP硬件资源配置中, MFCC在识别性能和DSP内部空间占用方面也取得了很好的平衡。在该系统中使用16个滤波器 (M=16) 构成的滤波器组。图4所示是MFCC的提取过程。

2.3 识别方法选择与实现

基于该系统对速度、识别效率、存储空间的要求, 这里的识别方法选为高斯混合模型。高斯混合模型 (GMM) 可以看成是状态数为1的连续分布隐马可夫模型CDHMM。一个M阶混合高斯模型的概率密度函数是由M个高斯概率密度函数加权求和得到, 所示如下:

p (X/λ) =i=1Μωibi (X) (4)

式中:X是一个D维随机向量;bi (Xt) 是子分布, i=1, 2, …, M是子分布;ωi是混合权重, i=1, 2, …, M。对GMM模型参数的估计方法该系统采用最大似然估计。对于一组长度为T的训练矢量序列X={X1, X2, …, XT}, GMM的似然度可表示为:

Ρ (X/λ) =t=1ΤΡ (Xt/λ) (5)

由于式 (5) 是参数λ的非线性函数, 很难直接求出其最大值。因此, 该系统采用EM算法估计参数λ

2.4 算法实现过程中的具体考虑

(1) FFT变换点数的选择。FFT变换点数选择很重要[8], 如果选择太大, 则运算复杂度变大, 使系统响应时间变长, 如果选择太小则可能造成频率分辨率过低, 提取参数误差过大。该系统中选取的点数为240点。

(2) 模型参数的选择。首先模型阶数M必须适中, 必须足够大, 可以充分表示出空间的分布。然而, 阶数也不能太大, 否则数据数量不足, 也无法准确描述特征空间分布。考虑该系统对参数的存储空间要求, 并综合以上考虑, 该系统选用的阶数为32阶。

(3) 协方差矩阵类型。考虑到减少计算量, 这里采用对角阵。在高维特征空间中, 对角阵比全矩阵优势更为明显[9]。

(4) 方差限定。当训练数据不足或者是存在噪声干扰时, 方差幅度会很小, 这样会导致模型概率函数的奇异性, 所以每次EM迭代时, 都需要对方差进行限定。即:

Si2~={St2Si2>Smin2Smin2Si2<Smin2 (6)

根据实验结果, 该系统选取Smin2为0.025

(4) 模型初值的设定:EM算法是寻找局部最大概率的模型。不同的初值会导致不同的局部极值。该系统中采用的是K均值法。

2.5 K均值法应注意的几个问题

(1) 聚类中心的初始化。

对于聚类中心数目由GMM模型决定, 假设是N。对于聚类中心的初始化, 一般取前N个矢量作为聚类中心[10], 但在实验过程中发现, 这种方法不具有针对性, 往往设立的初始的聚类中心不具有很好的聚类效果。所以这里采用取质心法。具体方法为:

第一步先求出训练集S中全体矢量X的质心, 然后在S中找出一个与此质心的畸变量最大的矢量Xj, 再在S中找到一个与Xj的畸变量最大的矢量Xk。以XjXk为基准进行胞腔划分, 得到SkSj两个子集。对这两个子集分别按照同样的方法划分得到4个子集。依次类推, 得到N个子集。这N个子集的质心即为初始的聚类中心。

(2) 聚类中心改进量δ的选择。

对于聚类中心改进量δ的选择, 若选择太大, 则聚类不充分, 影响训练效果;若太小, 则会导致训练无法完成, 该系统通过试验, 取比较适中的数0.01。

(3) 最大迭代次数的选择。

对于最大迭代次数的选择, 太小会导致误判, 太大导致训练不成功时过多的占用系统时间。该系统迭代次数设为100, 比较适中。

3 实验结果及改进点

通过系统调试及改进, 该系统最终实现10个说话人的身份识别, 并自举运行。运行时通过Switch组合可方便的选择训练或识别的功能, 并可更新说话人。训练, 识别的进度及结果通过LED组合显示。利用该系统对5男5女10个人进行训练, 每人500次测试, 结果正确识别率为98%, 识别时间为3 s左右。说明该系统可以有效的识别说话人的身份。对于该系统, 识别时间及识别率上还有改进空间, 以后工作可围绕识别时间上改进。

参考文献

[1]王炳锡, 屈丹, 彭宣.实用语音识别基础[M].北京:国防工业出版社, 2005.

[2]江思敏, 刘畅.TMS320c6000 DSP应用开发教程[M].北京:机械工业出版社, 2005.

[3]赵加祥.DSP系统设计和BIOS编程及其应用实例[M].北京:机械工业出版社, 2007.

[4][美]美国德州仪器公司.TMS320C6000系列DSP编程工具与指南[M].北京:清华大学出版社, 2006.

[5]曾海涛.说话人识别的研究与DSP实现[D].成都:西南交通大学, 2006.

[6]杨行峻、迟惠生.语音信号处理[M].北京:电子工业出版社, 1995.

[7]Chularat Tanprasert, Varin Achariyakalporn.ComparativeStudy of GMM, DTW and ANN on Thai Speaker Indentifi-cation System[A].IICSLP[C].Beijing, 2000:718-721.

[8]俞一彪, 孙兵.数字信号处理理论与应用[M].南京:东南大学出版社, 2005.

[9]王书诏.基于高斯混合模型的说话人混合系统的研究[D].大连:大连理工大学, 2006.

篇4:DSP上的指纹识别模块的实现

[关键词]指纹识别 DSP TMS320VC5402 CCS 2.2

利用生物认证技术取代传统的使用钥匙、身份证、密码等方法进行个人身份鉴定,可广泛应用于银行、机场、公安等领域的出入管理。将信息技术与生物技术相结合的生物认证技术是本世纪最有发展潜力的技术之一,而指纹识别技术则是其中非常有前景的一种。

本文研究指纹识别的预处理算法及其DSP实现问题,其中包括指纹的极值滤波、平滑滤波、拉普拉斯锐化、迭代二值化和该算法在DSP开发平台CCS2.2的C5000上的仿真实现。

1.指纹识别预处理算法

1.1 极值滤波

解梅、马争认为极值滤波器的设计是基于这样一种理念:在指纹图像的采集过程中,指纹图像所受到的冲击性噪声表现为一些斑点或亮点。在一般情况下,可以认为绝大数冲击性噪声是被真实的灰度值所包围。同时噪声污染的像素要远远小于真实灰度值的像素。因此在噪声的消除过程中,无需对大多数没有被噪声污染的像素进行改变处理,只需对那些被污染的像素进行“真实值”代替处理,而这些值的确定可通过图像像素邻域的相关性来确定。

篇5:基于DSP的FFT算法实现概要

Realization of FFT algorithm based on DSP 艾红,常青青,邓大伟

AI Hong, CHANG Qing-qing, DENG Da-wei(北京信息科技大学自动化学院,北京 100192 摘 要:快速傅立叶变换(FFT是将信号从时域变换到频域的一种方法,广泛运用于各种信号分析领域。文中介绍了FFT算法的原理,构建了基于TMS320F2812的硬件平台,阐述了FFT算法的硬件与软件实现。利用TMS320F2812内部的ADC模块与事件管理器的定时器实现信号的实时采集,不需要使用专门的A/D转换芯片。软件上以128点FFT运算为例,在CCS环境下利用C 语言编程实现了FFT算法,程序充分利用蝶式权的周期性及FFT运算中第一级蝶式权值固定为1的特点,使得运算量与复杂度大大减小。运行结果表明TMS320F2812能够快速高效地完成FFT运算。

关键词:数字信号处理;快速傅立叶变换;信号采集

中图分类号:TP273

文献标识码:B

文章编号:1009-0134(201201(上-0017-03 Doi: 10.3969/j.issn.1009-0134.2012.01(上.07 0 引言

快速傅立叶变换(FFT在雷达、通信、电子对抗和电力系统等领域有广泛应用,特别是在电力系统的谐波检测中,FFT几乎是唯一可行的检测方法。通常提高FFT运算速度有两种途径:改进FFT 算法本身和改进运算工具。现阶段提高FFT算法本身非常困难,一般方法致力于改进运算工具。数字信号处理器DSP 是一种可编程的

高性能处理器。文中充分利用TMS320F2812 DSP强大的数据处理能力,实现了FFT运算,并提高了运算速度。系统硬件结构

系统设计以TMS320F2812处理器为核心,辅以外围电路构成。DSP负责模拟输入信号数据采集以及FFT算法实现。外围电路包括电源转换电路,时钟电路,复位电路以及外部RAM等。系统的硬件整体结构如图1所示[1]。对信号进行FFT变换,首先要对模拟信号采样将其转换为数字信号。输入的连续模拟信号经信号调理电路后输出到DSP的ADC模拟输入通道,经过ADC数据采集,模数转换的结果存放于ADC结果寄存器中。信号调理电路主要是为了信号的抗混叠滤波以及电路阻抗的匹配。信号调理电路对输入信号进行调理处理,包括信号的滤波、跟随输出以及信号的稳定。DSP 对采集的数字信号进行FFT运算处理,同时对运算结果进行相应的数据显示和数据存储。

图1 系统的硬件整体结构图 2 FFT算法原理

FFT是离散傅立叶变换(DFT的快速运算,是数字信号处理的基础。因为有些信号在时域很难看出特性,使用FFT将其变换到频域,就会很容易看出其特性。DFT算法的基本公式为[3]:

式中x(n表示时域信号,X(k表示频域信号,为运算蝶式权。

FFT算法是不断地把长序列的DFT分解成几个短序列的DFT,并利用的周期性和对称性减少DFT的运算次数。设序列x(n的长度为N(N=2M,M 为任意正整数,按n的奇偶把x(n分解成两个N/2 收稿日期:2011-08-12 基金项目:北京市教育委员会科技计划面上项目(KM200910772008 作者简介:艾红(1962-,女,四川重庆人,副教授,硕士,研究方向为检测技术与自动化装置。

点的子序列: 若

:

:

由此可见,若将任何一偶数点序列按下标的奇 偶性分成两个子序列,则原序列的DFT可由两子序 列的DFT线性组合得到。运算流图如图2所示。图2 运算流图

图3 蝶式运算流图

其中,A和B的距离称为翅尖距。这种方法和 直接进行DFT计算相比较,运算量减少一半。按 照这种分解运算的思想,将X1(k和X2(k继续向下 分解,直到最后变为一点序列,此时的运算量大 大减小。以8点序列X(n的FFT运算为例: 第一次分解: 第二次分解: 蝶式运算流图如图3所示。比较FFT和DFT的 运算量。假设序列点数为N,且有N=2L,当使用FFT 进行运算时,计算过程中只有蝶式运算,它的复

数乘法运算量为,复数加法运算量为;直接进行DFT运算时,复数乘

法和复数加法的运算量均为N2。由此可见,FFT运 算确实大大减小了DFT的运算量。由图3可以看出,若想得到顺序正确的频域序 列X(k,必须对时域序列进行重新排序。这里先 说明比特逆序的概念:设存储地址m,其二进制数(设m=2L为m=(m1m2m3,若有=(m3m2m1, 则称为m的L位比特逆序列。若将图4中的输入时 域序列下标转换成二进制,依次是: 000,100,010,110,001,101,011,111;而原时域序列下 标转换成二进制依次是:000,001,010,011,100,101, 110,111,将两者对比可发现,输入时域序列下标 就是原时域序列下标的比特逆序。所以FFT蝶式运 算的第一步就是对时域序列进行比特排序。3 系统软件实现以及结果分析 3.1 FFT程序实现

FFT算法主要包括比特逆序、蝶式权值的计 算、各级的蝶式运算以及FFT序列的输出。程序中

涉及到复数的运算,由于计算机无法处理复数, 故而将复数拆为实部和虚部,只需计算出实部和 虚部的数值即可。程序设计将蝶式权w[i]拆分为实 部pr[i]和虚部pi[i],将参与各级蝶式运算的序列拆 分为实部fr和虚部fi。复数进行加法运算时需将两 复数的实部与实部、虚部与虚部对应相加即可, 例如w[i]+w[i+1],所得的和的实部为pr[i]+pr[i+1], 虚部为pi[i]+pi[i+1];而复数的乘法,相对来说有 些复杂,不再是简单的虚部和实部各自相乘,例如 w[i]×w,所得的乘积的实部为pr[i]×pr+pi[i]×pi, 虚部为:(pr[i]+pi[i]×(pr+pi-(pr[i]×pr+pi[i]×pi。该程序执行的是128个点的FFT运算,共有7级蝶式 运算,每个蝶式权都可看作是的n次方, 所以在一个循环内即可计算出所有的蝶式权。每 级蝶式运算计算出新的序列值代替该级的输入序 列值,这样避免了开辟新的存储空间,有效地节 省了存储空间。

FFT算法程序设计如下所示: Uint16 ConversionCount;

Uint16 px[128];Uint16 pz[128];void kfft(pr,pi,n,k,fr,fi ,l,il { Uint16 n,k,l,il;double pr[],pi[],fr[],fi [];int it,m,is,i,j,nv,l0;

double p,q,s,vr,vi,poddr,poddi;for(it=0;it<=n-1;it++ { m=it;is=0;for(i=0;i<=k-1;i++ { j=m/2;is=2*is+(m-2*j;m=j;} fr[it]=pr[is];fi[it]=pi[is];//此循环为比特逆序的实现, pr、pi是原序列的实部与虚部 } //fr、fi是排完序后的序列

pr[0]=1.0;pi[0]=0.0;p=6.283185306/(1.0*n;pr[1]=cos(p;pi[1]=-sin(p;// pr是的实部,pi是的虚部 if(l!=0 pi[1]=-pi[1];for(i=2;i<=n-1;i++ { p=pr[i-1]*pr[1];q=pi[i-1]*pi[1];s=(pr[i-1]+pi[i-1]*(pr[1]+pi[1];pr[i]=p-q;pi[i]=s-p-q;} //此循环为权值运算实现

for(it=0;it<=n-2;it=it+2 //it是序列下标,在第一级蝶式运算中 //相邻的两个运算蝶下标相差2 { vr=fr[it];vi=fi [it];

fr[it]=vr+fr[it+1];//第一级蝶式运算中相邻两个数值进行加减运算 fi [it]=vi+fi [it+1];fr[it+1]=vr-fr[it+1];fi [it+1]=vi-fi [it+1];} //此循环为第一级蝶式运算,该级中的蝶式权均为1 m=n/2;nv=2;

for(l0=k-2;l0>=0;l0--//除去第一级,还有六级蝶式运算

{ m=m/2;nv=2*nv;// 同一级相邻的两个蝶式运算中数值的下标相差为nv for(it=0;it<=(m-1*nv;it=it+nv //it仍为数值的下标 for(j=0;j<=(nv/2-1;j++ { p=pr[m*j]*fr[it+j+nv/2];// nv/2为蝶式运算的翅间距 q=pi[m*j]*fi [it+j+nv/2];s=pr[m*j]+pi[m*j];s=s*(fr[it+j+nv/2]+fi [it+j+nv/2];poddr=p-q;poddi=s-p-q;fr[it+j+nv/2]=fr[it+j]-poddr;fi [it+j+nv/2]=fi [it+j]-poddi;r[it+j]=fr[it+j]+poddr;fi [it+j]=fi [it+j]+poddi;//计算出的新序列值代替输入序列值,节省了存储空间 }}} // fr、fi分别为计算出的FFT序列的实部和虚部 3.2 运行结果

用FFT的计算公式对单一频率的正余弦信号进行变换,可以得出单一频率的信号在频域表现为在其正负频率点上的两个脉冲。根据单频信号的这一特性可验证上述程序是否正确。将单一频率的正弦波信号接入硬件系统,打开图形观察窗口,将观察点数设置为128点,即可观察到如图4所示的波形。

图4 时域正弦波的FFT运行结果

图5 改善后的FFT运行结果

图4中上半部分波形为输入的时域正弦波,下半部分波形为经过变换后的频域波形。在图4中,由于产生的模拟信号伴有噪音,导致信号频率不单一,故而在信号的频域中,除了信号对应的频率点有脉冲外,其它频率点处也有较弱的脉冲。

对输入信号的频率进行调整,使信号的组成频率尽可能单一,可以得到更好的波形,如图5所示。可以看到在信号对应的频率点有脉冲,其它频率点的振幅为0,与理论推导结果一致,由此可验证程序设计的正确性。结论

FFT是声学、图像和信号处理等领域中一种重要的分析工具,文中阐述了硬件结构图和信号调理电路。详细介绍了FFT算法原理,采用C语言编写程序实现了FFT算法。程序运行结果表明TMS320F2812 DSP实现FFT运算速度快,精度高[4]。

参考文献: [1] 贾玮,杨录,张艳花.基于TMS320VC5416的FFT算法的实 现[J].山西电子技术,2009,2:11-13.[2] Rright Hert.Rapid algorithms of digital signal processing [M].Beijing,Electronic Industrial Press,2002.[3] 胡广书.数字信号处理[M].北京:清华大学出版社,2003.[4] 苏奎峰,吕强,耿庆锋,陈圣俭.TMS320F2812原理与开发 [M].北京:电子工业出版社,2005.2.3

反射光谱的测试

图4 ZnO纳米线阵列与原始硅片的反射光谱对比

图4是Si两种不同形貌ZnO纳米结构与原始硅片反射光谱的对比,在200-900nm波长范围内,样品C平均反射率约为5%,样品B平均反射率约为8%,均大大优于普通抛光硅片大于25%的平均反射率。样品B减反射性能略低于样品C的原因可能在于测试时入射光是垂直硅片表面人射的,相对于垂直阵列,不规则纳米结构顶部区域会使得更多的光被反射出去。结论

采用化学气相沉积的方法在p型硅片表面制备出垂直排列和不规则排列的ZnO纳米线阵列,并在此基础上制备n-ZnO纳米线/p-Si光伏器件。试验测得性能最好的器件的开路电压VOC为0.78V,短路JSC电流为6.22 mA/cm2,效率为2.6%。同时,一维结构的ZnO纳米阵列具有非常优异的减反射性能,利用这些ZnO纳米线阵列设计和制作了新型异质结纳米阵列太阳电池,其在200-900nm波长范围内,反射率约为5%。远低于原始Si片25%的反射率。

参考文献:

篇6:DSP上的指纹识别模块的实现

摘要:介绍了一种甚低频低码率数字通信系统的实现方案,该方案中的软件采用混合编程的方法,硬件则用DSP实现,文章给出了整个系统的DSP软硬件调试方法,并通过调试结果表明该方案具有很好的可行性和实时性。

关键词:软件无线电;DSP;混合编程

1引言

现代通信系统已不断由模拟体制向数字化体制过渡,并越来越倾向于采用“软件无线电”的设计方案。即通过构造通用的硬件平台,以使各种相关的通信任务能够用软件完成,从而构成一个具有高度灵活性、开放性的通信系统。现代的DSP通用处理器为实现这一方案提供了极大的便利。

软件无线电的设计思想是:用一个通用、标准、模块化的硬件平台为依托,然后通过软件编程来实现无线电台的各种功能,从而取代基于硬件、面向用途的电台设计方法。功能的软件化实现势必要求减少功能单一、灵活性差的硬件电路,尤其是减少模拟环节,并把数字化处理?A/D、D/A?尽量靠近天线。软件无线电强调体系结构的开放性和全面可编程性。它通过软件的更新来改变硬件的配置结构,从而实现新的功能。软件无线电一般采用标准的、高性能的开放式总线结构,此结构利于硬件模块地不断升级和扩展。

本文介绍一种利用TMS320C31浮点型DSP芯片为核心来设计并实现甚低频低码率数字化语音通信系统的方法。这种通信系统是以DSP硬件为平台,并用硬件来实现系统的外围功能,而用软件来实现核心部分的数字化处理,从而完成整个系统的正常通信工作。

2DSP硬件平台

本通信系统的主要功能是实现语音的数字化传输,其系统功能图如图1所示。具体工作过程如下:

整个通信系统分为两大部分,其工作状态转换由外附的MCU控制。在发送时,语音通过克麦风之后进入语音压缩板进行采样量化及数字化压缩,压缩后的比特流从串口送入DSP内进行调制,调制信号依次通过信道DAC、平滑滤波和功放,然后发送出去;在接收时,前置放大部分送来的`信号再经过一次放大之后送往信道AD转换器,转换的数据FIFO通过中断方式送给DSP进行解调,在DSP内解调之后的数据仍然通过串口送往语音压缩板解压后经扬声器输出。

根据系统要求,本设计选定的DSP是TI公司的TMS320C31。信道AD转换器件选用ANALOGDE-VICE公司的AD7870,它是一个12bit的ADC,具有2μs的片上信号放大时间和8μs的转换时间,最高转换速率为100kHz,可以提供三种输出接口方式?12bit并行方式、字节方式和串行方式?。信道DAC选用的是TI公司的TLV5619,这是一种12bit单通道电压型DA转换器。系统中的ADC和DAC转换器都以并行12bit方式直接和FIFO相连。FIFO?FirstInFirstOut?采用的是双端口RAM构架,其读指针和写指针是完全分开的,可实现读写操作的完全独立,因此,这里选用CYPRESS公司的CY7C425。

3软件实现

本通信系统中的软件采用C语言和混合编程,其中主程序和一部分子程序用C语言编写,而一些运算量比较大的算法子程序则用汇编语言编写,这样,既容易进行调试,又可以提高软件的执行效率,可达到最佳利用DSP芯片的软硬件资源之目的。

整个软件的主程序由发送部分程序段和接收部分段两部分组成,主程序流程图见图2所示,每个程序段又分别是一个独立的程序体,可以独立的实现通信系统的发送和接收功能。

由于要求系统能够实时完成通信任务,故相应的程序须和硬件相互配合,它们各操作之间的同步协调要求很高。而本系统可充分利用DSP芯片所提供的中断和定时器资源来很好地实现系统功能。

串行口发送/接收中断子程序用于完成DSP对串口的发送和接收任务,发送定时器中断子程序流程图如图3所示,图4所示是串口接收中断子程序的流程图。

在系统实现过程中,由于采用了混合

编程,并对运算量比较大的算法用汇编程序来实现,因此,在对128点FFT算法采用汇编语言编程后,可经CCS仿真进行测试。汇编程序的执行时间为111113个时钟周期?2.78ms?,可在一帧时间内?30ms?完成5次FFT和IFFT的帧同步算法,而用C语言实现时的程序执行时间为1812409个时钟周期?45.3ms?。可见,用汇编程序的执行效率有明显的提高。

4结束语

篇7:DSP上的指纹识别模块的实现

在航天侦测领域, 随着图像处理技术的进步和应用需求的发展, 海量的探测数据和有限的空地数传带宽之间的矛盾亟待解决。高性能DSP[1]的出现使得高速在轨图像压缩成为可能, 依靠多个功能部件并发执行指令和软件流水排布技术, 高性能DSP显著提升了程序代码尤其是其中循环代码的执行效率。但是其编译器在进行软件流水线排布时有着诸如循环中的代码不能过长, 一般不能超过250条线性汇编指令;循环中不能有函数调用;循环中不能有跳转指令;循环中的条件判读不能过多, 一般不能超过6个;循环不能有嵌套;程序执行时不能有中断产生等限制[1], 这就对程序代码的编写提出了严格的要求。

JPEG2000是新一代的图像压缩算法, 具有压缩速度快, 信噪比高, 同时支持有损和无损压缩, 可同时生成多种分辨率等优点。JPEG2000的压缩过程如图1所示, 其中的嵌入式块编码过程 (EBCOT) 把经过离散小波变化 (DWT) 得到的小波系数分成互相不重叠且大小相同的编码块, 然后将编码块按比特位高低分成多个位平面, 然后从最高有效位平面到最低有效位平面, 对于每个位平面进行基于上下文的算术编码 (MQ编码) 。

图2是MQ编码器的一个简要工作流程。它的输入是当前的数据位D和当前位的上下文 (如前文表述概念) 决定的类型CX组成的一个决定对, 而输出是单个的压缩码字, 也就是压缩数据CD。压缩数据CD也叫做一个“MQ码段”, 只是被压缩的码流中的一部分。当数据位D和类型CX组成的数据对 (CX, D) 从位平面编码器到达时, 压缩数据位CD增量的产生。

MQ编码器使用了状态变量来实现算术编码, 这些变量包括A, C, temp, t和L。A和C是分别用来表示概率区间长度和下限, 他们一起表示出当前的概率子区间。temp为一临时的字节缓冲器, 用来保存输出的编码。t用作一个计数器, 当这个计数器减少到零时, 部分产生的编码位应被移出C寄存器, 并移入临时字节缓冲器temp中。L代表到当前为止所产生的编码字节数。

由于不同码流引起的输出序列是不同且唯一的, 所以MQ编码器对于不同的码流概率估计值也不可能是固定的, 必须能够实现随着码流数据变化而随时调整。MQ编码器通过使用概率值表和上下文状态表能够实现随码流变化自适应的功能。

其中概率估计表是一个可以对原始数据快速适应的概率估计模型。概率估计表包括47个索引值。每个索引都对应着不同的状态, 每个状态有28位, 其中6位是当前符号是大概率符号 (MPS) 时下一个索引 (NMPS) ;6位是当前符号是小概率符号 (LPS) 时下一个索引 (NLPS) ;一位是交换位 (SWITCH) 来确定本轮是否发生大概率符号的交换, 只有当前符号是小概率符号的时候才有可能用到;15位是小概率符号的概率值 (Qe) , 它体现了序号值Index和对类型CX的LPS最不可能符号的估计概率之间的关系。大概率符号 (MPS) 就是在之前的码流中出现的次数多的符号, 它就是0或者1, 随着码流输入不断变化。

上下文概率映射表包括19个不同的状态, 每个状态包括索引值 (index) 和大概率符号值 (MPS) 。Index是一个范围从0到46的6比特量, 对应于概率估计表中的一项, 用于标识对当前类型的符号集合做的概率估计。

MQ编码器大体可以分为两个主要阶段[2], 第一阶段是编码阶段, 根据输入的上下文判断当前的编码符号的类型是大概率符号 (MPS) 还是小概率符号 (LPS) , 并根据该类型当前保存的索引取出当前该类型符号的概率估计值 (Qe) , 并根据Qe值按照输入D进行新概率计算, 更新A、C寄存器和该类型的索引。第二阶段是重归一化阶段, 主要进行码流的输出和概率的重归一化。

针对MQ编码器的性能问题, 不少学者提出了优化方案, 刘奇卫[3]等人设计了4级流水线的2符号并发编码结构, 王振道[4]等人设计实现了一种部分并行的优化算法, 但这些优化都是针对算法本身的改进, 没有针对DSP应用平台, 仍无法改变其不适应DSP环境的问题。本文基于TI的C6000系列DSP, 消除了JPEG2000在DSP环境下对流水线排布影响较大的上下文机制, 将MQ编码器模块进行适应性改造, 大幅提高了程序的运行速度。

2 改写过程中的线性汇编优化

首先对于MQ编码器使用线性汇编语言进行改写, 但仅仅对原模块进行简单的线性汇编改造, 并没有体现出本文选择DSP处理器的初衷。为了充分发挥DSP并行优势, 提高程序性能, 使用了以下方法:

(1) 使用DSP环境下的指令条件执行机制来取代原有跳转指令。根据不同的DSP型号, 在DSP中一般会提供5-6个条件寄存器, 储存在该寄存器中的变量可用于作为其它指令的条件:即当条件寄存器内变量非0时, 使用它作为条件的指令就会被执行, 否则则不执行, 具体改造示例如图3所示:

(2) 循环展开。由于编译器进行流水排布时只对最内层循环进行排布, 因此在程序改造中通过条件执行机制将嵌套循环的外层循环每次迭代后的参数变化改为条件执行语句, 从而展开这一层循环, 扩大流水排布范围, 达到进一步改善流水排布效果的目的。具体改造示例如图4所示:

(3) 通过数据预取与打包减少流水空闲。流水线排布的成功与否主要受到程序的结构影响, 而排布成功之后的流水线的执行时间则主要受制于访存指令多少。访存指令需要多个周期执行, 且往往与其后的指令有较高的相关性, 很多时候会导致流水线因等待数据而停滞。对此, 本文主要采用一次存取多个数据和提前读取数据的方法减少访存指令的数量及其造成的流水线空白期。C6000系列一次可以存取64位数据, 而一般程序中处理的数据以16位和32位为主, 这样通过64位的存取操作指令和数据处理指令我们可以一次读取多个数据从而减少存取指令的数量。同时, 我们将循环中的读取指令提前, 即在进入循环前预取第一次循环所要用到的数据, 以后每次循环都在做本次循环的数据处理的同时预取下次循环即将用到的数据, 减少因等待数据而造成的流水线停滞。

3 MQ编码器模块优化

针对DSP独特的体系结构, 为了提高MQ模块在DSP环境下的效率, 不仅仅需要在汇编语言级别进行适应性优化, 而且需要对MQ编码器的流程进行优化改造, 使之在目标平台上具有更高的效率。

3.1 编码流程简化

MQ的编码阶段的算法流程如图5所示, 算法有五条执行路径, 在原有算法的运行情况下DSP的汇编优化器难以排布并行流水线, 效率会大大降低。而如果基于前述的DSP并行流水排布规则进行优化, 为了消除分支指令, 相当于将5条路径全部展开串行执行, 将导致循环单次迭代长度过长且相关性较高, 即使排布出流水也极大的影响流水线排布效果。因此, 需要对算法的执行流程进行优化。

将图中的左路分支合并入右路后MQ编码器的重归一化流程如图6所示, 其中, 当t=0时的字节输出过程在一次重归一化过程中最多执行2次, 输出字节时有两种情况主要是因为MQ编码器当0x FF字节被输出到字节缓冲器时, 会将一多余的冗余位插入到变化的码字中, 保证来自之前编码中对C寄存器的算术操作所产生的进位不会传播到已经被发送到字节缓冲中的字节。在发生第一次字节输出时, 由于C寄存器的值来源于编码阶段, 在发生C=C+D的操作时可能会产生进位, 故8位的temp寄存器的值在与进位相加时出现了3种可能会大于等于0x FF的情况, 这就使得不仅需要对输出进行独立, 使temp=0x100时输出0x FF, 还需要在寄存器向temp中移入值时考虑进位的存在, 导致这一分支比较复杂。但是在第二次字节输出发生时, 寄存器C和t的值都来源于上一次字节输出后的更新, 这种情况下, 上一次字节输出后的处理保证了这一次t=0时C一定不会产生进位, 故不需要考虑特殊的输出, 也不需要考虑保留进位, 其过程可简化成如, 从而减少冗余分支, 提高性能。

3.2 二次重归一化的冗余分支消除

首先将图7中的左路分支合并入右路后MQ编码器的重归一化流程。其中, 当t=0时的字节输出过程在一次重归一化过程中最多执行2次, 输出字节时有两种情况主要是因为MQ编码器当0x FF字节被输出到字节缓冲器时, 会将一多余的冗余位插入到变化的码字中, 保证来自之前编码中对C寄存器的算术操作所产生的进位不会传播到已经被发送到字节缓冲中的字节。

在发生第一次字节输出时, 由于C寄存器的值来源于编码阶段, 在发生C=C+D的操作时可能会产生进位, 故8位的temp寄存器的值在与进位相加时出现了3种可能会大于等于0x FF的情况, 这就使得不仅需要对输出进行独立, 使temp=0x100时输出0x FF, 还需要在寄存器向temp中移入值时考虑进位的存在, 导致这一分支比较复杂。

但在第二次字节输出发生时, 寄存器C和t的值都来源于上一次字节输出后的更新, 这种情况下, 上一次字节输出后的处理保证了这一次t=0时C一定不会产生进位, 故不需要考虑特殊的输出, 也不需要考虑保留进位, 其过程可简化成如图8, 从而减少冗余分支, 提高性能。

4 试验及测试结果

选用不同分辨率下的图像压缩的标准测试样本中Lena的黑白二值图片作为测试集合。对于使用原始MQ编码器模块的JPEG2000程序及使用优化后版本的JPEG2000程序分别进行压缩测试并利用Profiler获取其总执行时间及MQ模块执行时间。各程序版本编译选项为-opt-level=3。测试结果如下表所示。测试结果表明, 本文提出的MQ模块优化改造有效提高了MQ模块及压缩程序的执行效率。

5 结束语

本文提出了一种星载DSP环境下JPEG2000的算术编码模块的优化方案, 该方案采用循环展开等方法解决原程序无法排布软件流水的问题, 另外通过算法执行路径和垂直提升算法进行优化改造, 从而大大提高了MQ模块的单次执行效率以及JPEG2000压缩算法的整体压缩效率。另外, 该方法在实际使用中还有若干问题有待解决, 如MQ编码器软件流水排布效率问题以及JPEG2000中其他模块的优化问题等, 都有待于进一步研究。

摘要:随着航空技术和专用CCD/CMOS成像技术的飞速发展, 星载系统中图像的大小和清晰度都成倍的提高, 由此带来的数据量和带宽要求也呈指数级增长, 如何在星载高性能的计算平台下有效压缩图像成为了星载系统面临的最主要挑战之一。经典的JPEG2000图像压缩算法, 其模块并不适应高性能DSP中编译器进行流水线排布的要求, 导致运行效率无法达到要求。本文面向JPEG2000图像压缩算法, 提出一种在DSP环境下, JPEG2000算法中MQ编码器的优化算法。优化算法使用了多种线性汇编语言流水线排布的通用优化技术对MQ编码器进行DSP环境适应性优化, 并根据MQ编码器算法特点, 进行了编码流程简化和二次重归一化过程中冗余分支的消除。图像压缩试验表明, 该算法提高了MQ编码器的吞吐率, 提升了JPEG2000的压缩效率。

关键词:数字信号处理器,JPEG2000,算术编码器,线性汇编

参考文献

[1]Texas Instruments Incorporated.TMS320C6000系列DSP编程工具与指南[M].田黎育, 何佩琨.出版地:北京清华大学出版社, 2006.9:235-240.

[2]Skodras A, Christopoulos C, Ebrahimi T.The Jpeg 2000 Still Image Compression Standard[J].IEEE Signal Processing Magazine, 2010, 18 (5) :36-58.

[3]刘奇卫.基于JPEG2000二进制算术编码器的研究与设计[D].浙江大学, 2006.

上一篇:浦东新区2019-2021年部门中期财政下一篇:羽毛球比赛犯规