譯碼

譯碼

數字與模拟電子技術領域專業術語
譯碼是編碼的逆過程,同時去掉比特流在傳播過程中混入的噪聲。利用譯碼表把文字譯成一組組數碼或用譯碼表将代表某一項信息的一系列信号譯成文字的過程稱之為譯碼。[2]譯碼器是電子技術中的一種多輸入多輸出的組合邏輯電路,負責将二進制代碼翻譯為特定的對象(如邏輯電平等),功能與編碼器相反。譯碼器一般分為通用譯碼器和數字顯示譯碼器兩大類。數字電路中,譯碼器(如n線-2n線BCD譯碼器)可以擔任多輸入多輸出邏輯門的角色,能将已編碼的輸入轉換成已編碼的輸出,這裡輸入和輸出的編碼是不同的。輸入使能信号必須接在譯碼器上使其正常工作,否則輸出将會是一個無效的碼字。譯碼在多路複用、 七段數碼管和内存地址譯碼等應用中是必要的。
  • 中文名:譯碼
  • 定義:是編碼的逆過程
  • 性質:文字
  • 混入:噪聲
  • 領域:數字與模拟電子技術

準則

假設編碼序列為( Λ) 1 2,m m m C = c c ,經過信道傳輸,接收端收到的信号為R (模拟信号或數字信号,取決于對信道的定義),那麼接收端會順理成章地在所有可能的碼序列中尋找條件概率P(C R) m 最大的一個,認為它是最可能的發送序列。即:

C~ Arg{MAX P(C R)} m C mm=這種判決準則稱為最大後驗概率準則 (MAP)。

算法

viterbi譯碼算法是一種卷積碼的解碼算法。缺點就是随着約束長度的增加算法的複雜度增加很快。約束長度N為7時要比較的路徑就有64條,為8時路徑變為128條。(2<<(N-1))。所以viterbi譯碼一般應用在約束長度小于10的場合中。

算法規定t時刻收到的數據都要進行64次比較,就是64個狀态每條路有兩條分支(因為輸入0或1),同時,跳傳到不同的兩個狀态中去,将兩條相應的輸出和實際接收到的輸出比較,量度值大的抛棄(也就是比較結果相差大的),留下來的就叫做幸存路徑,将幸存路徑加上上一時刻幸存路徑的量度然後保存,這樣64條幸存路徑就增加了一步。在譯碼結束的時候,從64條幸存路徑中選出一條量度最小的,反推出這條幸存路徑(叫做回溯),得出相應的譯碼輸出。

編碼定義

用預先規定的方法将文字、數字或其他對象編成數碼,或将信息、數據轉換成規定的電脈沖信号。編碼在電子計算機、電視、遙控和通訊等方面廣泛使用。編碼是根據一定的協議或格式把模拟信息轉換成比特流的過程。

在計算機硬件中,編碼(coding)是在一個主題或單元上為數據存儲,管理和分析的目的而轉換信息為編碼值(典型地如數字)的過程。在軟件中,編碼意味着邏輯地使用一個特定的語言如C或C++來執行一個程序。在密碼學中,編碼是指在編碼或密碼中寫的行為。

将數據轉換為代碼或編碼字符,并能譯為原數據形式。是計算機書寫指令的過程,程序設計中的一部分。在地圖自動制圖中,按一定規則用數字與字母表示地圖内容的過程,通過編碼,使計算機能識别地圖的各地理要素。

n位二進制數可以組合成2的n次方個不同的信息,給每個信息規定一個具體碼組,這種過程也叫編碼。

數字系統中常用的編碼有兩類,一類是二進制編碼,另一類是二—十進制編碼。

編碼體系

1.ASCII與Binary

我們日常接觸到的文件分ASCII和Binary兩種。ASCII是“美國信息交換标準編碼”的英文字頭縮寫,可稱之為“美标”。美标規定了用從0到127的128個數字來代表信息的規範編碼,其中包括33個控制碼,一個空格碼,和94個形象碼。形象碼中包括了英文大小寫字母,阿拉伯數字,标點符号等。我們平時閱讀的英文電腦文本,就是以形象碼的方式傳遞和存儲的。美标是國際上大部分電腦的通用編碼。

然而電腦中的一個字符大都是用一個八位數的二進制數字表示。這樣每一字符便可能有256個不同的數值。由于美标隻規定了128個編碼,剩下的另外128個數碼沒有規範,各家用法不一。另外美标中的33個控制碼,各廠家用法也不盡一緻。這樣我們在不同電腦間交換文件的時候,就有必要區分兩類不同的文件。第一類文件中每一個字都是美标形象碼或空格碼。這類文件稱為“美标文本文件”(ASCII Text Files),或略為“文本文件”,通常可在不同電腦系統間直接交換。第二類文件,也就是含有控制碼或非美标碼的文件,通常不能在不同電腦系統間直接交換。這類文件有一個通稱,叫“二進制文件”(Binary Files)。

2.國标、區位、“準國标”

“國标”是“中華人民共和國國家标準信息交換用漢字編碼”的簡稱。國标表(基本表)把七千餘漢字、以及标點符号、外文字母等,排成一個94行、94列的方陣。方陣中每一橫行叫一個“區”,每個區有九十四個“位”。一個漢字在方陣中的坐标,稱為該字的“區位碼”。例如“中”字在方陣中處于第54區第48位,它的區位碼就是5448。

其實94這個數字。它是美标中形象碼的總數。國标表沿用這個數字,本意大概是要用兩個美标形象符代表一個漢字。由于美标形象符的編碼是從33到126,漢字區、位碼如果各加上32,就會與美标形象碼的範圍重合。如上例“中”字區、位碼加上32後,得86,80。這兩個數字的十六進制放在一起得5650,稱為該字的“國标碼”,而與其相對應的兩個美标符号,VP,也就是“中”字的“國标符”了。

這樣就産生了一個如何區分國标符與美标符的問題。在一個中英文混用的文件裡,“VP”到底代表“中”字呢,還是代表某個英文字頭縮寫?電子工業部第六研究所開發CCDOS的時候,使用了一個簡便的解決方案:把國标碼的兩個數字各加上128,上升到非美标碼的位置。(改變後的國标碼,習慣上仍叫“國标”。)

這個方案固然解決了原來的問題,可是新的問題随之産生。中文文件成了“二進制文件”,既不能可靠地在不同電腦系統間交換,也不與市場上大部分以美标符号為設計對象的軟件兼容。

為了區分以上兩種“國标”,我們把原與美标形象碼重合的國标碼稱為“純國标” ,而把CCDOS加上128的國标碼稱為“準國标”。

3.GBK碼

GBK碼是GB碼的擴展字符編碼,對多達2萬多的簡繁漢字進行了編碼,簡體版的Win95和Win98都是使用GBK作系統内碼。

GB是國标,K是漢字“擴展”的漢語拼音第一個字母。其實,GBK是又一個漢字編碼标準,全稱《漢字内碼擴展規範》(Chinese Internatial Code Specification),1995年頒布。

從實際運用來看,微軟自win95簡體中文版開始,系統就采用GBK代碼,它包括了TrueType宋體、黑體兩種GBK字庫(北京中易電子公司提供),可以用于顯示和打印,并提供了四種GBK漢字的輸入法。此外,浏覽器IE4.0簡體、繁體中文版内部提供了一個GBK-BIG5代碼雙向轉換功能。此外,微軟公司為IE提供的語言包中,簡體中文支持(Simplified Chinese Language Support Kit)的兩種字庫宋體、黑體,也是GBK漢字(珠海四通電腦排版系統開發公司提供)。其他一些中文字庫生産廠商,也開始提供TrueType或PostScriptGBK字庫。

許多外挂式的中文平台,如南極星、四通利方(Richwin)等,提供GBK碼的支持,包括字庫、輸入法和GBK與其他中文代碼的轉化器。

互聯網方面,許多網站網頁使用GBK代碼。

但是多數搜索引擎都不能很好的支持GBK漢字搜索,大陸地區的搜索引擎有些能不完善的支持GBK漢字檢索。

GBK向下與GB-2312編碼兼容,向上支持ISO 10646.1國際标準,是前者向後者過渡的一個承啟标準。

GBK規範收錄了ISO 10646.1中的全部CJK漢字和符号,并有所補充。具體包括:GB 2312中的全部漢字、非漢字符号;GB 13000.1中的其他CJK漢字。以上合計20902個GB化漢字;《簡化總表》中未收入GB 13000.1的52個漢字;《康熙字典》以及《辭海》中未被收入GB 13000.1的28個部首及重要構件;13個漢字結構符;BIG-5中未被GB 2312收入、但存在于GB 13000.1的139個圖形符号;GB 12345增補的6個拼音符号;GB 12345增補的19個豎排圖形符号(GB 12345較GB 2312增補豎排标點符号29個,其中10個未被GB 13000.1收入,故GBK亦不收);從GB 13000.1的CJK兼容區挑選出的21個漢字;GB 13000.1收入的31個IBM OS/2專用符号。GBK亦采用雙字節表示,總體編碼範圍為0x8140~0xFEFE之間,首字節在0x81~0xFE之間,尾字節在0x40~0xFE之間,剔除0x××7F一條線,總計23940個碼位,共收入21886個漢字和圖形符号,其中漢字(包括部首和構件)21003個,圖形符号883個。

4.BIG5碼

BIG5碼是針對繁體漢字的漢字編碼,目前在台灣、香港的電腦系統中得到普遍應用。BIG5碼的編碼範圍參考下文。

5.HZ碼

HZ碼是在Internet上廣泛使用的一種漢字編碼。“HZ”方案的特點,是以“純國标”的中文與美标碼混用。那麼“HZ”是怎樣區分國标符和美标符的呢?答案其實也很簡單:當一串美标碼中間插入一段國标碼的時候,我們便在國标碼的前面加上~,後面加上~。這些附加碼分别叫“逃出碼”和“逃入碼”。由于這些附加碼本身也是美标形象碼,整個文件就俨然是一個美标文本文件,可以安然地 在電腦網上傳遞,也和大部分英文文本處理軟件兼容。

6.ISO-2022CJK碼

ISO-2022是國際标準組織(ISO)為各種語言字符制定的編碼标準。采用二個字節編碼,其中漢語編碼稱ISO-2022 CN,日語、韓語的編碼分别稱JP、KR。一般将三者合稱CJK碼。目前CJK碼主要在Internet網絡中使用。

7.UCS 和 ISO 10646

1993年,國際标準ISO10646 定義了通用字符集(Universal Character Set,UCS)。UCS 是所有其他字符集标準的一個超集。它保證與其他字符集是雙向兼容的。就是說,如果你将任何文本字符串翻譯到 UCS格式,然後再翻譯回原編碼,你不會丢失任何信息。

UCS 包含了用于表達所有已知語言的字符。不僅包括拉丁語,希臘語,斯拉夫語,希伯來語,阿拉伯語,亞美尼亞語和喬治亞語的描述, 還包括中文,日文和韓文這樣的象形文字,以及平假名,片假名,孟加拉語,旁遮普語果魯穆奇字符(Gurmukhi), 泰米爾語, 印.埃納德語(Kannada),Malayalam,泰國語,老撾語, 漢語拼音(Bopomofo), Hangul,Devangari,Gujarati, Oriya,Telugu 以及其它語種。對于還沒有加入的語言,由于正在研究怎樣在計算機中最好地編碼它們, 因而最終它們都将被加入。這些語言包括Tibetian,高棉語,Runic(古代北歐文字),埃塞俄比亞語, 其他象形文字,以及各種各樣的印-歐語系的語言,還包括挑選出來的藝術語言比如 Tengwar,Cirth 和 克林貢語(Klingon)。UCS 還包括大量的圖形的,印刷用的,數學用的和科學用的符号,包括所有由 TeX,Postscript, MS-DOS,MS-Windows, Macintosh, OCR 字體, 以及許多其他字處理和出版系統提供的字符。

ISO 10646 定義了一個 31 位的字符集。然而,在這巨大的編碼空間中,迄今為止隻分配了前 65534 個碼位 (0x0000 到 0xFFFD)。這個UCS的16位子集稱為基本多語言面 (Basic Multilingual Plane,BMP)。将被編碼在16位BMP以外的字符都屬于非常特殊的字符(比如象形文字),且隻有專家在曆史和科學領域裡才會用到它們。按當前的計劃,将來也許再也不會有字符被分配到從0x000000到0x10FFFF這個覆蓋了超過100萬個潛在的未來字符的 21 位的編碼空間以外去了。ISO 10646-1标準第一次發表于1993年,定義了字符集與 BMP 中内容的架構。定義 BMP以外的字符編碼的第二部分 ISO 10646-2 正在準備中,但也許要過好幾年才能完成。新的字符仍源源不斷地加入到 BMP 中,但已經存在的字符是穩定的且不會再改變了。

UCS 不僅給每個字符分配一個代碼,而且賦予了一個正式的名字。表示一個 UCS 或 Unicode 值的十六進制數,通常在前面加上 “U+”,就象U+0041 代表字符“拉丁大寫字母A”。UCS字符U+0000到U+007F 與 US-ASCII(ISO 646) 是一緻的, U+0000 到 U+00FF 與 ISO 8859-1(Latin-1) 也是一緻的。從 U+E000 到 U+F8FF,已經BMP 以外的大範圍的編碼是為私用保留的。

1993年,ISO10646中定義的USC-4 (Universal Character Set) ,使用了4 個字節的寬度以容納足夠多的相當可觀的空間,但是這個過于肥胖的字符标準在當時乃至現在都有其不現實的一面,就是會過分侵占存儲空間并影響信息傳輸的效率。與此同時,Unicode 組織于約 10 年前以 Universal,Unique和Uniform 為主旨也開始開發一個16位字符标準, 為避免兩種16位編碼的競争,1992年兩家組織開始協商,以期折衷尋找共同點,這就是今天的 UCS-2 (BMP,Basic Multilingual Plane,16bit) 和Unicode,但它們仍然是不同的方案。

8.Unicode碼

關于Unicode我們需要追溯一下它産生的淵源。

當計算機普及到東亞時,遇到了使用表意字符而非字母語言的中、日、韓等國家。在這些國家使用的語言中常用字符多達幾千個,而原來字符采用的是單字節編碼,一張代碼頁中最多容納的字符隻有28=256個,對于使用表意字符的語言是在無能為力。既然一個字節不夠,自然人們就采用兩個字節,所有出現了使用雙字節編碼的字符集(DBCS)。不過雙字節字符集中雖然表意字符使用了兩個字節編碼,但其中的ASCII碼和日文片假名等仍用單字節表示,如此一來給程序員帶來了不小的麻煩,因為每當設計到DBCS字符串的處理時,總是要判斷當中的一個字節到底表示的是一個字符還是半個字符,如果是半個字符,那是前一半還是後一半?由此可見DBCS并不是一種非常好的解決方案。

人們在不斷尋找這更好的字符編碼方案,最後的結果就是Unicode誕生了。Unicode其實就是寬字節字符集,它對每個字符都固定使用兩個字節即16位表示,于是當處理字符時,不必擔心隻處理半個字符。

目前,Unicode在網絡、Windows系統和很多大型軟件中得到應用。

GB編碼标準中,比較常用的是GB2312和GBK兩種,GB2312是GBK的一個子集,GB2312編碼範圍是 0xA1A1 - 0xFEFE ,如果純粹的 GB2312編碼,處理起來是什分簡單的,但處理GBK字符集時有些小的提示,先說說GBK編碼的标準吧:

GBK 采用雙字節表示,總體編碼範圍為 8140-FEFE,首字節在 81-FE 之間,尾字節在 40-FE 之間,剔除 xx7F 一條線。總計 23940 個碼位,共收入 21886 個漢字和圖形符号,其中漢字(包括部首和構件)21003 個,圖形符号 883 個。

全部編碼分類

1. 漢字區。包括:

a. GB 2312 漢字區。即 GBK/2: B0A1-F7FE。收錄 GB 2312 漢字 6763 個,按原順序排列。

b. GB 13000.1 擴充漢字區。包括:

(1) GBK/3: 8140-A0FE。收錄 GB 13000.1 中的 CJK 漢字 6080 個。

(2) GBK/4: AA40-FEA0。收錄 CJK 漢字和增補的漢字 8160 個。

CJK 漢字在前,按 UCS 代碼大小排列;增補的漢字(包括部首和構件)在後,按《康熙字典》的頁碼/字位排列。

2. 圖形符号區。包括:

a. GB 2312 非漢字符号區。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符号外,

還有 10 個小寫羅馬數字和 GB 12345 增補的符号。計符号 717 個。

b. GB 13000.1 擴充非漢字區。即 GBK/5: A840-A9A0。BIG-5 非漢字符号、結構符和“○”排列在此區。計符号 166 個。

3. 用戶自定義區:分為(1)(2)(3)三個小區。

(1) AAA1-AFFE,碼位 564 個。

(2) F8A1-FEFE,碼位 658 個。

(3) A140-A7A0,碼位 672 個。

第(3)區盡管對用戶開放,但限制使用,因為不排除未來在此區域增補新字符的可能性。

這裡有幾個小技巧:

1、在php中,字符編碼是按所發送的編碼為準的,因些使用的就是用戶輸入的編碼,不會自動改變,但在asp中,默認的編碼是unicode,這樣我們很容易就能得到gbk->unicode的編碼對照表,這樣即使在毫無基礎庫的情況下也能很容易的實現gbk到utf-8的轉換了;

2、由于GBK是高位最低數值是0x40,即是64,因此,有時候組織一些涉及中文的字串時,分割字符最好用64之前的ascii碼,這樣在任意情況下替換或分割都不會出現亂碼,比較常用的是 ","、";"、":"、" "、" "、" ",這些字符永遠都不會給gb編碼添亂。

編碼種類

編碼(Encoding)在認知上是解釋傳入的刺激的一種基本知覺的過程。技術上來說,這是一個複雜的、多階段的轉換過程,從較為客觀的感覺輸入(例如光、聲)到主觀上有意義的體驗。

字符編碼(Character encoding)是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如号碼或電脈沖)進行配對。

文字編碼(Text encoding)使用一種标記語言來标記一篇文字的結構和其他特征,以方便計算機進行處理。

語義編碼(Semantics encoding),以正式語言乙對正式語言甲進行語義編碼,即是使用語言乙表達語言甲所有的詞彙(如程序或說明)的一種方法。

電子編碼(Electronic encoding)是将一個信号轉換成為一個代碼,這種代碼是被優化過的以利于傳輸或存儲。轉換工作通常由一個編解碼器完成。

神經編碼(Neural encoding)是指信息在神經元中被如何描繪的方法。

記憶編碼(Memory encoding)是把感覺轉換成記憶的過程。

加密(Encryption)是為了保密而對信息進行轉換的過程。

譯碼(Transcoding)是将編碼從一種格式轉換到另一種格式的過程。

物理學類

在物理學中,編碼和譯碼用語門電路。

将模拟信号轉換為2進制數字的期間叫模數轉換器(ADC)。将2進制數變換成模拟量的叫數模轉換器(DAC)。編碼器與譯碼器一般用于芯片地址選擇時使用。 3-8譯碼器就是将輸入的三位編碼轉換為8位輸出,使其中一位與其他不同。例如010譯碼後為0000,0010。

相關詞條

相關搜索

其它詞條