毕业设计
DTMF信号编、解码器设计及仿真
学 院: 信息学院
信息工程 专 业:
姓 名:
指导老师:
学 号: 职 称: 副教授
XXX
XXX毕业设计 毕业设计
诚信承诺书 诚信承诺书
本人郑重承诺:本人郑重承诺:我所呈交的毕业设计《DTMF信号编、解码器设
计及仿真》是在指导教师的指导下,开展研究取得的成果,文中
引用他人的观点和材料,均在文后按顺序列出其参考文献,论文使用的数据真实可靠。
日期: 年 月 日
承诺人签名:
DTMF信号编、解码器设计及仿真
摘 要 要
DTMF(dual tone multiple frequency)编码是用两个单频音的合成音来表示一个数字或符号。 DTMF解码是用特定的方法或算法识别两个单频音的合成音,提取其包含的数字或符号信息。DTMF信号编码、解码已经成为一种非常成熟的技术,依循的技术规范是ITU Q.23。相对于脉冲拨号方式,DTMF 方式的优点是拨号速率高,通话期间也适用,不会引入明显的干扰。DTMF 编码技术主要包括单音发生和双音合成两部分;DTMF解码技术主要包括双音检测、收发同步和单音分离判别三部分。理解和解决这些技术问题对研发和设计一般通信设备和系统具有普遍意义。
本文在分析讨论原有的DTMF编码、解码方法的基础上分别提出了一种新的DTMF 编码算法和一种新的DTMF 解码算法。在Ti的TMS320CXX DSP 上仿真结果表明,新的DTMF编码、解码算法简单易于实现,编码效率高,运行速度快,解码误差率低,是很有实用价值的算法。
关键词:DTMF信号编码 DTMF信号解码 TMS320CXX DSP应用
DTMF signal encoder and decoder design and simulation
ABSTRACT
DTMF (dual tone multiple frequency) encoding is to use the synthesis of two
single-tone sounds to indicate a number or symbol. DTMF decoding is to use a particular method or algorithm to recognize the synthesis of two single-tone sound, and extract information which contained within the numbers, or symbols. DTMF signal encoding and decoding has become a very mature technology, that follows the technical specification ITU Q.23. Relative to the pulse dialing, DTMF dialing method has the advantage of high rate, and applies during a call without introducing significant interference. DTMF tone encoding techniques include the occurrence and synthesis of two-tone ; DTMF decoding techniques include dual-tone detection, tone transceiver separation of synchronization and identification .Understanding and solving these technical problems has universal significance for designing in general communications equipment and systems.
On the analyzing result of some of the existing DTMF signal encoding, we has advanced a new DTMF signal encoding and decoding algorithm respectively in the paper. The result of simulation analysis on Ti TMS320CXX DSP shows that the new DTMF signal encoding and decoding algorithm are simple and easy to realize, possess high coding efficiency, high rate to run,and decoding error rate very low , have practical application value.
Keywords: DTMF Signal Encoding DTMF Signal Decoding TMS320CXX DSP Application
目 录
摘 要 ............................................... I ABSTRACT ............................................ II 1 引言 ............................................... 1 2 双音多频信号技术规范 ............................... 2 3 双音多频信号发生算法分析论证 ....................... 3 3.1 双音多频信号发生现有算法分析 ..................... 3 3.2 改进的双音多频信号发生编码算法 ................... 5 4 双音多频信号解码算法设计论证 ....................... 7
4.1 双音多频信号接收解码现有算法分析 ................... 7
4.2 一种新的双音多频信号接收解码算法 ................. 8 5 Cxx DSP 性能特点 ................................ 11 5.1 Cxx DSP硬件结构 .............................. 11 5.2 Cxx DSP指令系统 .............................. 12 5.3 DSP集成开发工具CCS ............................. 15 6 算法实现DSP源程序注解 ............................ 17 7 算法仿真结果与讨论 ................................ 23 7.1 双音多频信号发生编码算法仿真结果 ................ 23 7.2 双音多频信号接收解码算法仿真结果 ................ 23 7.3 算法仿真结果讨论 ................................ 23 8 结论 .............................................. 24
参考文献 ............................................ 25 附录:DTMF 编码、解码数据表 ......................... 26 谢辞 ................................................ 29
1 引言1 引言
DTMF即双音多频(dual tone multiple frequency)编码是用两个单频音的合成音来表示一个数字或符号,通常用于用户话机端。DTMF解码是用特定的方法或算法识别两个单频音的合成音,提取其包含的数字或符号信息,通常用于局交换机端。DTMF编码和解码依循的技术规范是ITU Q.23。相对于脉冲拨号方
式,DTMF 方式的优点是拨号速率高,通话期间也适用,不会引入明显的干扰。DTMF 编码技术主要包括单音发生和双音合成两部分;DTMF解码技术主要包括双音检测、收发同步和单音分离判别三部分。本文在分析讨论现有的DTMF编码、解码方法的基础上分别提出了一种新的编码、解码算法。这些算法简单易于实现,在Ti的TMS320CXX DSP 上仿真结果表明,编码效率高,解码差错率低。
DTMF信号编码、解码技术虽然比较简单,然而麻雀虽小五脏俱全,DTMF信号编码包含信号发生与合成技术,DTMF信号解码包含信号滤波、相关检波和收发同步技术。理解和解决这些技术问题对研发和设计一般通信设备和系统具有普遍意义。
课题首先将分析现有的一些DTMF信号编码、解码算法,在此基础上结合Ti TMS320CXX DSP 的性能特点,研究设计新的简单易于实现的有实用价值的DTMF信号编码、解码算法。
1
[3]ITU-T Recommendation Q.23: TECHNICAL FEATURES OF PUSH-BUTTON TELEPHONE SETS. 1993
2 双音多频信号技术规范
双音多频信号编解码依照的技术规范是 ITU-T的Q.23。该规范只对局交换机端的接收器制定了DTMF信号的标准和要求,如定义了低频音组和高频音组各4个单频音、各单频音的频率误差上下限、各低音高音对所代表的数字或符号、低音高音合成功率电平比、传号时长和间隔时长等。以下列出的是该技术规范的要点:
低频音组的4个单音频率: 697Hz, 770Hz, 852Hz, 941Hz. 高频音组的4个单音频率: 1209Hz, 1336Hz, 1447Hz, 1633Hz
以上各低音和高音频率相对误差上下限是:±1.8 % 表2.1列出的是每对双音所代表的数字或符号。
表2-1 DTMF 字符--频率对应表
数字或符号低音频率高音频率0941Hz1336Hz1697Hz1209Hz2697Hz1336Hz3697Hz1447Hz4770Hz1209Hz5770Hz1447Hz6770Hz1447Hz7852Hz1209Hz8852Hz1336Hz9852Hz1447Hz*941Hz1209Hz#941Hz1447Hza697Hz1633Hzb770Hz1633Hzc852Hz1633Hzd941Hz1633Hz
由单音合成为双音的编码过程是直接求两个单音的代数和,即
x(t)=Al⋅sin(2π flt)+Ah⋅sin(2π fht)
功率电平要求: 负载电阻600Ω
高音电平:-6dBm±2dBm 低音电平:-8dBm±2dBm
高音电平高于低音电平2±1dBm,以弥补电话线路相对低频段对高频段的过衰减。
信号定时要求: 传号时长:≥ 65 ms
传号间隔(暂停)时长: 65 ms
多≥
3 双音多频信号发生算法分析论证3 双音多频信号发生算法分析论证 双音多频信号发生算法分析论证
3.1 双音多频信号发生现有算法分析
现有双音多频信号发生编码算法主要有三类:
(1) 查表法
预先按采样间隔和一定精度计算出各单频音信号的取样值,存列为若干常数 表。发生某一音频信号只须取用对应的表数据即可。
查表法的困难在于:一个音频信号周期一般不会恰好是采样周期的整数倍,如话音通信设备通常使用的采样率是8000Hz, DTMF 的8 个单频音信号周期都不是采样周期的整数倍。为了计算出一个单频音信号的完整样值数据表,往往要计算存列几个周期的样值数据,使得常数表长度成倍增加,即所需存储资源成倍增加。对于多个单频音信号的情形,各单频音信号的常数表的长度都不一样,增加了编码处理的难度。
此法的优点是在线计算量小,速度快,对处理器的处理能力要求较低。
(2) 级数近似计算法
用下面的级数近似地在线计算各单频音信号的样值数据。
sin(x) =3.140625x + 0.02026367x2 - 5.325196x3 + 0.4678x4
+1.800293x5
这里 0 < x < π/2.
该法的优点是需要的存储资源少。不足之处是在线计算量较大,对处理器的处理能力要求较高。
(3)谐振递推法
(2-1)
容易证明下列等式:
,,, 2002137 [2]
[5] Tim Massey and Ramesh Iyer, DSP Solutions for Telephony and Data/Facsimile Modems, Ti Application Report, SPRA073 - January 1997
1
2
sinωTs(k+1)=2cosωTssinωTs(k)−sinωTs(k−1)cosωTs(k+1)=2cosωTscosωTs(k)−cosωTs(k−1)
事实上,将其改写成下列形式,则两式成立显然。
sinωTs(k+1)+sinωTs(k−1)=2cosωTssinωTs(k)cosωTs(k+1)+cosωTs(k−1)=2cosωTscosωTs(k)
用递推法计算单频音样值数据的过程是: 输入3个递推初值:sin
ωTs,cosωTs,sin0/cos0
;
计算 sinωTs(2),cosωTs(2);
一般地,可由sinωTs(k),cosωTs(k),sinωTs(k-1),cosωTs(k计算sinωTs(k+1),cosωTs(k+1)。
用此法的优点也是需要的存储资源较少,计算量也适中。问题是误差积累,随递推次数的增加,误差会变得越来越大。用32位精度递推计算,也只能保证前一两个周期样值数据在满意的误差限度之内。若是一个单频信号,则可通过每周期递推初值复位处理来控制误差。对于像DTMF信号这样的多个单频音的情形,每个单频音的周期都不一样,用周期递推初值复位处理来控制误差就比较复杂了。
−1)
3.2 改进的双音多频信号发生编码算法
通过对双音多频信号的特点和现有发生算法的分析知道,前述三种算法都各有短长。如何设计一种准确、快速、计算量小、耗费系统资源小的双音多频信号发生算法,取现有算法之长,避其之短,这是我们要研究的问题。
首先我们将级数近似计算法排除在考虑之外,因为此法基本上无改进的余地。其次考虑对谐振递推法改进的可能,除了误差积累问题不好解决之外,还有递推需要批量计算,即一次计算一批数据,仍然需要一定的存储资源,这就落于查表法的弊端,且比查表法计算量大,速度慢。如果我们能基于查表法设计一种双音多频信号发生算法,使得8个单频音信号的发生都共用一个表,这样既保留了查表法简单、快速的优点,又消除了其耗费存储资源过多的不足。
基于上述想法,我们具体地给出如下双音多频信号发生算法:
(1) 在技术规范允许的误差限度内,将其定义的8 个单音频率作相应的近似
修改。标称频率与近似频率的对比如表3-1所示。
表3-1 标称频率与近似频率的对比
标称频率 近似频率
69770077077085285094194012091210133613401447145016331630
近似频率的特点是都能被10整除。
(2) 取采样率为8000Hz,计算如下10Hz 单频音信号一个周期的800个样值数据,每个数据为16位Q15格式,存列为一个常数表,共用1600字节。
2π⋅10πk=sinksin
8000400
k=0,1,2,L798,799
(2) DTMF 的8个单频音信号的样值数据都可由此表中查得,即
sinsinsinsinsinsinsinsin
π2π⋅700
k=sin(70k)80004002π⋅770πk=sin(77k)80004002π⋅850πk=sin(85k)80004002π⋅940πk=sin(94k)80004002π⋅1210πk=sin(121k)
80004002π⋅1340πk=sin(134k)
80004002π⋅1480πk=sin(145k)
80004002π⋅1630πk=sin(163k)
8000400
k=0,1,2,3Lk=0,1,2,3Lk=0,1,2,3Lk=0,1,2,3Lk=0,1,2,3L k=0,1,2,3Lk=0,1,2,3Lk=0,1,2,3L
要特别注意的是:在单频音信号的发生和双音合成编码过程中要采用环形寻址模式。
4 双音多频信号解码算法设计论证4 双音多频信号解码算法设计论证 双音多频信号解码算法设计论证
4.1 双音多频信号接收解码现有算法分析
(1) 带通数字滤波法
此法的原理是以8个DTMF 单音频率为中心设计8个窄带数字滤波器,将接收到的DTMF 数字信号经由这些滤波器滤波,比较滤波器的输出结果,输出功率电平最高的一对滤波器所对应的单音频率即是发送的双音,由此解码出相应的数字符号信息。
该法的难点是窄带数字滤波器的设计,滤波器阶数过低将达不到要求的滤波精度,误码率会增加;滤波器阶数过高计算量会明显增加,占用的存储资源也会增加。8个窄带数字滤波器,其复杂度和对处理器能力的要求可想而知。
唯一的优点是解码原理直观明了。
(2) FFT 法
FFT 即快速付里叶变换法。此法本质上是对接收到的DTMF 数字信号作频 谱分析从而完成解码。首先,DTMF 的8个单音频率相互都不存在谐波关系,不作相应地处理,无法直接使用FFT。其次,8000Hz 采样率,大于 65毫秒的传号时长将产生多于520个样本数据,即使分成3段解码,其FFT变换矩阵的阶数和复数计算量都非常可观。
,,, 2006249 [1]
[4] Gunter Schmer, DTMF Tone Generation and Detection: An Implementation Using the TMS320Cx, Ti Application Report, SPRA096A - May 2000
1
2
4.2 一种新的双音多频信号接收解码算法
先证明一个等式:
j2πI
N
j2πI
2N
j2πI
3N
j2πI
(N−2)N
j2πI
(N−1)N
1+e
+e+e+L+e+e=0(4−1)
其中 0j2πI
N
j2πI
2N
j2πI
3N
j2πI
(N−2)N
j2πI
(N−1)N
j2πI
(N−1)N
j2πI
NN
S = 1+e S⋅e
j2πIN
+e+e+L+e+e
=e
j2πIN
j2πIN
+e
j2πI
2N
+e
j2πI
3N
+L+e
j2πI
NN
j2πI
(N−2)N
+e+e
S−S⋅e=S(1−e
j2πIN
)=1−e=1−1=0
再证明一组等式:
NN
2πJ2πI J=I≠
∑sinksink=22
NNk=0J≠I0
N−1
(4−2)
2πJ2πI
kcosk=0sin∑NN k=0
N−1
(4−3)
证明:
由(4-1)式及下列等式,则(4-2)、(4-3)式成立显然。
2π2JN−11
k) (1−cosJ=I∑ N−12πJN2πIk=02
ksink=N−1 ∑sin NN k=01[cos2π(J−I)k−cos2π(J+I)k] J≠I
∑NNk=02
2πJ2πI
kk=sincos∑NN k=0
N−1N−1
12π(J+I)2π(J−I)
kk] [sinsin+∑NNk=02
N−1
2πI
N−1k−jI21jNkπN ∑cosk=∑(e)+e
Nk=0k=02
2πI2πI N−1N−1jkk−j2πI1NN
k=∑sin(e)−e∑Nk=02j k=0
2πI
进一步由(4-2)、(4-3)式不难证明下列二式成立:
NNN−1
=≠ Asin(2πJk+θ)sin2πIk=2Acosθ JI2
NNk=0
∑
(4−4)
0J≠I
N2πJ2πIAsinθAsin(k+θ)cosk=2∑NNk=00
N−1
J=I≠
N3N
≠44
(4−5)
根据 (4-4)式和(4-5)式,设计一种新的双音多频信号接收解码算法如
下:
接收到的DTMF 样本数据可表示为:
2πI2πJ
x(k)=ALsin(k+θL)+AHsin(k+θH)
800800
其中 I = 70, 77, 85, 94; J = 121, 134, 145, 163
∑
k=0
799
400ALcosθL
2πV
x(k)sink=0
800400AcosθHH
V=IV≠I≠J
V=J
∑
k=0
799
400ALsinθL
2πV
x(k)cosk=0
800400AsinθHH
V=I V≠I≠J
V=J
799
799
2πV2πV2
2
[∑
x(k)sink=0
800160000A2
L=0
160000A2H
据此可解码出I,J.
k]+[∑x(k)coskk=0
800]V=IV≠I≠J V=J
5 Cxx DSP 5 Cxx DSP 性能特点Cxx DSP 性能特点 性能特点
5.1 Cxx DSP硬件结构
Cxx CPU 由8个处理单元,两个寄存器组,以及两个数据通道组成。两个通用寄存器组(A组和B组)每组包含32个32位的寄存器,共个寄存器。通用寄存器可用于保存数据或数据指针。支持的数据类型包括8位封装的数据,16位封装的数据,32位数据,40位数据,位数据。值大于32位,如40位长或位长的数据都储存在寄存器对中,数据的32 位最小有效位存放在一个偶数编号的寄存器中,其余的8或32位最大有效位存放在下一个更高编号的寄存器中(这总是一个奇数编号的寄存器)。
Cxx CPU 的8个处理单元(.M1, .L1, .D1, .S1, .M2, .L2, .D2, and .S2) 每个都能在一个时钟周期内执行一条指令,一个时钟周期内CPU最多可执行指令。M单元的功能是执行所有乘法指令。S和L单元进行一般的算术,逻辑,和分支运算。D单元主要功能是从存储器读取数据载入寄存器和将寄存器的数据存储到存储器中,还具有部分算术逻辑运算能力。每个M单元每个指令周期可以执一个32 × 32位乘法,一个16 × 32位乘法,两个16 × 16位的乘法,两个16 × 16位的乘法再加/减功能,四个8 × 8位乘与加运算,和4个16 × 16乘法与加/减功能(包括复数的运算)。此外,还支持伽罗华域乘法的8位和32位数据。许多通讯算法,如FFTs和调制解调器需要复杂的乘法。复杂的多(CMPY)指令将16位输入的32位实部和一个32位虚部输出。也有复数的增加与舍去的能力使一个32位输出包含16位实部和16位虚部。32 × 32位乘法指令扩展精度提供必要的音频和其他高精度算法对各种签署和未签署的32位数据类型。L单元或(算术逻辑单元)在共同的输入同时去进行添加/减去运算。这一指令的版本工作在32位数据上,或对16位数据并列进行双16位地址和减去。也可以从这些指示中饱和。
多数通用处理器采用冯-诺依曼总线结构,由于程序和数据空间统一,取指和取数据必须分别进行。Cxx DSP采取了程序总线和数据总线的哈佛总线结构,这样取指和取数据可同时进行从而节省了时间。
DSP算法通常需要频繁地进行数据存取,因此计算地址要占用相当的时间。Cxx DSP具有专用的计算地址的单元(D1|D2)--地址产生器,它与ALU并行工作,不再额外占用CPU时间。
5.2 Cxx DSP指令系统
C62xx,Cxx DSP指令系统是向后兼容的,如下是Cxx DSP指令系统的基本指令表.
表5-1 Cxx DSP指令系统的基本指令表.
ABS
ABS ( .unit) src1, dst
.unit = L1,.L2
ABS .L1 A1, A5
ADD(U) ADD (.unit) src1,src2, dst
ADDU(.L1 or.L2) src1,src2, dst ADD(.D1 or.D2)src2,src1, dst .unit=.L1, .L2, .S1, .S2 ADDAB/ ADDAH/ ADDAW
ADDK
ADDAB(.Unit)Src2,Src2,Src1,dst ADDAH(.Unit)Src2,Src1,dst ASSAW(.Unit)Src2,Src1,dst .Unit=.D1.D2
ADD.L2X A1,B1,B2 ADDU.L1 A1,A2A5,A4 ADD.D1 26,A1,A6 ADDAB.D1 A4,A2,A4 ADDAH.D1 A4,A2,A4 ADDAW.D1 A4,A2,A4 ADDK.S1 10,A1
16
ADDK(.Unit)cst, dst
.Unit=.S1.S2
ADD2 AND B
ADD2(.Unit)Src1,Src2,dst
.Unit=.S1.S2
ADD2.L1X A1,B1,A2
16
AND.L1X A1,B1,A2 AND.L1 15,A1,A3 B.S1 LOOP
ADD.L1 A1,A2,A3 ||ADD.L2 B1,B2,B3
LOOP;MPY,MJX A3.B3,A4 ||SUB.D1 A5,A6,A6 B.S2 B10
ADD.L2 A1,A2,A3 ||ADD.L2 B1,B2,B3 MPY.MIX A3,A3,A4
AND(.Unit)Src1,Src2,dst .Unit=.L1.L2,.S1.S2
B(.Unit)label
.Unit=.S1.S2
B
B(.Unit)Src2 .Unit=.S2
表5-1 Cxx DSP指令系统的基本指令表(续)
B(.Unit)IRP
.Unit=.S2
BIRP
PC=00001000 IRP=00000000 B.S2 IRP
ADD.S2 A0,A2,A1 MPY.M1 A1,A2,A1 NOP
SHR.S1 A1,I5,A1 ADD.L1 A1,A2,A1 ADD.L2 B1,B2,B3
B NRP
B(.Unit)NRP .Unit=.S2
(
PC=0000100 NRP=00001000 B.S2 NRP
ADD.S1 A01A2A1 MPY.M1 A1,A0A1 NOP
SHR.S1 A1 I5,A1 ADD.L1 A1,A2,A1 ADD.L2 B1,B2,B3
NMI
)
CLR
CLR(.Unit)Src2,csto,cstb,dst CLR(Unit)Src2,Src1,dst .Unit=.S1S2
CLR.S1 A1,4.19,A2 CLR,S2 B1,B3,B2 CMPEQ.L1X A1,B1,A2 CMPEQ.L1 Ch,A1,A2
CMPEQ.L2X A1,B5,B2.B1 CMPLT.L1 A1,A2,A3 CMPLT.L1X A1,B1,A2
CMPLTU.L1 0EH,A3,A2,A4 CMPLT.L1X A1,B1,B2 CMPLT.L1X A19,A1,A2 CMPLTU.L1 A1,A5,A4,A2 EXT.S1 A1,10,19,A2 EXT.S1 A1,A2,A3 EXTU.S1 A1,10,19,A2 EXTU.S1 A1,A2,A3 IDLE
CMPEQ
CMPEQ(.Unit)Src1,Src2,dst
.Unit=.L1.L2
Src1Src2
CMPGT (U) CMPLT (U) EXT
CMPGT(.Unit)Src1,Src2,dst CMPGT(U)(.Unit)Src1,Src2,dst .Unit=.L1 or.L2
CMPLT(.Unit)Src1,Src2,dst CMPLT(.Unit)Src1,Src2,dst .Unit=.L1 or .L2
EXT(.unit)src2,csta,cstb,dst EXT(.unit)src2,src1,dst .unit=.S1 or.S2
EXTU(.unit)src2,csta,cstb,dst EXTU(.unit)src2,src1,dst .unit=.S1 or.S2 IDLE
Src1
Src2
Src1
Src2
EXTU
IDLE
表5-1 Cxx DSP指令系统的基本指令表(续)
LDB(U)/
LDH(U)/ LDW
LDB(.unit)*+baser[offsetR],dst LDH(.unit)*+baser[offsetR],dst LDW(.unit)*+baser[offsetR],dst LDBU(.unit)*+baser[offsetR],dst LDHU(.unit)*+baser[offsetR],dst
LDB(.unit)*+baser[ucstS],dst LDH(.unit)*+baser[ucstS],dst LDW(.unit)*+baser[ucstS],dst LDBU(.unit)*+baser[ucstS],dst LDHU(.unit)*+baser[ucstS],dst .unit=.D1 or.D2
LDW.D1*A10,B1 LDB.D1*-A5[1].A7 LDH.D1*++A4[A1].A8 LDW.D1*++[1],A6 LDW.D1*++A4[1],A6
LDB(U)/
LDH(U)/ LDW
LDB(.unit)*+B14/B15[ucst15],dst LDH(.unit)*+B14/B15[ucst15],dst LDW(.unit)*+B14/B15[ucst15],dst LDBU(.unit)*+B14/B15[ucst15],dst LDHU(.unit)*+B14/B15[ucst15],dst .unit=.D2
LMBD(.unit)src1,src2,dst .unit=.L1 or.L2
MPY(.unit)src1,src2,dst MPYU(.unit)src1,src2,dst MPYUS(.unit)src1,src2,dst MPYSU(.unit)src1,src2,dst .unit=.M1 or.M2
LDB.D2*+B14[36],B1
LMBD MPY(U/
US/SU)
LMBD.L1 A1,A2,A3 MPY.M1 A1,A2,A3 MPYU.M1 A1,A2 A3 MPYUS.M1 A1,A2,A3 MPY.M1 13,A1,A2 MPYSU.M1 13,A1,A2 MPYH.M1 A1,A2,A3 MPYHU.M1 A1,A2,A3 MPYHSU.M1 A1,A2,A3
16lsb16lsb
MPYH(U/ MPYH(.unit)src1,src2,dst
US/SU or
MPYHU(.unit)src1,src2,dst or
MPYHUS(.unit)src1,src2,dst or
MPYHSU(.unit)src1,src2,dst .unit=.M1 or.M2 MPYLH (U)/ MPYLUH-
S/ MPYLSH-
U
MPYLH(.unit)src1,src2,dst MPYLHU(.unit)src1,src2,dst MPYLUHS(.unit)src1,src2,dst MPYLSHU(.unit)src1,src2,dst .unit=.M1 or.M2
16msb16msb
MPYLH.M1 A1,A2,A3
16lsb16msb
5.3 DSP集成开发工具CCS
Ti CCS集成开发环境(IDE)具有编辑、编译和调试DSP目标程序的能力。
(1)编辑源程序
CCS允许编辑C源程序和汇编语言源程序,还可以在C语句后面显示汇编指令
的方式来查看C源程序。
图5-1 混合显示源程序窗口
集成编辑环境支持下述功能:
用彩色加亮关键字、注释和字符串。
以圆括弧或大括弧标记C程序块,查找匹配块或下一个圆括弧或大括弧。 在一个或多个文件中查找和替代字符串,能够实现快速搜索。 取消和重复多个动作。 获得“上下文相关”的帮助。
用户定制的键盘命令分配。
(2)创建应用程序
应用程序通过工程文件来创建。工程文件中包括 C源程序、汇编源程序、目标文件、库文件、连接命令文件和包含文件。编译、汇编和连接文件时,可以分别指定它们的选项。在CCS中,可以选择完全编译或增量编译,可以编译单个文
件,也可以扫描出工程文件的全部包含文件从属树,也可以利用传统的makefiles文件编译。
图5-2 工程目录结构
(3)调试应用程序 CCS提供下列调试功能: 设置可选择步数的断点 在断点处自动更新窗口 查看变量
观察和编辑存储器和寄存器 观察调用堆栈
对流向目标系统或从目标系统流出的数据采用探针工具观察,并收集存储器
映象
绘制选定对象的信号曲线 估算执行统计数据 观察反汇编指令和C指令
CCS提供GEL语言,它允许开发者向CCS菜单中添加功能。
6 算法实现6 算法实现DSP源程序注解 源程序注解
(1) DTMF 编码器源程序
函数名:DTMFCoder 调用方式:C语言可调用 输入参数:
word FIndxl ; 低频音索引号 word FIndxh ; 高频音索引号 byte * DstBuff ; 合成音数据存储指针 word SMPNum ; 合成音数据长度(半字单位) 输出参数:无
该过程使用的常数表如附录:DTMF 编码、解码数据表所示。 编码过程采用一种特别的环形寻址技术。源码长度128字节。运行时长为 (SMPNum+1)*6+4 CX指令周期。
;************************************************************** ; A4 = FIndxl, B4 = FIndxh, A6 => DstBuff, B6 = SMPNum * ;**************************************************************
DTMFCoder:
MVKL .S1 Sinwt800, A5 || MVKL .S2 Sinwt800, B5
MVKH .S1 Sinwt800, A5 || MVKH .S2 Sinwt800, B5
MVK .S1 800, A12 || MVK .S2 800, B12
SHR .S1X B6, 1, A2 || MVK .S2 1, B2
|| ADDAH .D1 A5, A12, A12 || ADDAH .D2 B5, B12, B12
DTMFCodeLoop:
[A2] B .S1 DTMFCodeLoop
||[!A2] B .S2 B3
||[A2] LDH .D1 *A5++[A4], A8 ||[A2] LDH .D2 *B5++[B4], B8
CMPLT .L1 A5, A12, A1 || CMPLT .L2 B5, B12, B1 ||[!B2] SHR .S1 A10, 1, A10
[!A1] ADDK .S1 -800*2, A5
||[!B1] ADDK .S2 -800*2, B5 ||[!B2] ADD .L2X B9, A9, B10 ||[!B2] STH .D1 A10, *A6++
[A2] LDH .D1 *A5++[A4], A9 ||[A2] LDH .D2 *B5++[B4], B9 ||[!B2] SHR .S2 B10, 1, B10
CMPLT .L1 A5, A12, A1 || CMPLT .L2 B5, B12, B1 ||[!B2] STH .D1 B10, *A6++
[!A1] ADDK .S1 -800*2, A5
||[!B1] ADDK .S2 -800*2, B5 || ADD .L1X A8, B8, A10 ||[A2] SUB .D1 A2, 1, A2 ||[B2] ZERO .D2 B2
(2) DTMF 解码器源程序
函数名:DTMFDecod 调用方式:C语言可调用 输入参数:
byte * SrcBuff ; 要解码的DTMF样本数据指针 bool FGFlag ; 低音组/高音组指示标志 word SrcLenth ; DTMF样本数据长度(半字单位) 输出参数:
word FIndex ; 解码输出的音频索引号
word MAXValue ; 解码输出的音频对应的功率电平最大值
该函数使用的常数表如附录:DTMF 编码、解码数据表所示。 该函数采用一种特别的环形寻址技术。源码长度448字节。运行时长为 (SrcLenth +1)*6+18 CX指令周期。
;******************************************************** ; A4=> SrcBuff, B4 = FGFlag, A6 = SrcLenth * ; Return: A4 = FIndex, B4 = MAXValue(F0,F1,F2,F3) * ;********************************************************
DTMFDecod:
MVK .S1 70, A8 ; A8 = 70 || MVK .S2 85, B10 ; B10 = 85 || MV .L2 B4, B1 || MVK .D2 1, B2
ADD .D1 A8, 7, A9 ; A9 = 77 || ADD .D2 B10, 9, B11 ; B11 = 94 ||[B1] MVK .S1 121, A8 ; A8 = 121 ||[B1] MVK .S2 148, B10 ; B10 = 148 MVKL .S1 Sinwt800+200*2, A5 || MVKL .S2 Sinwt800, B5
||[B1] ADD .D1 A8, 13, A9 ; A9 = 134
||[B1] ADD .D2 B10, 15, B11 ; B11 = 163 || MPY .M2X 1, A8, B8 || MPY .M1X 1, B10, A10 || ZERO .L1 A21:A20 || ZERO .L2 B21:B20
MVKH .S1 Sinwt800+200*2, A5 || MVKH .S2 Sinwt800, B5 || MV .D1 A6, A2 || STW .D2 B0, *B15-- || ZERO .L1 A23:A22 || ZERO .L2 B23:B22
|| MPY .M1 1, A6, A1 || MPY .M2 1, B2, B1
MVK .S1 600, A12 || MVK .S2 800, B12 || MV .D1 A5, A3 || MV .D2 B5, B4 || ZERO .L1 A25:A24 || ZERO .L2 B25:B24 || MVD .M1 A5, A6 || MVD .M2 B5, B6
MV .S1 A3, A7 || MV .S2 B4, B7
|| ADDAH .D1 A5, A12, A13 || ADDAH .D2 B5, B12, B13 || ZERO .L1 A27:A26 || ZERO .L2 B27:B26
|| MPY .M2X 1, A9, B9 || MPY .M1X 1, B11, A11
DTMFDecodLoop:
[A2] B .S2 DTMFDecodLoop ||[A2] LDH .D1 *A3++[A8], A16 ||[A2] LDH .D2 *B4++[B8], B16 ||[!A1] ADDK .S1 -800*2, A6 ||[!B2] MPY .M1 A16, A12, A16 ||[!B2] MPY .M2X B16, A12, B16 || CMPLT .L1 A7, A13, A1 || CMPLT .L2 B7, B13, B0
[A2] LDH .D1 *A4++, A12 ||[!B1] SUBAH .D2 B6, B12, B6 ||[!B2] MPY .M1 A17, A12, A17 ||[!B2] MPY .M2X B17, A12, B17 || CMPLT .L1 A3, A13, A1 || CMPLT .L2 B4, B13, B1 ||[!A1] ADDK .S1 -800*2, A7 ||[!B0] ADDK .S2 -800*2, B7
[A2] LDH .D1 *A5++[A9], A17 ||[A2] LDH .D2 *B5++[B9], B17 ||[!B2] MPY .M1 A18, A12, A18 ||[!B2] MPY .M2X B18, A12, B18
||[!B2] ADD .L1 A16, A21:A20, A21:A20 ||[!B2] ADD .L2 B16, B21:B20, B21:B20 ||[!A1] ADDK .S1 -800*2, A3 ||[!B1] ADDK .S2 -800*2, B4
[A2] LDH .D1 *A6++[A10], A18 ||[A2] LDH .D2 *B6++[B10], B18 ||[!B2] MPY .M1 A19, A12, A19 ||[!B2] MPY .M2X B19, A12, B19
||[!B2] ADD .L1 A17, A23:A22, A23:A22 ||[!B2] ADD .L2 B17, B23:B22, B23:B22 || CMPLT2 .S1 A5, A13, A1 || CMPLT2 .S2 B5, B13, B1
[A2] LDH .D1 *A7++[A11], A19 ||[A2] LDH .D2 *B7++[B11], B19
||[!B2] ADD .L1 A18, A25:A24, A25:A24 ||[!B2] ADD .L2 B18, B25:B24, B25:B24 ||[!A1] ADDK .S1 -800*2, A5 ||[!B1] ADDK .S2 -800*2, B5 ||[B2] MPY .M2 0, B2, B2
CMPLT2 .S1 A6, A13, A1 || CMPLT2 .S2 B6, B13, B1
||[!B2] ADD .L1 A19, A27:A26, A27:A26 ||[!B2] ADD .L2 B19, B27:B26, B27:B26 ||[A2] SUB .D1 A2, 1, A2 ||[!A2] LDW .D2 *++B15, B0
DTMFDecodLoop_End:
SHR .S1 A21:A20, 24, A21:A20 || SHR .S2 B21:B20, 24, B21:B20
SHR .S1 A23:A22, 24, A23:A22 || SHR .S2 B23:B22, 24, B23:B22 || MPY .M1 A20, A20, A21 || MPY .M2 B20, B20, B21
SHR .S1 A25:A24, 24, A25:A24 || SHR .S2 B25:B24, 24, B25:B24 || MPY .M1 A22, A22, A23 || MPY .M2 B22, B22, B23
SHR .S1 A27:A26, 24, A27:A26 || SHR .S2 B27:B26, 24, B27:B26 || MPY .M1 A24, A24, A25 || MPY .M2 B24, B24, B25
SADD .L1X A21, B21, A4 || MPY .M1 A26, A26, A27 || MPY .M2 B26, B26, B27
B .S2 B3
|| SADD .L1X A23, B23, A22 || SADD .L2X B25, A25, B4
CMPGT .L1 A22, A4, A1 || SADD .L2X B27, A27, B22
[A1] MV .D1 A22, A4
|| CMPGT .L2 B22, B4, B1
[B1] MV .D2 B22, B4
CMPGT .L2X B4, A4, B2
[B2] ADD .L1X 2, B1, A4 ||[!B2] MV .D1 A1, A4
||[!B2] MV .D2X A4, B4
7 算法仿真结果与讨论
双音多频信号发生编码和接收解码算法仿真都是在 Ti公司提供的 CCS 3.2
软件仿真器(Simulater)上进行的。
7.1 双音多频信号发生编码算法仿真结果
源码长度:128字节。
编码时长/符号:(合成音数据长度 +1)*6+4 CX指令周期 输出合成音信噪比:62 dB 输出合成音失真度:0.00000278
7.2 双音多频信号接收解码算法仿真结果
源码长度:448字节。
解码时长/符号:2[(传号时长(ms)*8 +1)*6+18] CX指令周期 10 dB 信噪比条件下误码率:0
7.3 算法仿真结果讨论
在TMS320CXX上实现本文提出的双音多频信号发生编码和接收解码算法占用的处理器资源如下:
ROM或FLASH: < 2k 字节 RAM: < 2k 字节 CPU 处理能力:< 1 MIPS
由此可知,本文提出的DTMF发生编码和接收解码算法占用的TMS320CXX/600M处理器存储资源很少,只用了 4800 MIPS CPU 处理能力的4800 分之一。
8 结论
DTMF 编码技术主要包括单音发生和双音合成;DTMF解码技术主要包括双音检测、收发同步和单音分离判别。理解和解决这些技术问题对研发和设计一般通信设备和系统具有普遍意义。
本文在分析讨论原有的DTMF编码、解码方法的基础上分别提出了一种新的DTMF 编码算法和一种新的DTMF 解码算法。新的DTMF 编码算法引入变步长环形查表技术,实现一张表快速发生DTMF 编码需要的低频组和高频组共8个单音信号。 新的DTMF 解码算法采用文中论证设计的正交相关检波技术,实现DTMF接收信号的快速、精确解码。在Ti的TMS320CXX DSP 上仿真结果表明,文中提出的新的DTMF编码、解码算法简单易于实现,编码效率高,占用处理器资源少,运行速度快,解码误差率低,是很有实用价值的算法。
参考文献:
[1]郑君里,《信号与系统》,高等教育出版社, 2006年,第249页。 [2]程佩青,《数字信号处理教程》,清华大学出版社, 2002年,第137页。 [3]ITU-T Recommendation Q.23: TECHNICAL FEATURES OF PUSH-BUTTON TELEPHONE SETS. 1993
[4] Gunter Schmer, DTMF Tone Generation and Detection: An Implementation Using the TMS320Cx, Ti Application Report, SPRA096A - May 2000 [5] Tim Massey and Ramesh Iyer, DSP Solutions for Telephony and Data/Facsimile Modems, Ti Application Report, SPRA073 - January 1997 [6] ,ZHCU002TMS320C6000 指令集仿真器技术参考, Ti 公司,2005
附录:附录: DTMF 编码DTMF 编码、编码、解码数据表 解码数据表
.def Sinwt800
.data
Sinwt800:
.word 0x01010000,0x03040203,0x05060405,0x07090608,0x090A080A
.word 0x0B0B0A0B,0x0D0C0C0C,0x0F0B0E0C,0x110A100B,0x13081209
.word 0x15041406,0x16FF1602,0x18F917FC,0x1AF119F5,0x1CE71BEC
.word 0x1EDC1DE2,0x20CE1FD5,0x22BF21C7,0x24AD23B6,0x269925A3
.word 0x2882278E,0x2A692976,0x2C4E2B5C,0x2E2F2D3F,0x300E2F1F
.word 0x31E930FC,0x33C232D6,0x359734AC,0x37683680,0x39373850
.word 0x3B013A1C,0x3CC83BE5,0x3E8B3DAA,0x404A3F6B,0x420128
.word 0x43BC42E1,0x456F4496,0x471D46,0x48C747F2,0x4A6C499A
.word 0x4C0C4B3D,0x4DA84CDB,0x4F3E4E74,0x50D05008,0x525D5197
.word 0x53E45321,0x5566A6,0x56E35625,0x585A579F,0x59CC5914
.word 0x5B385A82,0x5C9E5BEB,0x5DFE5D4F,0x5F595EAC,0x60AD6004
.word 0x61FB6155,0x634362A0,0x8563E5,0x65C16524,0x66F6665C
.word 0x6824678E,0x694C68B9,0x6A6E69DE,0x6B886AFC,0x6C9C6C13
.word 0x6DA96D23,0x6EAF6E2D,0x6FAE6F2F,0x70A6702B,0x7197711F
.word 0x7280720C,0x736372F2,0x743E73D1,0x751274A9,0x75DE7579
.word 0x76A372,0x77617703,0x781777BD,0x78C5786F,0x796C7919
.word 0x7A0B79BC,0x7AA27A57,0x7B327AEB,0x7BB97B76,0x7C397BFA
.word 0x7CB27C76,0x7D227CEB,0x7D8A7D57,0x7DEB7DBB,0x7E437E18
.word 0x7E947E6C,0x7EDC7EB9,0x7F1D7EFD,0x7F557F3A,0x7F867F6E
.word 0x7FAE7F9B,0x7FCE7FBF,0x7FE77FDB,0x7FF77FF0,0x7FFF7FFC
.word 0x7FFF7FFF,0x7FF77FFC,0x7FE77FF0,0x7FCE7FDB,0x7FAE7FBF
.word 0x7F867F9B,0x7F557F6E,0x7F1D7F3A,0x7EDC7EFD,0x7E947EB9
.word 0x7E437E6C,0x7DEB7E18,0x7D8A7DBB,0x7D227D57,0x7CB27CEB
.word 0x7C397C76,0x7BB97BFA,0x7B327B76,0x7AA27AEB,0x7A0B7A57
.word 0x796C79BC,0x78C57919,0x7817786F,0x776177BD,0x76A37703
.word 0x75DE72,0x75127579,0x743E74A9,0x736373D1,0x728072F2
.word 0x7197720C,0x70A6711F,0x6FAE702B,0x6EAF6F2F,0x6DA96E2D
.word 0x6C9C6D23,0x6B886C13,0x6A6E6AFC,0x694C69DE,0x682468B9
.word 0x66F6678E,0x65C1665C,0x856524,0x634363E5,0x61FB62A0
.word 0x60AD6155,0x5F596004,0x5DFE5EAC,0x5C9E5D4F,0x5B385BEB
.word 0x59CC5A82,0x585A5914,0x56E3579F,0x55665625,0x53E4A6
.word 0x525D5321,0x50D05197,0x4F3E5008,0x4DA84E74,0x4C0C4CDB
.word 0x4A6C4B3D,0x48C7499A,0x471D47F2,0x456F46,0x43BC4496
.word 0x4202E1,0x404A4128,0x3E8B3F6B,0x3CC83DAA,0x3B013BE5
.word 0x39373A1C,0x37683850,0x35973680,0x33C234AC,0x31E932D6
.word 0x300E30FC,0x2E2F2F1F,0x2C4E2D3F,0x2A692B5C,0x28822976
.word 0x2699278E,0x24AD25A3,0x22BF23B6,0x20CE21C7,0x1EDC1FD5
.word 0x1CE71DE2,0x1AF11BEC,0x18F919F5,0x16FF17FC,0x15041602
.word 0x13081406,0x110A1209,0x0F0B100B,0x0D0C0E0C,0x0B0B0C0C
.word 0x090A0A0B,0x0709080A,0x05060608,0x03040405,0x01010203
.word 0xFEFF0000,0xFCFCFDFD,0xFAFAFBFB,0xF8F7F9F8,0xF6F6F7F6
.word 0xF4F5F5F5,0xF2F4F3F4,0xF0F5F1F4,0xEEF6EFF5,0xECF8EDF7
.word 0xEAFCEBFA,0xE901E9FE,0xE707E804,0xE50FE60B,0xE319E414
.word 0xE124E21E,0xDF32E02B,0xDD41DE39,0xDB53DC4A,0xD967DA5D
.word 0xD77ED872,0xD597D68A,0xD3B2D4A4,0xD1D1D2C1,0xCFF2D0E1
.word 0xCE17CF04,0xCC3ECD2A,0xCA69CB,0xC8C980,0xC6C9C7B0
.word 0xC4FFC5E4,0xC338C41B,0xC175C256,0xBFB6C095,0xBDFBBED8
.word 0xBC44BD1F,0xBA91BB6A,0xB8E3B9BA,0xB739B80E,0xB594B66
.word 0xAC1CACDF,0xAA9AAB5A,0xA91DA9DB,0xA7A6A861,0xA634A6EC
.word 0xA4C8A57E,0xA362A415,0xA202A2B1,0xA0A7A1,0x9F539FFC
.word 0x9E059EAB,0x9CBD9D60,0x9B7B9C1B,0x9A3F9ADC,0x990A99A4
.word 0x97DC9872,0x96B49747,0x95929622,0x947504,0x9393ED
.word 0x925792DD,0x915191D3,0x905290D1,0x8F5A8FD5,0x8E698EE1
.word 0x8D808DF4,0x8C9D8D0E,0x8BC28C2F,0x8AEE8B57,0x8A228A87
.word 0x5DBE,0x8F88FD,0x87E98843,0x873B8791,0x869486E7
.word 0x85F584,0x855E85A9,0x84CE8515,0x8447848A,0x83C78406
.word 0x834E838A,0x82DE8315,0x827682A9,0x82158245,0x81BD81E8
.word 0x816C8194,0x81248147,0x80E38103,0x80AB80C6,0x807A8092
.word 0x80528065,0x80328041,0x80198025,0x80098010,0x80018004
.word 0x80018001,0x80098004,0x80198010,0x80328025,0x80528041
.word 0x807A8065,0x80AB8092,0x80E380C6,0x81248103,0x816C8147
.word 0x81BD8194,0x821581E8,0x82768245,0x82DE82A9,0x834E8315
.word 0x83C7838A,0x84478406,0x84CE848A,0x855E8515,0x85F585A9
.word 0x869484,0x873B86E7,0x87E98791,0x8F8843,0x5D88FD
.word 0x8A22BE,0x8AEE8A87,0x8BC28B57,0x8C9D8C2F,0x8D808D0E
.word 0x8E698DF4,0x8F5A8EE1,0x90528FD5,0x915190D1,0x925791D3
.word 0x9392DD,0x9473ED,0x95929504,0x96B49622,0x97DC9747
.word 0x990A9872,0x9A3F99A4,0x9B7B9ADC,0x9CBD9C1B,0x9E059D60
.word 0x9F539EAB,0xA0A79FFC,0xA202A1,0xA362A2B1,0xA4C8A415
.word 0xA634A57E,0xA7A6A6EC,0xA91DA861,0xAA9AA9DB,0xAC1CAB5A
.word 0xADA3ACDF,0xAF30AE69,0xB0C2AFF8,0xB258B18C,0xB3F4B325
.word 0xB594B4C3,0xB739B666,0xB8E3B80E,0xBA91B9BA,0xBC44BB6A
.word 0xBDFBBD1F,0xBFB6BED8,0xC175C095,0xC338C256,0xC4FFC41B
.word 0xC6C9C5E4,0xC8C7B0,0xCA69C980,0xCC3ECB,0xCE17CD2A
.word 0xCFF2CF04,0xD1D1D0E1,0xD3B2D2C1,0xD597D4A4,0xD77ED68A
.word 0xD967D872,0xDB53DA5D,0xDD41DC4A,0xDF32DE39,0xE124E02B
.word 0xE319E21E,0xE50FE414,0xE707E60B,0xE901E804,0xEAFCE9FE
.word 0xECF8EBFA,0xEEF6EDF7,0xF0F5EFF5,0xF2F4F1F4,0xF4F5F3F4
.word 0xF6F6F5F5,0xF8F7F7F6,0xFAFAF9F8,0xFCFCFBFB,0xFEFFFDFD
谢 辞
在此,由衷地感谢我的指导老师范杰博士,从论文题目选择、提纲拟定、内容排版、到最后的论文敲定,整个论文的完成过程中始终给予我及时正确的指导。另外对答辩和评阅的各位老师表示感谢!
这次毕业设计得到了很多老师、同学的帮助,其中我的导师范杰老师对我的关心和支持尤为重要,在设计刚开始时,老师经常找我们开会,帮助我们整理思路,教我们如何查找资料,如何开始这项设计;之后不断地帮我们纠正,耐心的给我们建议和指导;每次遇到难题,我最先做的就是向范老师寻求帮助,然后一起商量解决的办法。
在这次毕业设计中,使我接触到了一些新的知识领域,扩宽了自己的知识范围,增强了我们实践操作和动手应用能力,提高了思考的能力。对信息工程专业知识更深的理解,使我受益非浅。
感谢学校给予我这样一次机会,使我们在即将离校的最后一段时间里,能够更多学习一些实践应用知识,再一次对我的母校表示感谢。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务