精华内容
下载资源
问答
  • G.7xx的音频编码方式与带宽计算

    千次阅读 2021-02-23 11:28:50
    G.711 G.722是G系列的语音编码中宽带的编码方式G.711  由国际电信联盟(ITU-T)制定的音频编码方式,又称为ITU-T G.711。  它是国际电信联盟ITU-T订定出来的一套语音压缩标准,它代表了对数PCM(logarithmic...

    本文转之“weixin_30527551”作者的【WebRTC】术语

    G.711  G.722

    G.711  G.722是G系列的语音编码中宽带的编码方式。

    G.711

      由国际电信联盟(ITU-T)制定的音频编码方式,又称为ITU-T G.711。

      它是国际电信联盟ITU-T订定出来的一套语音压缩标准,它代表了对数PCM(logarithmic pulse-code modulation)抽样标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。 起压缩率为1:2, 即把16位数据压缩成8位。是主流的波形声音编解码器。

    G.722

      1988年由国际电信联盟(ITU-T)订定音频编码方式,又称为ITU-T G.722,是第一个用于16KHz采样率的宽带语音编码算法。

      G.722是支持比特率为64, 56和48kbps多频率语音编码算法。在G.722中,语音信号的取样率为每秒16000个样本。与3.6kHz的频率语音编码相比较,G.722可以处理频率达7kHz音频信号宽带。G.722 编码器是基于子带自适应差分脉冲编码(SB-ADPCM)原理的。信号被分为两个子带,并且采用 ADPCM 技术对两个子带的样本进行编码。

    区别

      G.722相对于G.711 采样频率由8KHZ扩展为16KHZ,语音质量得以提高。将信号划分为2个子带(高频,低频),每个子带中的信号都采用ADPCM(adaptive differential pulse code modulation)进行编码,ADPCM原理即只采样声音样本中增量变化的那一段。

      在最后比特率的计算中,低频部分被分配到比较多的资源 8Kbps X 6bit, 高频部分被分配到比较少的资源(多为摩擦声,噪音等辅助音)8Kbps X 2bit。两者相加为64Kbps,故G.722相对于G.711比特率都为64kbps,但提高了语音质量。

      在cisco CM7.0以上版本中已支持G.722编码算法,cisco 79以上系列交换机已将G.722编码作为默认首选编码。

     

    G711 G723 G729线路占多少带宽问题

    带宽=包长度×每秒包数

      =包长度×(1/打包周期)

      =(Ethernet头+IP头+UDP头+RTP头+有效载荷)×(1/打包周期)

      =(208bit +160bit+64bit+96bit +有效载荷)×(1/打包周期)

      =(528bit+(打包周期(秒)×每秒的比特数))×(1/打包周期)

      =( 528 / 打包周期 ) + 每秒比特数

    按照上面的计算公式:

      G711:20ms打包,带宽为 ( 528/20 + 64) Kbit/s=90.4 Kbit/s

      G729:20ms打包,带宽为 ( 528/20 + 8 ) Kbit/s= 34.4 Kbit/s

      G723:5.3k,30ms打包,带宽为 ( 528/30 + 5.3 ) Kbit/s=22.9 Kbit/s

      业界一般按照下表提供的IP网带宽系数和以太网带宽系数来设计网络带宽:

    编解码技术

    压缩速率(Kbps)

    打包周期(ms)

    IP网带宽系数

    以太网带宽系数

    G.711 a/u

    64

    20

    1.25

    1.41

    G.729 a/b

    8

    20

    0.38

    0.54

    G.723.1(5.3kbit/s)

    5.3

    30

    0.27

    0.37

    G.723.1(6.3Kbit/s)

    6.3

    30

    0.25

    0.36

    H.263(384Kbit/s)

    ≈384

    10

    6

    6.2

      注:采用某种编码方式时,用64K乘以相应的带宽系数就可以得出其实际占用的带宽。当然如果是中继接口,还需要考虑信令占据一定的带宽,一般按照2.5%来计算。 如果看不懂上面的计算方法,只需记住以下结果:

      G711   实际占用带宽 每线90.4kbit/s   100线并发占用 9Mbps

      G729   实际占用带宽 每线34.4kbit/s   100线并发占用 3.4Mbps

      G723   实际占用带宽 每线22.9kbit/s   100线并发占用 2.2Mbps

     

    展开全文
  • 文件内容为C语言环境的G729B编码实现方式
  • 是著名外企公司sun的源代码,包含 g721 g711 g729 g723 g722 音频编码解码及实例分析c代码
  • 字符编码方式详解

    千次阅读 2013-11-11 16:30:59
    各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)  一直对字符的各种编码方式懵懵懂懂,什么ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰...

    各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)
        一直对字符的各种编码方式懵懵懂懂,什么ANSIUNICODEUTF-8GB2312GBKDBCSUCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们。Let's go!
             
        很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"

        再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"
        开始计算机只在美国用。八位的字节一共可以组合出256(28次方)种不同的状态。
        他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上0x10, 终端就换行,遇上0x07, 终端就向人们嘟嘟叫,例如遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。他们看到这样很好,于是就把这些0x20以下的字节状态称为"控制码"
        他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家 看到这样,都感觉很好,于是大家都把这个方案叫做 ANSI "Ascii"编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。

    ASCII 非打印控制字符表 

     

    十进制  
    字符 十进制字符
    0 16数据链路转意
    1头标开始 17设备控制 1
    2正文开始 18设备控制 2
    3正文结束 19设备控制 3
    4传输结束 20设备控制 4
    5查询 21反确认
    6确认 22同步空闲
    7震铃 23传输块结束
    8backspace 24取消
    9水平制表符 25媒体结束
    10换行/新行 26替换
    11竖直制表符 27转意
    12换页/新页 28文件分隔符
    13回车 29组分隔符
    14移出 30记录分隔符
    15移入 31单元分隔符

    ASCII 打印字符


              

    十进制字符 十进制字符
    32space 80P
    33! 81Q
    34" 82R
    35# 83S
    36$ 84T
    37% 85U
    38& 86V
    39' 87w
    40( 88X
    41) 89Y
    42* 90Z
    43+ 91[
    44, 92/
    45- 93]
    46. 94^
    47/ 95_
    480 96`
    491 97a
    502 98b
    513 99c
    524 100d
    535 101e
    546 102f
    557 103g
    568 104h
    579 105i
    58: 106j
    59; 107k
    60< 108l
    61= 109m
    62> 110n
    63? 111o
    64@ 112p
    65A 113q
    66B 114r
    67C 115s
    68D 116t
    69E 117u
    70F 118v
    71G 119w
    72H 120x
    73I 121y
    74J 122z
    75K 123{
    76L 124|
    77M 125}
    78N 126~
    79O 127DEL


        后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他 们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128255这一页的字符集被称“扩展字符集”。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧!

    扩展的ASCII打印字符表

     

    十进制字符 十进制字符
    128Ç 192
    129ü 193
    130é 194
    131â 195
    132ä 196
    133à 197
    134å 198
    135ç 199
    136ê 200
    137ë 201
    138è 202
    139ï 203
    140î 204
    141ì 205
    142Ä 206
    143Å 207
    144É 208
    145æ 209
    146Æ 210
    147ô 211
    148ö 212Ô
    149ò 213
    150û 214
    151ù 215
    152ÿ 216
    153Ö 217
    154Ü 218
    155¢ 219
    156£ 220
    157¥ 221
    158 222
    159ƒ 223
    160á 224α
    161í 225ß
    162ó 226Γ
    163ú 227π
    164ñ 228Σ
    165Ñ 229σ
    166ª 230µ
    167º 231τ
    168¿ 232Φ
    169 233Θ
    170¬ 234Ω
    171&frac12; 235δ
    172&frac14; 236
    173¡ 237φ
    174« 238ε
    175» 239
    176 240
    177 241±
    178 242
    179 243
    180 244
    181 245
    182 246÷
    183 247
    184 248
    185 249
    186 250·
    187 251
    188 252
    189 253&sup2;
    190 254
    191 255 

        等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉,
        规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA10xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的 字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。
          中国人民看到这样很不错,于是就把这种汉字方案叫做 "GB2312"GB2312 是对 ASCII 的中文扩展。
          但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。
          后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字 符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。
          后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK 扩成了GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。
          中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 "DBCS"Double Byte Charecter Set 双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处 理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了。那时候凡是受过加持,会编程的计算机僧侣 们都要每天念下面这个咒语数百遍:

          "一个汉字算两个英文字符!一个汉字算两个英文字符……"
             
          因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码,连大陆和台湾这样只相隔了150海里,使用 着同一种语言的兄弟地区,也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字,就必须装上一个"汉字系统",专门用来处理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序 就必须加装另一套支持 BIG5  编码的什么"倚天汉字系统"才可以用,装错了字符系统,显示就会乱了套!这怎么办?而且世界民族之林中还有那些一时用不上电脑的穷苦人民,他们的文字又怎 么办?

          真是计算机的巴比伦塔命题啊!
          正在这时,大天使加百列及时出现了——一个叫 ISO(国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母 和符号的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"
          UNICODE 开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ascii里的那些半角字符,UNICODE 包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高 8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。

          这时候,从旧社会里走过来的程序员开始发现一个奇怪的现象:他们的strlen函数靠不住了,一个汉字不再是相当于两个字符了,而是一个!是的,从 UNICODE 开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的"一个字符"!同时,也都是统一的"两个字节",请注意"字符""字节"两个术语的不 同,字节是一个8位的物理存贮单元,而字符则是一个文化相关的符号。在UNICODE 中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。
             
          从前多种字符集存在时,那些做多语言软件的公司遇上过很大麻烦,他们为了在不同的国家销售同一套软件,就不得不在区域化软件时也加持那个双字节字符集咒 语,不仅要处处小心不要搞错,还要把软件中的文字在不同的字符集中转来转去。UNICODE 对于他们来说是一个很好的一揽子解决方案,于是从 Windows NT 开始,MS 趁机把它们的操作系统改了一遍,把所有的核心代码都改成了用 UNICODE 方式工作的版本,从这时开始,WINDOWS 系统终于无需要加装各种本土语言系统,就可以显示全世界上所有文化的字符了。
        但是,UNICODE 在制订时没有考虑与任何一种现有的编码方案保持兼容,这使得 GBK UNICODE 在汉字的内码编排上完全是不一样的,没有一种简单的算术方法可以把文本内容从UNICODE编码和另一种编码进行转换,这种转换必须通过查表来进行。
        如前所述,UNICODE 是用两个字节来表示为一个字符,他总共可以组合出65535不同的字符,这大概已经可以覆盖世界上所有文化的符号。如果还不够也没有关系,ISO已经准备 UCS-4方案,说简单了就是四个字节来表示一个字符,这样我们就可以组合出21亿个不同的字符出来(最高位有其他用途),这大概可以用到银河联邦成立 那一天吧!
        UNICODE 来到时,一起到来的还有计算机网络的兴起,UNICODE 如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多 UTFUCS Transfer Format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE UTF时并不是直接的对应,而是要过一些算法和规则来转换。

        受到过网络编程加持的计算机僧侣们都知道,在网络里传递信息时有一个很重要的问题,就是对于数据高低位的解读方式,一些计算机是采用低位先发送的方法,例 如我们PC机采用的 INTEL 架构,而另一些是采用高位先发送的方式,在网络中交换数据时,为了核对双方对于高低位的认识是否是一致的,采用了一种很简便的方法,就是在文本流的开始时 向对方发送一个标志符——如果之后的文本是高位在位,那就发送"FEFF",反之,则发送"FFFE"。不信你可以用二进制方式打开一个UTF-X格式的 文件,看看开头两个字节是不是这两个字节?
        讲到这里,我们再顺便说说一个很著名的奇怪现象:当你在 windows 的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵,有人说这就是联通之所以拼不过移动的原因。

        其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。
        从网上引来一段从UNICODEUTF8的转换规则:
            Unicode
            UTF-8
            0000 - 007F
            0xxxxxxx
            0080 - 07FF
            110xxxxx 10xxxxxx
            0800 - FFFF
            1110xxxx 10xxxxxx 10xxxxxx
        例如""字的Unicode编码是6C496C490800-FFFF之间,所以要用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 1100 0100 1001,将这个比特流按三字节模板的分段方法分为0110 110001 001001,依次代替模板中的x,得到:1110-0110 10-110001 10-001001,即E6 B1 89,这就是其UTF8的编码。
        而当你新建一个文本文件时,记事本的编码默认是ANSI,如果你在ANSI的编码输入汉字,那么他实际就是GB系列的编码方式,在这种编码下,"联通"的内码是:
                c1 1100 0001
                aa 1010 1010
                cd 1100 1101
                a8 1010 1000
             
        注意到了吗?第一二个字节、第三四个字节的起始部分的都是"110""10",正好与UTF8规则里的两字节模板是一致的,于是再次打开记事本时,记事 本就误认为这是一个UTF8编码的文件,让我们把第一个字节的110和第二个字节的10去掉,我们就得到了"00001 101010",再把各位对齐,补上前导的0,就得到了"0000 0000 0110 1010",不好意思,这是UNICODE006A,也就是小写的字母"j",而之后的两字节用UTF8解码之后是0368,这个字符什么也不是。这就 是只有"联通"两个字的文件没有办法在记事本里正常显示的原因。

        而如果你在"联通"之后多输入几个字,其他的字的编码不见得又恰好是11010开始的字节,这样再次打开时,记事本就不会坚持这是一个utf8编码的文件,而会用ANSI的方式解读之,这时乱码又不出现了。
             
        好了,终于可以回答NICO的问题了,在数据库里,有n前缀的字串类型就是UNICODE类型,这种类型中,固定用两个字节来表示一个字符,无论这个字符是汉字还是英文字母,或是别的什么。

        如果你要测试"abc汉字"这个串的长度,在没有n前缀的数据类型里,这个字串是7个字符的长度,因为一个汉字相当于两个字符。而在有n前缀的数据类型里,同样的测试串长度的函数将会告诉你是5个字符,因为一个汉字就是一个字符。

    展开全文
  • GSM短信编码方式

    千次阅读 2013-04-06 14:01:05
    GSM短信编码方式有三种,Block,Text和PDU模式,Block模式现在已经很少采用,Text模式用来进行ASCII码的短信发送,因为ASCII码是8位字符码,所以主要用来进行单字节信息-拼音或字母的短消息发送,从技术上讲,Text...

    GSM短信编码方式有三种,BlockTextPDU模式Block模式现在已经很少采用Text模式用来进行ASCII码的短信发送,因为ASCII码是8位字符码,所以主要用来进行单字节信息-拼音或字母的短消息发送,从技术上讲,Text模式也可以用来进行中文短信的发送。但是在发送和接收时需要采样软件编码方式进行额外的处理,由于现在的手机内置短信都没有增加从Text模式到中文的转换方式,所以在手机上无法使用该方法进行中文短信收发。PDU模式采用多种编码方式,既可以使用ASCII格式,也可以采用Unicode方式编码,因此,可以用来进行以Unicode为编码方式的中文处理。

    PDU模式是一种比较复杂的编码方式,它将编码信息,收发地址,短消息内容,短消息附加信息统一进行了编码,采用二进制方式进行收发,因此,终端用户在使用AT指令前需要将用户输入的字符串进行转换后才能使用相关AT指令进行处理。

    由于PDU模式下发送和接收短消息解码方式略有不同,因此通过发送来进行讲解

    AT+CMGF=0

    AT+CMGS=<length><CR>

    <PDU><Ctrl-z>

    AT+CMGF=0用来设置发送短信的模式,0PDU模式,也是默认工作模式,系统重启后便是默认该工作模式。

    AT+CMGSGSM发送短信的AT命令,length为发送短信TPDU的长度而不是短消息的长度,PDU则是AT发送的信息,二进制方式,包括目标地址信息,发送地址信息和短信内容。

    PDU内容分为以下几个部分:

    1.             SMSC地址信息

       

        PDU部分为二进制编码方式,采用字节信息方式。首先起始的一个字节,用来存储SMSC地址信息和类型信息总长度,以字节为计算单位。

    第二个字节为地址类型信息。

      PDU模式分析

        该地址表示地址类型,0x91代表国际,此时需要在地址前加国际号86;当为0x81时,表示为国内电话。

     

    接下来为地址的数值具体字节长度根据用户输入的号码来确定,由于采用的是字节对齐的方式,所以如果输入的数字为奇数时需要添加一个标识字符来填充。值得注意的是该编码方式输入数字的相邻位进行了交换,例如,13026565456,由于是奇数,需要填充一个F,编码最终结果是3120565654F6

    2.             TPDU部分

    这一部分是短信的主要信息部分,AT+CMGS=<length>length长度由该部分长度决定。其中括号中标M的表示必须具有的字段,不能省略,标O的表示Option可选项。

    PDU模式分析
    First-Octet与地址信息部分相似,第一个字节为短信基本信息,包括短信是否发送,短信中心是否拒绝同一短信,短信中心是否回复,是否包含信息头,是否包括有效日期等信息,

    PDU模式分析

     

    发送短信时,TP-MTI位必须设置为0x01,表示提交发送短信。

       TP-MR第二个字节为短消息参考信息值。表示当前短消息重复发送的次数。

       TP-DA为目标地址信息,与上述地址信息相同,包括目标地址长度和地址内容,整个部分的最大长度为12个字节。

    目标地址长度,以半字节为单位进行计算。比如13995452345的长度按这个标准计算长度值为11

      接下来是目标地址,编码方式与短信控制中心的地址编码方式相同,长度为目标地址长度中存储的字节表示的数值的一半,当目标地址为奇数时,填充F,编码也是采用半字节高低位交换方式。

      PDU模式分析

       TP-PID为协议标识,长度为一个字节,默认bit7bit60bit51时,由bit0bit4来表示SC按何种方式进行处理短消息,比如0x12表示采用传真方式,0x14表示采用语音处理。当bit50时,bit4bit0位无效,表示采样点对点协议。通常该字节默认值为0,表示使用点对点的GSM协议处理。

    TP-DCS:一个字节长度,表示短消息的编码方式。通常有以下三种

    0x08表示为UCS2编码方式,按照Unicode编码方式,两个字节表示一个字符编码。

    0x04表示为8bit编码方式,按照ASCII编码方式,一个字节表示一个字符。

    0x00表示为7bit编码方式,按照GSM字符编码表进行编码。

    TP-VP:用来表示短信有效时间。由First-obtetTP-VPF来决定,当TP-VPF0x10,表示相对当前的时间,当为0x11,表示为绝对时间,用7byte表示年月日时分秒信息。

    TP-UDL:有效的信息长度,以字节为计算单位。当该位为0时,后面不带任何用户数据。

    TP-UD:用户的有效信息。以TP-DC规定的编码方式进行编码。当TP-VDL0时,该数据段无效。

     

    PDU模式的短消息。

    AT+CMGF=0;

    AT+CMGR=<index>读取存储器中第index条短信。

    +CMGR=<length>  

    <PDU>

    OK

    PDU的内容包括SMSC的地址和TPDU两部分。LengthTPDU的长度。

    1.                        

                    SMSC地址

         该部分内容与发送短信时相同,因此省略该部分解释。

     

    2TPDU

            PDU模式分析

    First-Octet为一个字节长度,包含短信基本信息

    PDU模式分析

     

    其中TP-MTI必须为0x00,表示为接收短信。其他各位标识根据GSM03.049节内容来确定。其中TP-UDHI位不为0的话,表明在TP-UD还包括相应头信息。

    TP-OA:该信息为发送该条短信的设备地址。地址解析方式与发送短信的TPDU中的TP-DA解析方法完全一致。

    TP-PID:表示短信以何种方式进行默认为0x00,表示采用点对点的GSM传送协议。

    TP-DCS:短信内容编码模式,通过读取该位内容,可以确定接收的短信编码方式,从而能够正确的读取并显示短信内容。

    TP-SCTS:为短信中心的时间标记,长度为7个字节,分别代表年月日时分秒时区七个信息。

    PDU模式分析

     

    通过分析这七字节能够得到短消息的接收时间。

    TP-UDL:表示短消息内容的长度,以字节为计算单位。

    TP-UD:读出的短消息内容,根据TP-DCS的编码方式,可以解析出相应的字符。然后提供给终端单元给用户进行显示。

     

    --------------------------------------------------------------------------------------------------

     

    PDU 模式
     
      用PDU 模式发送 WAP PUSH可以使用三种编码: 7-bit 编码、8-bit 编码和UCS2 编码。7-bit 编码用于发送普通的ASCII 字符,8-bit 编码通常用于发送数据消息,UCS2 编码用于发送Unicode 字符。由于要实现中文WAP PUSH的发送,所以选择用UCS2 编码,即中文Unicode 码。
    ⑴ UCS2 编码原理 所谓UCS2 编码,是将单个的字符(1-2 个字节)按ISO/IEC10646 的规定,转变为16 位 的Unicode 宽字符。即将单个的字符转换为由四位的‘0’-‘9’、‘A’-‘F’的数字和字 母组成的字符串。待发送的消息以UCS2 码的形式进行发送。
    ⑵ 通过UCS2 编码我们得到中文Unicode 码,接着就可以进行发送PDU 串的编制了。从表面上看,PDU 串是ASCII 码串,同样由‘0’-‘9’、‘A’-‘F’这些数字和字母组成。它们是8 位字节的十六进制数,或者BCD 码十进制数。PDU 串除了包含所发送的消息本身外,还包含很多其它参数信息,如服务中心号码、目标号码和编码方式等。


      例如

    0051000BA13108086406F600F5A7850B05040B8423F_
    0000303010129060603AE81EA8DCA02056A0045C6080C033231312e_
    3133362e3135332e33302f776170707573682f70757368496e6465782e_
    6a73703f7075736849643d3035303531313134313630353231000103E8A_
    FB7E782B9E587BBE4BBA5E4B88BE993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9000101_

      为一串可以成功发送的WAP PUSH,其中包括了汉字描述和WAP页面地址。具体分析如下

      00 SMSC 地址信息的长度 00表示用手机上设置短信中心号码,PDU 串的“SMSC 址格式”段和“SMSC 地址”段将省去

      51 基本参数(TP-MTI/VFP) 不要求发送回复

      00 消息基准值(TP-MR)

      0B 对方电话的长度

      A1 目标地址格式 A1表示为国内格式

      3108086406F6 目标地址,补‘F’凑成偶数位后奇偶位互换

      00 协议标识(TP-PID) 是普通GSM 类型,点到点方式

      F5 用户信息编码方式 (TP-DCS)

      A7 有效期(TP-VP)

      85 用户信息长度(TP-UDL)

      0B WAP PUSH头部的总长度

      05040B8423F0表示接下来是一个WAP PUSH

      00 表示是Concatenated Short Messages

      03 长度

      03 reference number

      01 表示分成1个短信发送

      01 当前包的序号

      29060603AE81EA8DCA WSP

      02 标记位

      05 -//WAPFORUM//DTD SI 1.0//EN

      6A UTF-8

      00 标记开始

      45 <si>

      C6 <indication

      08 <action=signal-high>

      0C href="http://

      03 字符串开始

    3231312e3133362e3135332e33302f776170707573682f
    70757368496e6465782e6a73703f7075736849643d3035303531313134313630353231 URL

      00 URL 字符串结束

      01 >

      03 内容描述字符串开始

      E8AFB7E782B9E587BBE4BBA5E4B88BE993BEE68EA_
      5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9 内容描述字符串

      00 内容描述字符串结束

      01 </si>

      01 </indication>

      由以上分析可以看出,WAP PUSH可以被当作一种特殊的短信来发送,WAP PUSH包发送的内容实际上跟通过PPG网关发送的XML原理相同,但是经过了压缩。压缩之后的格式称为WBXML,这种格式将一些标记用代码来表示。然而WBXML的缩略标记分为两部分,一部分是所有类型的XML都通用的,另一部分是不同类型的XML有着不同的解释。
    用户接收到此类信息时,在客户端手机支持WAP的情况下,可以直接访问到信息中加载的WAP网站地址,这样服务器也达到了推广业务方便用户使用的目的。由于在UCS2 编码方式下,可发送短消息的最大字符数是140字节,即WAP PUSH中的推送URL与描述文字的总字符数为140,因此描述文字的字数限制与推送的URL长度有关。

    *********************************************************************************************************************************************************************

    发送短消息常用Text和PDU(Protocol   Data   Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A   B   C   D   E   F   G   H   I   J   K   L   M十三项组成。

    A:短信息中心地址长度,2位十六进制数(1字节)。
    B:短信息中心号码类型,2位十六进制数。
    C:短信息中心号码,B+C的长度将由A中的数据决定。
    D:文件头字节,2位十六进制数。
    E:信息类型,2位十六进制数。
    F:被叫号码长度,2位十六进制数。
    G:被叫号码类型,2位十六进制数,取值同B。
    H:被叫号码,长度由F中的数据决定。
    I:协议标识,2位十六进制数。
    J:数据编码方案,2位十六进制数。
    K:有效期,2位十六进制数。
    L:用户数据长度,2位十六进制数。
    M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。

     

    实际应用:

    本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信:  
    接收号码:+8613602433649  
    短信内容:abc你好!  
    短信中心号码:+8613800546500  
    一、短信中心号码处理:用字符串 addr 表示  
    1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F  
    即 addr = "+8613800200500"  
    => addr = "8613800546500F"  
    2、将奇数位和偶数位交换。  
    => addr = "683108506405F0"  
    3、将短信息中心号码前面加上字符91,91是国际化的意思  
    => addr = "91683108200005F0"  
    4、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => "08"  
    => addr = "0891683108200005F0"  
    二、手机号码处理:用字符串 phone  
    1、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F  
    即 phone = "+8613602433649"  
    => phone = "8613602433649F"  
    2、将手机号码奇数位和偶数位交换。  
    => phone = "683106423346F9"  
    三、短信息部分处理:用字符串 msg 表示  
    1、转字符串转换为Unicode代码,例如“abc你好!”的unicode代码为 0061006200634F60597DFF01,  
    2、将 msg 长度除2,保留两位16进制数,即 0061006200634F60597DFF01 = 24 / 2 => "0C",再加上 msg  
    => msg = "0C0061006200634F60597DFF01"  
    四、组合  
    1、手机号码前加上字符串 11000D91(1100:固定,0D:手机号码的长度,不算+号,十六进制表示,91:发送到手机为91,发送到小灵通为81。但是我用81也能往手机上发送成功),  
    即 phone = "11000D91" + phone  
    => 11000D91683106423346F9  
    2、手机号码后加上 0008A7 和刚才的短信息内容,0008A7也写死就可以了,具体含义我也不太清楚!  
    即 phone = phone + "0008A7" + msg  
    即 11000D91683106423346F9 + 0008A7 + 0C0061006200634F60597DFF01  
    => phone = 11000B815160066703F10008A70C0061006200634F60597DFF01  
    3、phone 长度除以2,格式化成2位的十进制数  
    即 11000B815160066703F10008A70C0061006200634F60597DFF01 => 52位 / 2 => 26  
    五、所以要发送的内容为  
    AT+CMGF=0 <回车><换行>  
    OK  
    AT+CMGS=26<回车><换行>  
    > 891683108506405F011000B815160066703F10008A70C0061006200634F60597DFF01 <Ctrl+Z> <回车><换行>(注意:这里的Ctrl+Z的ASCII值是26,用16进制发送时是1A)

     ****************************************************发送和接收举例*********************************************************************

     PDU编码协议简单说明
    例1 发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是
    08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01
    对照规范,具体分析:
    分段 含义 说明
    08 SMSC地址信息的长度 共8个八位字节(包括91)
    91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
    68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
    11 基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式
    00 消息基准值(TP-MR) 0
    0D 目标地址数字个数 共13个十进制数(不包括91和‘F’)
    91 目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
    68 31 96 03 29 30 F0 目标地址(TP-DA) 8613693092030,补‘F’凑成偶数个
    00 协议标识(TP-PID) 是普通GSM类型,点到点方式
    00 用户信息编码方式(TP-DCS) 7-bit编码
    00 有效期(TP-VP) 5分钟
    06 用户信息长度(TP-UDL) 实际长度6个字节
    C8 32 9B FD 0E 01 用户信息(TP-UD) “Hello!”
    例2 接收:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“你好!”。手机接收到的PDU串可以是
    08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21
    对照规范,具体分析:
    分段 含义 说明
    08 地址信息的长度 个八位字节(包括91)
    91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
    68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个
    84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址
    0D 回复地址数字个数 共13个十进制数(不包括91和‘F’)
    91 回复地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
    68 31 96 03 29 30 F0 回复地址(TP-RA) 8613693092030,补‘F’凑成偶数个
    00 协议标识(TP-PID) 是普通GSM类型,点到点方式
    08 用户信息编码方式(TP-DCS) UCS2编码
    30 30 21 80 63 54 80 时间戳(TP-SCTS) 2003-3-12 08:36:45   +8时区
    06 用户信息长度(TP-UDL) 实际长度6个字节
    4F 60 59 7D 00 21 用户信息(TP-UD) “你好!”
    -
    若基本参数的最高位(TP-RP)为0,则没有回复地址的三个段。从Internet上发出的短消息常常是这种情形。
    注意号码和时间的表示方法,不是按正常顺序顺着来的,而且要以‘F’将奇数补成偶数。
    -
    在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
    -
    需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。

    展开全文
  • 音频编码技术G.729与G.711

    万次阅读 2012-08-14 07:35:28
    音频编码技术G.729与G.711 VoIP中G.729与G.711的部分资料 由于用上了VoIP网关设备,在设置界面里关于语音压缩的设置里有5种标准可选,分别是G.711-uLaw、G.711-aLaw、G.723-53k、G.723-63k、G729,G.711和G....

    音频编码技术G.729与G.711

    VoIP中G.729与G.711的部分资料

    由于用上了VoIP网关设备,在设置界面里关于语音压缩的设置里有5种标准可选,分别是G.711-uLaw、G.711-aLaw、G.723-53k、G.723-63k、G729,G.711和G.729是企业VoIP部署中非常流行的两种编解码器。与通过G.729编码的语音流相比,G.711音质表现出色。G.711通常用于不存在带宽问题的LAN环境,带宽需求约为80kbps,其中包括开销带宽。G.729通常用于带宽有限的WAN环境,带宽需求约为30kbps。

    G.711是语音模拟信号的一种非线性量化,细分有二种:G.711 A-law 和 G.711 u-law。不同的国家和地方都会选取一种作为自己的标准。G.711 bitrate 是64kbps。详细的资料可以在ITU 上下到相关的spec,下面主要列出一些性能参数:

    G.711(PCM方式:PCM=脉码调制 :Pulse Code Modulation)

    采样率:8kHz

    信息量:64kbps/channel

    理论延迟:0.125msec

    品质:MOS值4.10

    G.723.1是一个双速率的语音编码器,是ITU-T建议的应用于低速率多媒体服务中语音或其它音频信号的压缩算法;其目标应用系统包括H.323、H.324等多媒体通信系统,目前该算法已成为IP电话系统中的必选算法之一;编码器的帧长为30ms,还有7.5ms的前瞻,编码器的算法时延为37.5ms;编码器首先对语音信号进行传统电话带宽的滤波(基于G.712),再对语音信号用传统8000-Hz速率进行抽样(基于G.711),并变换成16 bit线性PCM码作为该编码器的输入。

    在解码器中对输出进行逆操作来重构语音信号;高速率编码器使用多脉冲最大似然量化(MP-MLQ),低速率编码器使用代数码激励线性预测(ACELP)方法,编码器和解码器都必须支持此两种速率,并能够在帧间对两种速率进行转换。此系统同样能够对音乐和其他音频信号进行压缩和解压缩,但它对语音信号来说是最优的;采用了执行不连续传输的静音压缩,这就意味着在静音期间的比特流中加入了人为的噪声。除了预留带宽之外,这种技术使发信机的调制解调器保持连续工作,并且避免了载波信号的时通时断。

    G.729采用的算法是共轭结构的代数码激励线性预测(CSACELP),是基于CELP编码模型的算法;能够实现很高的语音质量(长话音质)和很低的算法延世;算法帧长为10ms,编码器含5ms前瞻,算法时延15ms;其重建语音质量在大多数工作环境下等同于32kb/s的ADPCM(G.726),MOS分大于4.0;编码时输入16bitPCM语音信号,输出2进制比特流;译码时输入为2进制比特流,输出16bitPCM语音信号;在语音信号8KHz取样的基础上,16bit线性PCM后进行编码,压缩后数据速率为8Kbps;具有相当于16:1的压缩率。

    G.729系列在当前的VOIP得到广泛的应用,且相关分支较多,可以直接从ITU网上得到source code和相关文档。

    G.729(CS-ACELP方式:Conjugate Structure Algebraic Code Excited Linear Prediction)

    采样率:8kHz

    信息量:8kbps/channel

    帧长:10msec

    理论延迟:15msec

    品质:MOS值3.9

    展开全文
  • vnc协议编码方式

    千次阅读 2011-10-26 18:08:15
    2. VNC的编码方式主要有 a) Raw(0):不进行编码,直接传送数据,是最慢的一种 b) Copyrect(1):对于客户端,在已经有了相同象素数据的时候比较有效,比如移动或窗口内容滚动时 c) RRE(2):将象素颜色...
  • CentOS字符编码方式

    千次阅读 2012-08-22 19:14:25
    在使用CentOS 系统时,安装的时候可能你会遇到英文的CentOS系统,在这中情况下安装CentOS系统时是默认安装...于是用以前的方式:yum -y install fonts-chinese  CentOS系统安装后,还是不能显示中文字体。我使用 g
  • 浅析汉字编码方式

    千次阅读 2005-06-13 08:21:00
    最近稍微研究了一下汉字的几种编码方式,感觉收获颇多,在此罗列出来,以供需要的朋友参考。因为网上讨论此话题的文章也颇多,我的一点见解似乎早就被前辈们覆盖到,所以,本文就当是写给自己的小小的总结吧。GB2312...
  • 转发:语音编码G.711, G.729

    千次阅读 2017-03-29 20:21:35
    语音编码分类 (1)波形编码: 以逼近声音波形为目标,其代表算法有G.711,其声音清楚度好,语音的自然度高,但是压缩...(3)波形参数混合编码: 结合了波形编码和参数编码的优点,代表算法有G.723, G.729等,能够在4
  • MCS简介-编码方式

    千次阅读 2019-07-22 10:56:49
    802.11n射频速率的配置通过MCS(Modulation and Coding Scheme,调制与编码策略)索引值实现。MCS调制编码表是802.11n为表征WLAN的通讯速率而提出的一种表示形式。MCS将所关注的影响通讯速率的因素作为表的列,将MCS...
  • windows四种编码方式

    千次阅读 2013-05-08 11:15:47
    简单介绍一下这四种编码方式:  ANSI:系统预设的标准文字储存格式。ANSI是American National Standards Institute的缩写。它成立于1918年,是一个自愿性的组织,拥有超过1300个会员,包括所有大型的电脑公司。...
  • G711音频编码格式

    千次阅读 2019-10-08 11:36:08
      最近工作中遇到了G711a音频编码,之前只用到wav和pcm,特写此文对G711格式了解一番。 文章目录音频保存格式采样和量化G711简介参考来源 音频保存格式 采样和量化   首先需要明确的两个概念,“采样”和...
  • g711u与g729比较编码格式

    千次阅读 2015-03-19 17:02:02
    •711a—编解码格式为G.711 alaw ...上面的就是voip使用的编码解码格式的,我们到底选择哪个好些呢?针对不同平台包括不同,在这里包月网络电话选择顺序优先选择:g711u,在我们的使用思科linksys
  • 离散类别特征编码方式总结

    千次阅读 2019-03-07 21:16:09
    类别特征无法直接使用,需要编码后才能进行相关计算分析 数值编码 直接将类别A,B,C …映射到1,2,3…,适用于存在大小内在关系的类别特征,编码后类别间的距离(范数)不同,对于一般的学习器不具有使用普遍性。 热独...
  • G.711编码原理及代码

    千次阅读 2015-04-12 16:19:49
    G711音频编码原理及代码。
  • 各种各样的编解码在各种领域得到广泛的应用,下面就把各种codec的压缩... G.711, G.723, G.726 , G.729, ILBC, QCELP, EVRC, AMR, SMV 主要的audio codec 有:  real audio, AAC, AC3, MP3, WMA, SBC等   各种
  • 如何使用Java代码获取文件、文件流或字符串的编码方式
  • G711(G711a+g711u)编码原理及代码

    千次阅读 2019-08-05 17:48:11
    G711编码的声音清晰度好,语音自然度高,但压缩效率低,数据量大常在32Kbps以上。常用于电话语音(推荐使用64Kbps),sampling rate为8K,压缩率为2,即把S16格式的数据压缩为8bit,...
  • [整理]语音编码G.711, G.729

    千次阅读 2017-05-17 19:28:03
    1. 语音编码分类  (1)波形编码: 以逼近声音波形为目标,其代表算法有G.711,其声音清楚度好,语音的自然度高,但是压缩效率比较差,常... (3)波形参数混合编码: 结合了波形编码和参数编码的优点,代表算法有G.723
  • g711的内容是将一个13bit或14bit的样本编码成一个8bit的样本。 g711标准主要分两种压缩方法:a-law和mu-law, a-law:将一个13bit的pcm样本压缩成一个8bit的pcm样本。 mu-law:将一个14bit的pcm样本压缩成一个8...
  • LPCM,即线性脉冲编码调制,是一种非压缩音频数字化技术,是一种未压缩的原音重现,在普通CD、DVD及其他各种要求最高音频质量的场合中已经得到广泛的应用。 各种应用场合中的LPCM(PCM)原理是一样的,区别在于采样...
  • 目前,像Avid、Sony、Panasonic、Thomson等主流厂家都有各自系列的高清设备,它们所采用的编码方式和文件的封装格式则各有不同。目前几种主流的高清编码方式有:由ITU-T和ISO/IEC联合开发的H.264/AVC/ MPEG-4标准、...
  • 一、什么是QR码 QR码属于矩阵式二维码中的一个种类,由DENSO...Code(ISO 18004)编码方式" title="QR码生成原理-QR Code(ISO 18004)编码方式" height="230" width="230"> 这个图如果被正确解码,应该看

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 219,315
精华内容 87,726
关键字:

编码方式g