【数字对讲技术】语音编解码芯片AMBE2000中文手册 2012-05-16 18:13
数字语音编码芯片TC2000是一个非常灵活、高性能、单芯片、的语音压缩编码芯片。在低速率时仍能保持优质的语音质量。它是能够实时的、全双工的语音压缩编码芯片。
TC2000
具有多种编码速率选择和FEC(前向纠错)功能。语音编码解码速率可以在2400~9600bps之间以50bps的间隔变化。通常在错误率较高的通讯中,用户可以分摊比较高的比的率来进行FEC编码。即使在2.0kbps/sec的时候,TC2000仍能保持自然的声音质量和语音可懂度。
TC2000最基本的组成部分就是一个编码器和一个解码器,两者相互独立。编码器接收
8KHZ采样的语音数据流(16bit线性、8bit A律、8bit u律)并以一定的速率输出信道数据。相反,解码器接收信道数据并合成语音数据流。编码器和解码器接口的时序是完全异步的。
TC2000采用
A/D-D/A芯片作为语音信号的接口。输入输出的语音数据流的格式必须是相同的(16bit线性的、8bit A律、8bit u律),信道接口采用8位或16位的微控制器。 芯片可选择的功能包括回声抵消、VAD(语音激活检测)、多种电源模式、数据/前向纠错速率的选择等,这些功能由外围管脚或输入到解码器的命令帧来决定。送往解码器用于控制的数据和语音数据是不同的。
功能特点
Ø
优质的语音质量
Ø
低成本
Ø
无需外部存储器件
Ø
可变的数据速率- 2.0 kbps to 9.6 kbps
Ø
可变的FEC速率- 50 bps to 7.2 kbp
Ø
低功耗(
65mW@3.3V,0.11mW深度休眠)
Ø 高质量的低数据速率语音编码
Ø 全双工
Ø 支持数据速率为
2.0 kbps到960 kbps的增量在50bps
Ø 用户可选择前向纠错率
Ø 16级软件判断译码
Ø 语音活动检测(
VAD)/舒适噪音插入
Ø 16ms回声消除
Ø DTMF信号的检测和生成
应用
Ø 卫星通信
Ø 数字移动无线电
Ø 安全通信
Ø 蜂窝电话和
PCS
Ø 语音复用
Ø 语音信箱
Ø 多媒体应用
管脚信息
图
1 管脚信息
管脚功能
表
1 管脚描述
引脚号码
|
引脚名称
|
引脚方向
|
功能
|
49
|
CHANN_SEL1
|
Input
|
主机接口选择位使用这些bits选择通道接口类型(帧、非帧、主动、被动)
|
47
|
CHANN_SEL0
|
Input
|
同
CHANN_SEL1
一同选择主机接口
|
57
|
CODEC_SEL1
|
Input
|
A/D-D/A
芯片配置引脚
|
56
|
CODEC_SEL0
|
Input
| |
46
|
RATE_SEL4
|
Input
|
编码速率选择Pins :使用这些引脚来选择声音的编码速率和FEC速率
|
45
|
RATE_SEL3
|
Input
| |
44
|
RATE_SEL2
|
Input
| |
43
|
RATE_SEL1
|
Input
| |
42
|
RATE_SEL0
|
Input
| |
引脚号码
|
引脚名称
|
引脚方向
|
功能
|
58
|
VAD_EN
|
Input
|
语音激活检测使能引脚。高电平有效
|
50
|
ECHOCAN_EN
|
Input
|
回音消除使能引脚。高电平有效
|
55
|
SLEEP_EN
|
Input
|
标准睡眠使能引脚。高电平有效
|
54
|
SLIP_EN
|
Input
|
滑移使能引脚。高电平有效
|
40
|
X2/CLKIN
|
Input
|
时钟输入 16.384 MHz 输入
|
39
|
X1
|
Input
|
输出为晶体内部振荡器。如果不使用内部振荡器这个引脚应悬空
|
41
|
RESETN
|
Input
|
TC2000
复位引脚。低电平有效
|
12
|
ERP
|
Output
|
编码完成标志:复位后,这个信号将有一个从高到低变化来指示第一个数据包已准备就绪。下一个数据包准备好约需要20 ms时间。见注1
|
51
|
SOFT_EN
|
Input
|
软译码判断启用标志。启用4位软译码识别错误的编码
|
52
|
BAUD_SEL0
|
Input
|
非帧串口输入格式选择
|
53
|
BAUD_SEL1
|
Input
| |
23
|
CHAN_RX_DATA
|
Input
|
TC2000
编码数据输入
|
31
|
CHAN_TX_DATA
|
Output
|
TC2000
编码数据输出
|
19
|
CHAN_RX_CLK
|
Input
|
编码数据接收时钟
|
25
|
CHAN_TX_CLK
|
Input
|
编码数据发送时钟
|
28
|
CHAN_TX_STRB
|
I/O
|
数据发送帧同步时钟
|
21
|
CHAN_RX_STRB
|
Input
|
数据接收帧同步时钟
|
29
|
CODEC_RX_STRB
|
Input
|
A / D
数据同步帧脉冲。应连接到CODEC_TX_STRB
|
27
|
CODEC_TX_STRB
|
Input
|
D / A
数据同步帧脉冲。应连接到CODEC_RX_STRB
|
22
|
CODEC_RX_DATA
|
Input
|
A/D
转换的PCM信号发送到TC2000
|
30
|
CODEC_TX_DATA
|
Input
|
TC2000
发送的PCM信号到D/A
|
18
|
CODEC_RX_CLK
|
Input
|
A / D
转换串行时钟。应连接到CODEC_TX_CLK
|
24
|
CODEC_TX_CLK
|
Output
|
D / A
转换串行时钟。应连接到CODEC_RX_CLK
|
33
|
CLOCK_MODE
|
Input
|
如果高使用晶体时钟源振荡器。如果低使用外部振荡器
|
8
、26、29、38、59、61
|
VDD
|
Power
|
电源输入(3.3V)
|
1
、7、17、32、37、60
|
GND
|
Power
|
地输入
|
2
、3、5、6、9、10、11、12、13、14、15、16、34、35、36、48、62、63、64
|
No Connection
|
―
|
悬空
|
初始数据包。20 msec后,下一个数据应该准备好。对于包第一个数据包及其后的所有数据包的读取使用以下步骤:
1) 等待略小于
20毫秒。
2) 判断
CHAN_TX_STB和读取CHAN_TX_DATA上的数据。
3) 如果读取到的数据不是
0x13EC,抛弃它,重复步骤2。
4) 如果读取到的数据是
0x13EC,读去剩下的23个字节(数据包剩下的)。
EPR的信号不能被用来当作为一个中断信号,
ERP信号只在第一个从高电平到低电平的过程有效,在ERP从高到低信号后每隔20ms一个新的数据包就会准备好。每个数据包应该20ms读取一次。如果因为延迟错过了一个数据包,建议将芯片复位。
晶体 /振荡器的使用
TC2000声码器芯片有一个
16.384 MHz的输入时钟频率。该时钟输入可以有两个选择,有CLOCK_MODE引脚决定。
如果CLOCK_MODE引脚为低,则TTL/CMOS时钟源作为时钟从X2 / CLKIN脚输入,此时X1应悬空。
当使用晶体振荡器时应将
CLOCK_MODE接高电平。要使用晶体振荡器。应将晶体振荡器的引脚连接到芯片的X2/CLKIN和X1以及一个外部对地电容,推寻电容大小为10pf。
时钟和复位时序
要复位
TC2000芯片,复位信号必须保持低电平至少为50微秒。从复位中恢复时间大约为95ms。换而言之,在复位信号恢复后95ms芯片开始处理PCM信号。在252个PCM信号后第一个数据包将会被准备好。
相关的芯片延迟
由于编码
/解码算法引起的相关的延迟,如下所示:
编码延迟
算法延迟
= 32毫秒
编码器处理延迟
= 11.5毫秒
解码延迟
算法延迟
= 10毫秒
解码器的处理延迟
= 7.5毫秒
总延时= 32毫秒
+11.5毫秒+ 1毫秒* +10毫秒+7.5毫秒= 62毫秒
帧处理延迟= 11.5毫秒(编码器)
+ 1毫秒* + 7.5毫秒= 20毫秒
* 1ms来自解码和编码之间的空闲时间。
串行配置选择
CHAN_SEL [1-0]引脚的电平状态决定了芯片内部信道接口的串行口的工作方式。详见表
2
表
2信道接口选择
端口类型
|
选择脚
| |
CAN_SEL1
|
CHAN_SEL0
| |
主动帧
|
0
|
0
|
主动非帧
|
0
|
1
|
被动帧
|
1
|
0
|
被动非帧
|
1
|
1
|
所有的数据都通过一个串行口进行传输,在每个读写选通信号后分别会有
16字节数据被写入和写出。串行模式可以分为帧和非帧两种,串行模式可以分为帧和非帧两种。在非帧模式下。在每位数据上分别会有1到4个位为语音数据位。
表
3非帧格式语音数据位选择端
字中语音数据位个数
|
选择脚
| |
BAUD_SEL1
|
BAUD_SEL0
| |
1
|
0
|
0
|
2
|
0
|
1
|
3
|
1
|
0
|
4
|
1
|
1
|
信道接口
信道接口是个通用术语,用于表示压缩的数据从编码器出来通过一个接口送到解码器,该接口就是信道接口。信道接口也用于编码器和解码器输出状态信息,比如是否检测到双音多频(
DTMF) ,或者解码器是否检测到合成后的静音帧。其实信道接口通常在编解码器两端执行更为复杂的控制操作(比如在启动时)。这些控制功能包括语音数据和前向纠错速率的选择以及 A/D-D/A芯片的配置。 需要注意的是,不是所有的来自TC2000的数据都要通过信道传送的。比如状态位通常都只在本端起作用。在大多数的声音传输系统中,实际编码数据位从信道的数据帧中取出,与系统信息一起在传输通道中传送,在接收端,编码数据位又被取出,由解码器合成语音。
信道接口使芯片易于集成到系统设计中。
该接口单元是一个串行端口。串行端口可以运行在主动或被动模式。在被动模式下,所有的通道接口控制信号输入到芯片
TC2000,在主动模式下,只有TX_DATA_STRB是输出,所有其他信号的输入。
常规操作时,每
20ms编码器输出一帧编码过的数据,解码器需接收到这样的数据。编码器和解码器的数据需要格式化,格式化的主要目的就是为编码数据流提供对齐信息。数据的格式包括帧格式和非帧格式。串口模式既可工作于帧格式也可工作于非帧格式。
串口主动和被动模式的时序
图
2 串口时序
表4 时序通信参数描述
参数
|
描述
|
3.3V
|
单位
| |
MIN
|
MAX
| |||
t
h(FSR)
|
FSR在CLKR下降沿后保持时间
|
6
|
|
ns
|
t
h(DR)
|
DR在CLKR下降沿后保持时间
|
6
|
|
ns
|
t
d(DX)
|
CLKX上升沿到DX数据有效
|
|
25
|
ns
|
t
c(SCK)
|
串行时钟周期时间
|
6H
|
|
ns
|
t
f(SCK)
|
串行时钟下降时间
|
|
6
|
ns
|
参数
|
描述
|
3.3V
|
单位
| |
MIN
|
MAX
| |||
t
r(SCK)
|
串行时钟上升时间
|
|
6
|
ns
|
t
W(SCK)
|
串行时钟高/低电平持续时间
|
3H
|
|
ns
|
t
su(FSR)
|
CLKR下降沿之前FSR保持时间
|
6
|
|
ns
|
t
su(DR)
|
CLKR下降沿之前DR保持时间
|
6
|
|
ns
|
t
d(FSX)
|
CLKX到FSX的延迟时间
|
|
15
|
ns
|
t
d(DX)
|
CLKX到DX(主动模式)的延迟时间
|
|
15
|
ns
|
t
h(FSX)
|
FSR在CLKX下降沿后保持时间
|
6
|
|
ns
|
t
h(FSX)H
|
FSR在CLKX上升沿后保持时间
|
|
2H-5
|
ns
|
t
dis(DX)
|
CLKX到DX之前的无效时间
|
|
20
|
ns
|
t
h(DX)
|
CLKX上升沿到DX数据有效
|
-5H
|
|
ns
|
注:
H=7.629 ns,但串行时钟请不要快于2.048 MHz.因此Tc(SCK)至少应为488.3ns。
语音速率和前向纠错(FEC)速率的选择
总的编码数据由两部分组成:语音数据和前向纠错数据。前向纠错数据加到语音数据中使解码器能够纠正一定量的错误而使数据帧不至于报废。如果信道传输时可能存在较多的错误,那么就应当增加前向纠错数据的位数。当然声音要达到高质量的话就必须有更多的语音数据位。
信道数据帧格式
帧格式是由 24个 16位字
共48个字节或384位
组成的数据格式。 每 20ms编码器输出 24个字, 同样解码器将接收这 24个字。输入输出的帧格式将在以下内容给予详细的介绍。头 12个字由 header,ID,status,control information这 4个部分组成。剩下的12个字由编码数据位组成。这 12个字(192位)当且仅当 TC2000工作在 9600bps时才全部代表声音数据,否则,未用到的数据位将由 0 填充(声音数据从最高位开始填充)。必须注意的是,即使在 TC2000不工作于 9600bps时,全部的 384位也都要被从编码器读出并写入到解码器。
表
5帧输入格式
20ms
数据
|
24 sixteen-bit words = 48 bytes = 384 bits
|
(12)16
位字的开头
(192位)
|
Word#
|
描述
| ||
0
|
0x13ec
| |||||
1
|
电源控制字(8bit)
|
控制字1(8bit)
| ||||
2
|
Rate info 0
|
见表9
| ||||
3
|
Rate info 1
| |||||
4
|
Rate info 2
| |||||
5
|
Rate info 3
| |||||
6
|
Rate info 4
| |||||
7
|
Unused in Input
| |||||
8
|
Unused in Input
| |||||
9
|
Unused in Input
| |||||
10
|
DTMF Control
| |||||
11
|
控制字2
| |||||
(12) 16 bit
位语音数据
(192
位)
|
12
|
信道数据
| ||||
13
|
信道数据
| |||||
14
|
信道数据
| |||||
15
|
信道数据
| |||||
16
|
信道数据
| |||||
17
|
信道数据
| |||||
18
|
信道数据
| |||||
19
|
信道数据
| |||||
20
|
信道数据
| |||||
21
|
信道数据
| |||||
22
|
信道数据
| |||||
23
|
信道数据
|
帧输入 :字0:Header
解码器用 Header信息来标识一帧的开始。这个16位字必须是 0X13EC。
帧输入 :字1:电源控制
ID
芯片正常工作时
8位电源控制ID字设置为0x00。设置此值为0x55,芯片将会进入掉电模式。这将使TC2000进入低功耗模式。要退出低功耗模式,设备必须通过硬件复位。
表
6帧输入: 电源控制ID数值说明
ID
|
类型
|
说明
|
0x00
|
语音编码
|
这个数值说明芯片处在正常工作中
|
0x55
|
掉电模式
|
当这个模式被激活,
TC2000将进入的低功耗模式,在这个模式下将没有语音数据包被处理。
|
帧输入 :字
1:控制字1
这
8位来指示各种功能.
表
7控制字1格式
控制字
1
| |||||||
7:MSB
|
6
|
5
|
4
|
3
|
2
|
1
|
0:LSB
|
丢失帧指示
|
Unused
|
Unused
|
Unused
|
Unused
|
Unused
|
CNI
|
Unused
|
丢失帧指示
(Lost Frame Indicator):此位设置为1将会使TC2000使用上一帧的数据进行解码。这是一种有效的方法来掩饰短期内数据的丢失或损坏。
舒适噪声插入(CNI):此为设置为1将会使解码器有舒适的噪音输出,此位的设置可以使系统可以连续的传输。
帧输入 :字2-6::
编码速率的选择
Rate Info 0
、 Rate Info 1、Rate Info 2、Rate Info 3、Rate Info 4。
TC2000
的初始速率是通过硬件引脚
RATE_SEL[4-0]
来进行设置的(表18)。芯片复位后,编码器和解码器的编码速率都可以通过发送数据包来进行修改。
TC2000
使用五个字节来设置编码速率和FEC速率,表8列出各种编码速率和FEC速率的预定值。
表8 TC2000编码速率选择
Rate Info 0
|
Rate Info 1
|
Rate Info 2
|
Rate Info 3
|
Rate Info 4
|
语音速率(bps)
|
FEC
速率(bps)
|
总速率(bps)
|
0x9030
|
0x0000
|
0x0000
|
0x0000
|
0x4330
|
2400
|
0
|
2400
|
0x902f
|
0x0000
|
0x0000
|
0x0000
|
0x6930
|
2350
|
50
| |
0x9348
|
0x0000
|
0x0000
|
0x0000
|
0x6f48
|
3600
|
0
|
3600
|
0x9243
|
0x0080
|
0x0000
|
0x0000
|
0x5348
|
3350
|
250
| |
0xab50
|
0x0000
|
0x0000
|
0x0000
|
0x3950
|
4000
|
0
|
4000
|
0x934b
|
0x0080
|
0x0000
|
0x0000
|
0x3950
|
3750
|
250
| |
0xab60
|
0x0000
|
0x0000
|
0x0000
|
0x7960
|
4800
|
0
|
4800
|
0xab5b
|
0x0080
|
0x0000
|
0x0000
|
0x6860
|
4550
|
250
| |
0x9348
|
0x2030
|
0x0000
|
0x0000
|
0x7060
|
3600
|
1200
| |
0x923e
|
0x2800
|
0x0000
|
0x0000
|
0x7460
|
3100
|
1700
| |
0xab53
|
0x2c00
|
0x0000
|
0x0000
|
0x5680
|
4150
|
2250
|
6400
|
0xab58
|
0x3000
|
0x0000
|
0x0000
|
0x4490
|
4400
|
2800
|
7200
|
0xbf9b
|
0x0080
|
0x0000
|
0x0000
|
0x49a0
|
7750
|
250
|
8000
|
0xab5d
|
0x3400
|
0x0000
|
0x0000
|
0x31a0
|
4650
|
3350
| |
0xbfc0
|
0x0000
|
0x0000
|
0x0000
|
0x72c0
|
9600
|
0
|
9600
|
0xab16
|
0xe400
|
0x0000
|
0x0000
|
0x67c0
|
4850
|
4750
| |
0x0028
|
0x0000
|
0x0000
|
0x0000
|
0x6248
|
2000
|
0
|
2000
|
0x5048
|
0x0000
|
0x0000
|
0x0000
|
0x3948
|
3600
|
0
|
3600
|
0x1030
|
0x0001
|
0x0000
|
0x4230
|
0x0048
|
2400
|
1200*
| |
0x1030
|
0x4000
|
0x0000
|
0x0000
|
0x0048
|
2400
|
1200**
| |
0x5250
|
0x0000
|
0x0000
|
0x0000
|
0x4150
|
4000
|
0
|
4000
|
0x1030
|
0x0001
|
0x0000
|
0x341a
|
0x6750
|
2400
|
1600
| |
0x5360
|
0x0000
|
0x0000
|
0x0000
|
0x6c60
|
4800
|
0
|
4800
|
0x5250
|
0x2010
|
0x0000
|
0x0000
|
0x7460
|
4000
|
800
| |
0x5048
|
0x0001
|
0x0000
|
0x2412
|
0x6860
|
3600
|
1200
| |
0x1030
|
0x0005
|
0x180c
|
0x3018
|
0x7360
|
2400
|
2400
| |
Rate Info 0
|
Rate Info 1
|
Rate Info 2
|
Rate Info 3
|
Rate Info 4
|
语音速率(bps)
|
FEC
速率(bps)
|
总速率(bps)
|
0x6b80
|
0x0000
|
0x0000
|
0x0000
|
0x6c80
|
6400
|
0
|
6400
|
0x5250
|
0x0001
|
0x0000
|
0x542a
|
0x5280
|
4000
|
2400
| |
0x5258
|
0x0009
|
0x1e0c
|
0x4127
|
0x7390
|
4400
|
2800
|
7200
|
0x7fa0
|
0x0000
|
0x0000
|
0x0000
|
0x52a0
|
8000
|
0
|
8000
|
0x5250
|
0x0005
|
0x2010
|
0x6834
|
0x72a0
|
4000
|
4000
| |
0x7fc0
|
0x0000
|
0x0000
|
0x0000
|
0x69c0
|
9600
|
0
|
9600
|
0x5048
|
0x000e
|
0x4010
|
0x6a2e
|
0x65c0
|
3600
|
6000
| |
0x1030
|
0x000e
|
0x681a
|
0x5116
|
0x76c0
|
2400
|
7200
|
* FEC是一种卷积码
** FEC是一个代码块
** FEC是一个代码块
帧输入 :字7:未使用
应设置为0x0000
帧输入 :字8:未使用
应设置为0x0000
帧输入 :字9:未使用
应设置为0x0000
帧输入 :字10:DTMF控制
这个字节用来设置DTMF信号。值和音调对应关系详见表9
表9 DTMF控制字格式
DTMF
控制字-16bit
| |||||||||||||||
15
:MSB
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0:
LSB
|
DTMF
幅度
|
DTMF
信号检测/产生
|
DTMF Code
|
DTMF
信号
|
频率1(Hz)
|
频率2(Hz)
|
0x80
|
1
|
1209
|
697
|
0x84
|
2
|
1336
|
697
|
0x88
|
3
|
1477
|
697
|
0x81
|
4
|
1209
|
770
|
0x85
|
5
|
1336
|
770
|
0x89
|
6
|
1477
|
770
|
0x82
|
7
|
1209
|
852
|
0x86
|
8
|
1336
|
852
|
0x8a
|
9
|
1477
|
852
|
0x87
|
0
|
1209
|
941
|
0x83
|
*
|
1336
|
941
|
0x8b
|
#
|
1477
|
941
|
0x8c
|
A
|
1633
|
697
|
0x8d
|
B
|
1633
|
770
|
0x8e
|
C
|
1633
|
852
|
0x8f
|
D
|
1633
|
941
|
0x90
|
拨号音
|
440
|
350
|
0x91
|
铃声
|
480
|
440
|
0x92
|
忙音
|
620
|
480
|
0xff
|
无
|
N/A
|
N/A
|
将
DTMF Code设置为0xff将不会有DTMF信号输出。拨号,忙音,等均是标准的北美信号。
的 DTMF幅度从3到-60 dBm0。这个值是一个字节(例如:为0x03= 3,为0x00=0,0xC4= -60)。
的 DTMF幅度从3到-60 dBm0。这个值是一个字节(例如:为0x03= 3,为0x00=0,0xC4= -60)。
帧输入 :字
11:控制字2
表
10控制字2
控制字2-16bit
| |||||||||||||||
15
:MSB
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0:
LSB
|
编码器输出音量控制
|
Unused
0
|
Unused
0
|
VAD
|
Unused
0
|
SL
|
EC
|
RIS
|
编码器输出音量控制(Decoder output volume control)
默认值为
0x80h
速率信息选择(RIS)
表11编码速率信息选择
数值
|
控制区域
|
0x0
|
编码和解码
|
0x1
|
编码
|
0x2
|
解码
|
0x3
|
无
|
回音消除(EC)
该位置1在上一帧数据的基础上使能回音消除功能,开启回音消除功能必须在每个数据包内该位都置1。
睡眠(SL)
设置该位为
1,TC2000将上一帧数据的基础上进入休眠模式。睡眠是一种低功耗模式,不能和掉电模式混淆。此位设置为0,退出休眠模式。
语音激活检测(VAD)
VAD 位设置为1。启用语音激活检测,设置的VAD位为0禁用语音激活检测。
VAD 位设置为1。启用语音激活检测,设置的VAD位为0禁用语音激活检测。
帧输入 :字12-23:信道数据
这是字段包含实际的的的编码位。这一区域数据输入开始的第一个字为
MSB,最后字节为LSB位输出。如果选定的数据传输率比9600小,那么在每个帧中未使用的位用零填充后面的字。每帧数据包必须始终由24个字。
数据输出
表12帧数据输出格式
20ms
数据
|
24 sixteen-bit words = 48 bytes = 384 bits
|
(12)16
位字的开头
(192位)
|
Word#
|
描述
| |
0
|
0x13ec
| ||||
1
|
电源控制字(8bit)
|
控制字1(8bit)
| |||
2
|
Rate info 0
| ||||
3
|
Rate info 1
| ||||
4
|
Rate info 2
| ||||
5
|
Rate info 3
| ||||
6
|
Rate info 4
| ||||
7
|
误码率(BER)
| ||||
8
|
软译码距离
| ||||
9
|
当前帧错误位
| ||||
10
|
DTMF Control
| ||||
11
|
控制字2
| ||||
(12) 16 bit
位语音数据
(192
位)
|
12
|
信道数据
| |||
13
|
信道数据
| ||||
14
|
信道数据
| ||||
15
|
信道数据
| ||||
16
|
信道数据
| ||||
17
|
信道数据
| ||||
18
|
信道数据
| ||||
19
|
信道数据
| ||||
20
|
信道数据
| ||||
21
|
信道数据
| ||||
22
|
信道数据
| ||||
23
|
信道数据
|
帧输出 :字0:Header
每隔20ms编码器将输出一帧数据。这个数据帧头16位字必须是 0X13EC。
帧输出 :字1:电源控制
ID
在输出时该位一直为
0x00。
帧输出 :字1:控制字
1
这
8位来指示各种功能.
表13控制字1格式
| |||||||
7
:MSB
|
6
|
5
|
4
|
3
|
2
|
1
|
0:MSB
|
Unused
|
Unused
|
解码帧
重复
|
解码器
静音
|
Unused
|
Unused
|
DTMF
检测
|
编码器
静音
|
解码帧重复:
当解码帧重复标志设置为1,解码器最后一帧解码是一前一帧重复。
解码器静音检测:
当解码器静音检测标志设置为
1时,说明解码器最后一帧解码是一个舒适噪声帧。
编码器DTMF检测:
编码器的
DTMF检测标志将被设置为1时,说面编码器检测到的DTMF信号。
编码器静音检测:
没有语音信号输入时编码静音检测标志将被设置为
1时。
帧输出 :字2-6::
编码速率的选择
Rate Info 0, Rate Info 1, Rate Info 2, Rate Info 3, Rate Info 4
这些字节包含
TC2000的编码速录具体详见表8。
帧输出 :字7::误码率(BER)
此状态字段用于指示解码器位错误信息。误码率的计算是通过下面的计算公式通过这
16位状态字来计算的。
% BER = (Word 7) / (32768) x 100
这个状态字和控制字
2里面的RIS位配合使用。只有当RIS位不是0x03时。此位数据才有效。只有TC2000使用FEC时该位才能被计算出来。
帧输出 :字8:软译码距离
此状态字段用于配合硬件引脚
SOFT_EN。此字段是用来指示的软译码距离最新的的解码帧。
这个状态字和控制字
2里面的RIS位配合使用。只有当RIS位不是0x03时。此位数据才有效。只有TC2000使用软译码时该位才被使用。
帧输出 :字9:检测到位错误
此状态字用来指示位置最近的解码帧的为错误数量。
这个状态字和控制字
2里面的RIS位配合使用。只有当RIS位不是0x03时。此位数据才有效。只有TC2000使用FEC时该位才能被计算出来。
帧输出:字10:DTMF控制字
该 16bit字只在检测到双音多频音时使用到,如果双音多频检测标志置 1,那么该双音多频音的代码和度将在该字段中输出,输出格式对应表 9。
帧输出 :字11:控制字2
表
14控制字2
控制字2-16bit
| |||||||||||||||
15
:MSB
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0:
LSB
|
解码器输出音量控制
|
Unused
0
|
Unused
0
|
VAD
|
Unused
0
|
SL
|
EC
|
RIS
|
编码速率设置(RIS)
该控制字用来指示字
2-6所指示的编码速率用来控制芯片的那一部分。
表
15编码速率信息选择
数值
|
控制区域
|
0x0
|
编码和解码
|
0x1
|
编码
|
0x2
|
解码
|
0x3
|
无
|
回音消除(EC):
该位置
1表示回音消除功能已启用。
睡眠(SL)
:
该位置
1表示芯片已进入睡眠模式。
解码器输出音量控制:用来指示当前的解码器的音量。
帧输入 :字12-23:信道数据
该字段包含了实际编码数据位。语音数据的最高位从第一个字开始,按此顺序往后推,最低位置于最后一个字。如果波特率小于
9600bps,那么未被用到的位都用 0填充,并且都在该字段的最后。要注意的是虽然这些位未被用到但也必须占用时间输出。每帧数据包必须始终由24个字。
非帧串口格式
在要求
TC2000 与信道硬件之间互连逻辑最少化时,非帧格式对信道数据是非常有用的。当要用更少的硬件资源来代替微控制器时,应该考虑选择使用非帧格式。这种格式的另外一个特点是帧信息嵌入到声音数据中(声音数据包含码流的位置信息)。使用这种格式,设计者只需要传输编码数据。每帧中有 1 bit的帧信息位嵌在声音数据中。这样每秒就有 50bit 的数不能用来代表声音数据。比如非帧格式下系统工作在 2450bps(无 FEC)时,其效果就跟帧格式下系统工作在 2400bps时一样。
设计者也要考虑到解码器在输出同步的语音之前要花差不多
15 帧(300ms)的时间来同步输入的数据流。如果系统要求在静音的过程中关闭传输,并在有声音时返回的话,那么这种格式下所存在的 300ms 的延时对系统来讲是不能容忍的。这时候就要使用帧格式来满足这些高要求的功能。
非帧格式只存在于串口被动模式下,输入输出都是
16bit的字。每字 16bit的帧,只有一小部分用来传输编码过的数据。使用者选择每字传输 1,2,3,4bits的声音数据(见表3)。
切记:声音编码率必须能被每字中声音数据的位数整除。
非帧串口输出格式下,每字输出
1到 4bit的声音数据。当每字包含的声音数据位多于 1个时,最高位在传输过程中最先被考虑。非帧模式下,只有编码过的声音数据位才被输出,多余的信息(帧格式下可以)都不可以。每 20ms一帧的声音数据需要传输的字数可以通过以下等式计算:(波特率/50)/(每字的声音数据位数)=需要传数的字数。串行时钟速率的计算方法是1/ [20 msec /(32 x 16)] = 25.6 kHz.。如果选择被动成帧模式,将计算数据选通速率1/[20msec / 32] = 1.6 kHz。
非帧串口输入格式下,每字输入
1到 4bit的声音数据。当每字包含的声音数据位多于 1个时,最高位在传输过程中最先被考虑。帧格式需要输入的 Header 在非帧格式被舍去。每 20ms 一帧的声音数据需要传输的字数可以通过以下等式计算:(波特率/50)/(每字的声音数据位数)=需要传数的字数。
A/D-D/A 接口
模拟语音信号与 TC2000芯片之间要通过 A/D-D/A芯片来连接。A/D-D/A芯片选择要慎重,最好要选 16位线性的器件。另外也要考虑这些器件的信噪比和滤波特性。通常来讲,频率响应(20-2400HZ)越平坦,那么整个系统的声音效果就会越好。
TC2000
与 A/D或 D/A接口的语音采样率都是 8KHZ,这 8KHZ的语音数据通过串口来输入输出。
为了简化 A/D-D/A芯片的配置,一组预设的配置值可以通过管脚CODEC_SEL [1-0](见表16)来配置。这些预设的配置值,指明了接口的方向以及可编程器件的程序字的顺序。
为了简化配置 A/D-D/A接口的过程,一些预设的配置值对使用者是现成的。通过 CODEC_SEL [1-0]来选择使用这些预设的值。表16中,2 位二进制的值对应于管脚CODEC_SEL [1-0]电平。0 代表 GND,1 代表 VCC。使用这种配置不需要额外的控制信息
表
16 A / D-D /A硬件配置
A/D-D/A
类型
|
CODEC_SEL[1-0]
pins
|
通用16位线性8khz
|
00b
|
AD73311
32kHz
|
01b
|
8KHz u
率
|
10b
|
8KHz A
率
|
11b
|
5.3 主动模式下 A/D-D/A 的时序
图3 A/D-D/A 的时序
表17 时序通信参数描述
参数
|
描述
|
3.3V
|
单位
| |
MIN
|
MAX
| |||
t
h(FSR)
|
FSR在CLKR下降沿后保持时间
|
6
|
|
ns
|
t
h(DR)
|
DR在CLKR下降沿后保持时间
|
6
|
|
ns
|
t
d(DX)
|
CLKX上升沿到DX数据有效
|
|
25
|
ns
|
t
c(SCK)
|
串行时钟周期时间
|
6H
|
|
ns
|
t
f(SCK)
|
串行时钟下降时间
|
|
6
|
ns
|
t
r(SCK)
|
串行时钟上升时间
|
|
6
|
ns
|
t
W(SCK)
|
串行时钟高/低电平持续时间
|
3H
|
|
ns
|
t
su(FSR)
|
CLKR下降沿之前FSR保持时间
|
6
|
|
ns
|
t
su(DR)
|
CLKR下降沿之前DR保持时间
|
6
|
|
ns
|
t
d(FSX)
|
CLKX到FSX的延迟时间
|
|
15
|
ns
|
t
d(DX)
|
CLKX到DX(主动模式)的延迟时间
|
|
15
|
ns
|
t
h(FSX)
|
FSR在CLKX下降沿后保持时间
|
6
|
|
ns
|
t
h(FSX)H
|
FSR在CLKX上升沿后保持时间
|
|
2H-5
|
ns
|
t
dis(DX)
|
CLKX到DX之前的无效时间
|
|
20
|
ns
|
t
h(DX)
|
CLKX上升沿到DX数据有效
|
-5H
|
|
ns
|
注:H=7.629 ns,但串行时钟请不要快于2.048 MHz.因此Tc(SCK)至少应为488.3ns。
硬件配置与软件配置的注意事项
TC2000
的许多功能既能通过硬件方法又能通过软件方法配置。在硬件复位信号 RESETN 有效后的200us的时间内,以下的硬件管脚的信号才作为有效信号输入到芯片内:CHANN_SEL [1-0], RATE_SEL [4-0], CODEC_SEL [1-0], VAD_EN, ECHOCAN_EN。在这 200us 的时间内这些信号的值必须保持稳定。在 200us 的初始化阶段完成之后,要想改变这些硬件配置的功能只能通过重新配置命令帧来实现,通过改变管脚的输入信号是没用的,除非又进行了一次复位。
编码速率的选择
TC2000
中语音编码率和前向纠错编码率的选择可以是独立的。这些码率可以通过命令帧的方法配置,也可以通过硬件管脚 RATE_SEL [4-0]来配置。这五个输入管脚 RATE_SEL [4-0]给出了32种预设的声音/FEC编码速率。语音和 FEC的编码率可以独立地以 50bps的间隔配置。
表18 TC2000编码速率选择
RATE_SEL4
Pin
|
RATE_SEL3
Pin
|
RATE_SEL2
Pin
|
RATE_SEL1
Pin
|
RATE_SEL0
Pin
|
语音速率(bps)
|
FEC
速率(bps)
|
总速率(bps)
|
0
|
0
|
0
|
0
|
0
|
2400
|
0
|
2400
|
0
|
0
|
1
|
0
|
1
|
2350
|
50
| |
0
|
0
|
0
|
0
|
1
|
3600
|
0
|
3600
|
0
|
1
|
0
|
1
|
1
|
3350
|
250
| |
0
|
1
|
1
|
1
|
1
|
4000
|
0
|
4000
|
0
|
1
|
1
|
1
|
0
|
3750
|
250
| |
0
|
0
|
0
|
1
|
1
|
4800
|
0
|
4800
|
0
|
0
|
1
|
1
|
1
|
4550
|
250
| |
0
|
0
|
0
|
1
|
0
|
3600
|
1200
| |
0
|
1
|
0
|
0
|
0
|
3100
|
1700
| |
0
|
1
|
0
|
1
|
0
|
4150
|
2250
|
6400
|
0
|
1
|
0
|
0
|
1
|
4400
|
2800
|
7200
|
0
|
1
|
1
|
0
|
0
|
7750
|
250
|
8000
|
0
|
1
|
1
|
0
|
1
|
4650
|
3350
| |
0
|
0
|
1
|
0
|
0
|
9600
|
0
|
9600
|
0
|
0
|
1
|
1
|
0
|
4850
|
4750
| |
1
|
1
|
1
|
1
|
1
|
2000
|
0
|
2000
|
1
|
0
|
0
|
0
|
0
|
3600
|
0
|
3600
|
1
|
0
|
0
|
0
|
1
|
4000
|
0
|
4000
|
1
|
0
|
1
|
1
|
0
|
2400
|
1600
| |
1
|
0
|
0
|
1
|
0
|
4800
|
0
|
4800
|
1
|
1
|
0
|
0
|
0
|
4000
|
800
| |
1
|
0
|
1
|
1
|
1
|
3600
|
1200
| |
1
|
1
|
0
|
0
|
1
|
2400
|
2400
| |
1
|
0
|
0
|
1
|
0
|
6400
|
0
|
6400
|
1
|
1
|
0
|
1
|
0
|
4000
|
2400
| |
1
|
1
|
0
|
1
|
1
|
4400
|
2800
|
7200
|
1
|
0
|
1
|
0
|
0
|
8000
|
0
|
8000
|
1
|
1
|
1
|
0
|
1
|
4000
|
4000
| |
1
|
0
|
1
|
0
|
1
|
9600
|
0
|
9600
|
1
|
1
|
1
|
0
|
1
|
3600
|
6000
| |
1
|
1
|
1
|
1
|
0
|
2400
|
7200
|
回声抵消
TC2000
提供16ms 的回声抵消能力而且抵消回声的能力近似达到 30db 或者更高的水平,这对由 2 线和 4 线 混合电路引起的本地回声的抵消是很有用的。只有回声中的线性部分才能被消除,因此所设计的电路应该最小化非线性部分。
TC2000声码器芯片采用一种自适应回声消除算法,来消除解码器输出和编码器输入上的回声干扰。
模拟电路的回声返回损失(Echo Return Loss:ERL)必须不小于才能满足较好回声抵消的工作。
回声抵消通过硬件管脚 pin 50:EHOCAN_EN
注:TC2000的回音消除功能只适用于线性的编解码。
语音激活检测(VAD)
当系统要求在平常的对话中对长时间的静音进行转换以达到节省系统带宽和功耗的目的时, TC2000的语音激活算法和舒适噪声插入(CNI)的功能是非常有用的。
VAD
功能使能后编码器将会通过两种方法来指示多周期(长时间)的静音。第一,编码器将输出一帧静音帧。该静音帧包含了背景噪音的相关信息,这些信息使解码器在另一端合成一个舒适噪声的信号。舒适噪声的目的是让听者觉得对话没有被中断,而绝对的静音给人的感觉是对话间的连接已经断开了。第二,帧格式输出中的编码器静音检测标志位被置位。
语音激活检测通过硬件管脚 pin 58:VAD_EN 或者通过命令帧来激活。
如果 VAD 功能被打开来减少经常静音的语音对话的传输的功耗的话,建议每隔 500-1000 毫秒发送一帧静音帧用来确保传送到解码器的背景噪音的信息,这样合成的语音与静音之间就能有个平滑的过渡。
在VAD算法中静音的临界值是
-25 dBm0
。帧数据如果超过这个数值将会被列为语音。如果帧数据低于-25 dBm0。那么该帧数据是是语音还是数据将取决于各自适合的阈值。
解码器合成舒适噪声帧与 VAD 使能之间是相对独立的。如果解码器接收到一带内静音帧(只能由编码器 VAD使能产生)。
双音多频的检测和产生
TC2000
可以检测、传输和合成双音多频音。双音多频的功能总是打开的。编码器检测到双音多频设置位帧格式输出中的双音多频检测标志位,同时振幅信息被置于DTMF控制字中。另外,编码器还能带内传输双音多频数据 (标准的声音数据位),这样双音多频音就能无缝的从编码器传输到解码器用于合成。
当接收到带内双音多频音或者使用音频生成的命令帧,解码器都能合成双音多频音。
常规能耗模式和节能模式
当TC2000 长时间处于不工作状态时有两种低功耗模式来达到节能的目的。可以通过硬件或者软件的方法进入低功耗模式或待机模式。低功耗模式下,A/D-D/A端口都被禁止掉,同时停止任何方向的声音帧的处理。要返回到正常的工作模式,TC2000可以通过一个激活命令帧或者硬件复位(RESETN)来完成。
标准休眠模式
只有标准休眠模式既能通过硬件的方法也能通过软件的方法进入。TC2000进入标准休眠模式可以通过设置 SLEEP_EN(pin 55)为高,也可以通过软件将控制字2中的第三位置1(表
10
)
进入。
如果要在上电或复位后在标准休眠模式下配置 A/D-D/A芯片,那么 SLEEP_EN必须被置为高。
当使用
A律或μ律编解码器时通过软件方法进入休眠模式的话,需要注意的是,如果有数据包发送到解码器,而在睡眠模式下,也会有噪音输出。建议在唤醒芯片之前不要发送数据包到解码器
深度休眠模式
休眠模式中,深度休眠模式的功耗最低。要从该模式返回只能通过硬件管脚 RESETN(pin 41)的复位。要进入该模式也只能通过命令帧的方式。
表
19节电模式总括
睡眠模式
|
进入该状态方式
|
退出该状态方式
|
唤醒时间
|
功耗
| |
3V
| |||||
Crystal
|
CMOS
TTL
| ||||
正常工作
|
N/A
|
N/A
|
N/A
|
Approx. 65mW
| |
标准睡眠模式
|
控制字或者SLEEP_EN pin
|
控制字
|
N/A
|
24 mW
|
36 mW
|
深度休眠模式
|
控制字
|
复位
|
95ms
|
0.11 mW
|
0.11 mW
|
滑移使能
在任何实时通讯系统中,要保持数据流从一端传到另一端的平滑性必须要对时钟偏差进行预测。设置SLIP_EN(pin54)信号可以使TC2000的编码器对编码器信道信号的较小的滑移做出处理。当TC2000处于主动模式时,信道产生传输数据的信号。信道的传输由时钟控制,这时对滑移的控制就没有必要了。
只要 TC2000
编码器信道处于被动模式并且信道的时钟与 A/D-D/A的时钟时异步时, SLIP_EN管脚的信号就应该被置为高。
示例A / D的D / A用法
TC2000同
A / D的D / A芯片连接如下图
图
4 TC2000同A / D的D / A芯片连接
德州仪器PCM3500解码器的接口电路
德州仪器的
PCM3500编解码芯片为TC2000提供简单的的成本的解决方案。该应用笔记提供关于这些组件的可供选择的连接信息。
TC2000同
PCM3500芯片连接如下图,TC2000的CODEC_SEL必须配置成连接通用的16位线性编解码器
(CODEC_SEL1,0 - 00)。
图
5 TC2000同PCM3500连接图
使用
PCM3500编解码器有两个好处。首先是单电源供电设计。PCM3500支持从+2.7 V至+3.6 V单电源设计。第二个优势在于它的简单。外围没有复杂的配置。有关配置信息,请参阅PCM3500数据手册和图6中的参考电路。
模拟电路设计的注意事项
例如假设电路中是一个电话听筒。通常情况下,手机麦克风信号出来的信号是一个非常小的信号(
20mv的峰峰值)。 PCM3500是为峰峰值为2V的信号设计的语音编解码器,参考电路通过模拟输入放大(Gain=22),以使手机麦克风信号在ADC可以处理的范围。
输出部分是采用增益为一的低通滤波器。这样的设计可以允许最大的语音信号可以畅行无阻,
PCM3500应该输出部分过大的信号过滤掉。
电容
C13和C14用来产生一个
低噪声的直流偏置信号。如果电路中存在低噪声的直流偏置信号,那么,这两个电容就不需要了。
为了获得最佳性能。模拟电路中的任何输入输出的调整应参照PCM3500的数据手册
图
6
软译码判断
在现代通信系统中发射器是以符号形式发送信息。解码器需要接收信号且判断哪些内容是需要传播的。换句话说解调器根据接收到的信号决定。例如,在一个二进制系统中,符号可以代表1和0。
由于干扰等诸多因素,信道的衰减可能会使一些信号被误读。可以增减接收到的数据以改善FEC的性能,在解调之前对接收到的数据进行判断,就称为软译码判断。
TC2000采用了一个
4位的软判决译码器。位的定义如下:
数值
(二进制)
|
注释
|
0000
|
最可信的
0
|
0111
|
最不可信的
0
|
1000
|
最不可信的
1
|
1111
|
最可信的
1
|
将
TC2000D的SOFT_EN(pin51)脚配置为高电平可以启动软译码判断,启动软译码判断芯片不会对编码器数据任何改变。编码数据包和普通的数据包没什么区别。
用户必须对接收端的数据进行细致的处理(4bit)来对接收的数据进行更好的处理
TC2000解码器包数据将会被改变,解码器希望解码包数据里的每个语音数据位都有四个软译码(
SD)位组成,解码器将对每个SD数据进行判断来决定接收到的数据是0还是1。