2013年5月2日 星期四

Audacity 音效編輯


Audacity 音效編輯軟體使用手冊

這是一個音波編輯的工具軟體,支援 WAV(*.wav)、AIFF(*.aif)、AU(*.au)、IRCAM(*.snd)、MP3(*.mp3)和 Ogg Vorbis(與MP3同級)等音效檔案。可以用來剪輯音效(剪下/複製/貼上)、插入空白聲音,以及其他特效,使用起來還算蠻順手的,請自己試試看吧。

壹、概覽Audacity

audacity


名詞解釋


音軌(audio track):一般的音效聲波。

標籤軌(label track):在選取區的起點處(時間)建立文字註解,以方便日後的編輯工作。若將之輸出,則會儲存成txt文字檔。
    labeltrack.png
 建立標籤軌的方法有二:
  1.先建立新的標籤軌 Project -> New Label Track
   然後再輸入
標籤文字:拖曳出選取區 -> Project -> Add Label At Selection -> 輸入文字
  2.拖曳出選取區 -> Project -> Add Label At Selection -> 輸入文字

 將標籤文字存檔:File -> Export Labels

貳、工具列介紹
select_tool 選擇工具(Selection Tool)按下此按鈕後,可以用拖曳法建立音波選取區,以進行編輯工作。
time_tool 時間工具(Time Sift Tool)按下此按鈕後,可以用拖曳法將整音效檔的時間往前/往後移動。
envelope_tool (Envelope Tool)按下此按鈕後,可扭曲音波達到所需要的特效。
zoom_tool 放大鏡(Zoom Tool)相當於Zoom Im功能,可看到更細部的音波。
play 播放鈕播放音效檔。
stop 停止鈕停止播放。
record 錄音鈕將外部聲音錄成新的音軌。
volume 音量控制鈕控制音量的大小。


參、功能表單介紹

一、檔案(File)功能表
New(Ctl+N)開啟一個新的Audacity視窗。
一個Audacity視窗只能處理一個音效檔案,因此欲同時處理多個音效檔就必須開啟
多個Audacity。
Open(Ctl+O)開啟舊檔。從磁碟中開啟一個音效檔案。
Close(Ctl+W)關閉目前的音效檔案。
Save Project(Ctl+S)將編輯中的音效檔存成Audacity的專案檔,包括一個.aup的文字檔和一個由許多.auf檔組成的資料夾。
Save Project As...將編輯中的音效檔另存一個專案檔名。
Export as WAV...將編輯中的音效檔存成WAV檔。
Export Selection as WAV...將選擇區的音效存成WAV檔。
Export as MP3...將編輯中的音效檔存成MP3檔。
Export Selection as MP3...將選擇區的音效存成MP3檔。
Export as OGG...將編輯中的音效檔存成OGG檔。
Export Selection as OGG...將選擇區的音效存成OGG檔。
Export Labels...將註解的標籤文字儲存成文字檔
Preferences...(Ctl+P)參數設定
Exit結束


二、編輯(Edit)功能表
Undo(Ctl+Z)回復,回復上一次的編輯動作。
Redo(Ctl+R)重做,回到回復編輯前。
Cut(Ctl+X)剪下一段音波。
Copy(Ctl+C)複製一段音波。
Paste(Ctl+V)貼上一段音波。
Delete(Ctl+K)刪除選擇區的音波。
Silence(Ctl+L)將選擇區填上空白的聲音。
Insert Silence...在游標處插入一段空白聲音(以秒計算)。
Spilt(Ctl+Y)將選擇區剪到同視窗的另一音軌,並將該選擇區填上空白的聲音。
Duplicate(Ctl+D)將選擇區複製到同視窗的另一音軌。
Select All(Ctl+A)選擇全部的音波。


三、檢視(View)功能表
Zoom In    (Ctl+1)看更細部的音波狀態,但可視範圍較小。
Normal    (Ctl+2)恢復一般狀態。可看到整個音效檔的音波狀態。
Zoom Out   (Ctl+3)加大可視範圍,但較不清楚。
Fit in Window(Ctl+F)將整個音效檔的音波填滿一個視窗,不顯示空白音波。
Plot Spectrum(Ctl+U)
Float or Unfloat Palette切換工具列成為浮動/不浮動狀態,方便進行編輯。
float_palette


四、專案(Project)功能表
Import Audio...(Ctl+I)匯入外部音效檔成為一個音軌。
Import Labels...匯入註解用的標籤文字檔,匯入後會成為一個標籤軌,並保留原始的時間點。
Import MIDI...匯入外部MIDI檔成為一個音軌。
Import Raw Data...匯入外部音效檔成為一個音軌(須自行指定格式)。
Edit ID3 Tags... 輸出成MP3時用。
Quick Mix快速混音。
Align Tracks Together音軌重新排列。
Align with Zero在多音軌編輯狀態下,若使用過時間工具time_tool.png改變音軌的時間位置,可用此功能恢復原始狀態。
New Audio Track新增一個空白音軌。
New Label Track建立新的標籤軌。
Remove Track(s)將游標所在的音軌或標籤軌刪除。
Add Label At Selection (Ctl+B)為選擇區的音軌建立註解。



五、特效(Effect)功能表
Amplify...放大選取區的音波。
BassBoost...將低頻放大,12dB是建議值。
Echo...回音
Fade In淡入。
Fade Out淡出。
FFT FilterFFT濾波器。可將選取區的音波。
Invert將音波上下顛倒。
Noise Removal...消除雜訊。
Phaser...
Reverse將音波左右顛倒。
Washwah...像1970年代的吉他聲。


肆、說明

編輯過的音效只能以下二種方法存檔(整個音軌)
 1.存成專案檔:Save Project 或 Save Project As
 2.匯出成為其他檔名的音效檔:Export as 
WAV/MP3/OGG
 只要編輯過的音效一定不能以「儲存檔案」的方式覆蓋原來的音效檔

選取一段音軌成為一個檔案
 1.選取一段音軌
 2.File -> Export Selection as WAV/MP3/OGG
切割音效檔
 1.選取前半段音軌
 2.Edit -> Split
split1-1
split2-1.png
切割成或切割成
split1-2
split2-2.png


混音
 1.開啟一個音效檔:File -> Open
 2.匯入欲混音的音效檔:Project -> Import WAV/MIDI等
 3.輸出成一個音效檔:File -> 
Export as WAV/MP3/OGG
 


我的成果

Internet伺服器

2013年3月28日 星期四

電腦運作原理

(1) CPU的歷史演進~處理位元的進化
在1971年,Intel公司及Marcian E.Hoff共同發表了-4004處理器,它是一個4位元的微處理器,為目前所見各處理器的先驅,主要使用在早期電視遊樂器和小型微處理器為基礎的控制器。到了1974年,Intel提出了延續性相容的版本-8008微處理器,由於其記憶體及指令集仍然很小,使得其可用性受到許多限制,因此在1973年Intel提出了最早的8位元微處理器-8080,其處理速度已較8008快了將近10倍。
1976年,Intel又發表了8086微處理器,約一年後又提出了8088,使用在IBM的個人PC上,兩者均是16位元微處理器,之後又改良出80186、80286,而80286的時脈頻率在Intel最終版時已可達到16MHz,每秒可執行8億個指令數(8MIPS)。之後再進一步演進到80386、80486微處理器的時代,則已邁入32位元的微處理器時代,而到目前為止的Pentium Ⅲ、Pentium Ⅳ時期,CPU依然處於32位元的世代(Pentium系列雖然在外部頻率達到64位元,但是其內部的資料匯流排採用的是32條*2的架構,因此尚不足以稱為真正64位元的處理器)。到了近年來,AMD推出伺服器版所使用的K8 Opteron處理器及針對桌上型電腦推出Athlon 64處理器後,Intel也打出伺服器版的Xeon DP處理器來與AMD抗衡,正式揭開64位元微處理器的世代,相信未來Intel針對一般消費型市場所主打的Pentium Ⅳ處理器勢必也將研發新的晶片以投入64位元處理器的競爭市場。
不過大家也不用陷入位元的迷失之中,因為要能達到處理器最大的效能,必須仰賴作業系統(OS)、記憶體、硬體、匯流排等元件來配合來行,以目前的技術來看,微軟的作業系統在Windows 2003 Beta 1之後才正式走向64位元的作業系統,要達到全面加速的64位元時代,雖不遠但仍需一段時間的努力才行。
(2) CPU的組成
CPU是由「矽」晶片製作而成,科學家利用顯微照相技術,將數百萬顆的電晶體所組成的電路縮小至小小的晶片之中。其組成包括控制單元(Contrl Unit)、算術邏輯單元(Arithmetic/Logic Unit)、暫存器(Register)、快取記憶體(Cache)、控流排(Bus)等。
控制單元用來控制與指揮電腦各單元間相互運作、資料傳遞等,主要的功能包括:(1) 負責接受命令與解釋命令。
(2) 負責整部電腦的指揮及控制。
(3) 負責控制程式與資料進入主記憶體。
算術邏輯單元目的在負責算術運算與邏輯判斷的工作。主要的功能包括:
(1) 負責電腦系統中的算術(加、減、乘、除)、邏輯比較(比較大小、判斷)工作。
(2) 決定數值運算的速度。
暫存器是CPU中暫時存放資料的地方,也是電腦所有記憶單元中存取資料最快的裝置,常見的暫存器有累加器、指令暫存器、位址暫存器、一般用途暫存器、旗標暫存器、程式計數器 。
快取記憶體,包括L1 Cache、L2 Cache,當電腦要執行程式時,必須將所需的資料載入主記憶體中,以供CPU執行的過程中擷取,然而主記憶體的速度無法滿足CPU的需求,因此才有快取記憶體的存在,節省在CPU執行過程中等待資料所需的時間。早期電腦的CPU中只加入L1 Cache,而L2 Cache則建於主機板上,目前新款的CPU已將L1 Cache、L2 Cache內建於CPU中,新增L3 Cache於主機板上溝通CPU與主記憶體。
匯流排是電腦元件間互相傳遞訊息、溝通資料的管道,位於CPU內部的匯流排稱為「內部匯流排」,依照所傳遞訊號的類型又可分為位址匯流排(Address Bus)、資料匯流排(Data Bus)、控制匯流排(Contrl Bus)。
除此之外,在處理器組成中尚有一個部分需要考量,稱為「指令集」。一般而言指令集的結構可以分為兩種,一種稱為「複雜指令集(CISC)」;另一種稱為「精簡指令集(RISC)」。前者既然稱為「複雜」顧名思意,即內建在晶片中的指令數較多,但相對而言讀取指令與解譯指令的時間也較長,執行速度較慢、耗電量較大;後者則只將部份的指令內建於晶片之中,因指令數少,故讀取與解譯指令的速度反而較快,但是若執行到非內建的指令時,因為需要透過數個指令結合成所要執行的指令要求,相對而言執行的速度反而較複雜指令集要來得慢。
(3) CPU的運作原理與方式
指令或資料進入電腦之後,執行一個指令的過程包括:記憶→擷取(Fetching)→解碼(Decoding)→執行(Executing)→儲存(Storing)等幾個步驟,又稱為指令週期。其中從擷取開始即交由CPU來執行,首先我們先來探討到底這些步驟必須負責那些事。
記憶:已輸入的指令或資料存在記憶單元之中,記憶單元必須提供CPU執行過程中所需要的資料,這邊所看到的記憶單元可廣泛地包括主記憶體、快取記憶體、暫存器等。
擷取:指控制單元由記憶單元中擷取指令或資料。
解碼:主要的動作在「分析指令」,並發出適當的控制訊號以便執行指令。
執行:算術/邏輯單元負責依照傳過來的指令需求,進行算術運算及邏輯判斷的動作。
儲存:控制單元將結果存至內部的暫存器或外部的記憶單元。
舉個例子來說,若我們要計算「(5+6)*7-8」,則在電腦中的運作方式可以簡單地表示如下:

各位可能會想說,電腦怎麼這麼笨,「我一個步驟就可以算出69了,它要執行這麼複雜的處理」。有一個要點大家必須先搞清楚,雖然電腦在算出69的過程中經歷了很多步驟,但是它所用的時間卻是無比的節省,一般而言,電腦執行一個指令的時間,通常僅需要百萬分之一秒(MIPS,million of instruction per second),甚至更短的時間,反過來說CPU每一秒可執行數百萬個以上的指令。以上述這樣四個步驟的處理,對它而言不用超過0.1秒就可以完成。
(4) 常見的CPU規格與種類
依照針腳數來作區隔:
之前我們說過CPU背後一根根金針狀的東西我們稱為針腳,每一家公司對於每一種發行的CPU其針腳數卻未必相同,不同的針腳設計,除其定義不同外,對於支援的晶片組及安裝的插槽也不相同。
若以針腳數來區隔的話,CPU的類型可以包括Slot 1、SCOKET 370、SCOKET 478、SCOKET A等。在Pentium早期的封裝方式必須使用的插槽規格為Slot1,它有點像電視遊樂器的卡匣方式,在早期為Intel打下不小的江山。但是這種封裝方式無法有效地解決微處理器在運作時所發出的高熱,價格較高,再加上AMD的嚴厲挑戰下,使得Intel公司不得不選擇較具有挑戰力的「Scoket 370」結構,只是當時並非用在Pentium等級的電腦,而是另一款主打低價市場的「Celeron」處理器。在目前Pentium Ⅳ的世代下,Celeron及Pentium等級的電腦均已演進到SCOKET 478的規格,而這個規格卻也為Intel創下不錯的成績。
相對於Intel公司的不斷變更針腳的規格,AMD公司也有相同的因應策略,從早期的Slot A、Scoket 462、演進到目前的Scoket A,在在均有與Intel相抗衡的意味,不過古諺有云「鷸蚌相爭,漁翁得利」,相信在兩雄相爭的結果,最終得利的還會是身為消費者的你我。
依照等級來作區分:
Intel和Amd公司為了要吸引低價市場的民眾並迎合高階使用者的需求,兩家公司在研發的產品均設計高階規格與較低等級兩種,低階等級的機種整體效能也許比不上高階機種,但對一般的使用者而言在操作上已經足以應付所需:
Intel公司
AMD公司
高階高價
Pentium系列
Athlon系列
低階低價
Celeron系列
Duron系列
高低差別
Celeron除了外頻工作時脈及L2 Cache容量等等架構有所差異,造成的效能落差外,其餘和Pentium均相同。
Duron與Athlon最主要的差別在於L2 Cache的容量大小較小,使得其效能略遜一籌,此外在系統匯流排及時脈頻率也略小些。
除此之外伺服器用、一般個人電腦用、筆記型電腦用的處理器也不相同,以筆記型電腦而言,因為需要特別注意省電的功能,因此筆記型電腦的處理器均會加上M(Mobil)的字樣,如Pentium M,強調適用於行動電腦使用,目前筆記型電腦主打的處理器型號為Centrino(迅馳),強調Pentium M配合Intel855的系統晶片及無線網路功能,提升整體效能、降低消耗功率、增加電池續航力,相對而言,其他硬體設備也需要能配合才行。

不同架構的處理器,雖然外觀、腳位不同,但卻可以執行相同的應用程式,我們稱為「相容處理器」。有些不同結構的系統,其執行的的應用程式並不相同,因此所使用的處理器也不同,例如,麥金塔電腦(蘋果電腦)所使用的處理器稱為PowerPC G4就不能應用在一般的個人電腦上面,同樣的在個人電腦上所使用的處理器也不能應用在麥金塔電腦。
以下介紹幾款目前較新且常用品牌的處理器:
K7
(Athlon XP3200+)
K8
(Athlon 64 3200+)
Celeron 2.6GHz
Pentium 4 3.2GHz
插槽類型
Socket A
Socket 754
Socket 478
Socket 478
運作時脈
2.25GHz
2GHz
2.6GHz
3.2GHz
外頻
166MHz
200MHz
100MHz
200MHz
倍頻
13.5X
10X
26X
16X
電晶體數
5430萬
105.9百萬
4200萬
5500萬
(5) CPU的三個親密伴侶:主機板,記憶體,散熱風扇
主機板:又有人稱為母板,可以說是除了處理器之外,重要性最大的核心元件。電腦其他電子元件設備均需與主機板相連結方能正常運作,在主機板上除了我們之前所介紹的插槽外,還配置有「主動晶片組(又稱系統晶片組)」北橋晶片及南橋晶片來協助處理器掌控整部電腦的執行,其中北橋晶片組負責高速介面之間的聯結,這所謂的高速元件包括處理器、AGP介面、記憶體等;而南橋晶片則掌管低速即可運作的周邊裝置、擴充介面等。同學若想對主機板有更進一步的認識,可參閱主機板單元。
記憶體:之前我們提過CPU所處理的資料大部份由記憶體來提供,當程式一開始要執行前必須將一些程式執行過程中所需的資料放置於主記憶體中以供處理器取用。因此記憶體的存取資料的速度及大小多少會影響到整部電腦的效能及處理器運作的能力,當記憶體速度太慢或大小不足,則處理器會有許多的時間在等待資料的供給,相對而言,CPU會有很多的閒置時間,自然而然造成整體執行效能不彰。(註:若主記憶體空間大小不夠又需要執行程式時,會使用輔助記憶體,如硬體當作記憶體來使用,我們稱為「虛擬記憶體」,但可想而知輔助記憶體存取資料的速度又遠較主記憶得來得慢,又如何比得上CPU呢?)同學若想對記憶體有更進一步的認識,可參閱記憶體單元。
散熱風扇:散熱風扇的組成包括:「散熱風扇」、「散熱片」、「扣具」。處理器是一個高速執行、運轉的電子元件,因此在運作的過程中會產生高熱,而這「熱」若無法正常排除,則將會造成系統執行過程的不穩定性,這不穩定性將有可能造成電腦容易當機,讓整個電腦操作與使用的過程無法順利完成。目前常用處理器的散熱系統除了散熱風扇外,還有散熱膏,藉由散熱膏的能力可以讓散熱片底部更加貼近處理器表面,讓處理器所發出的熱量,能更有效率地透過散熱片及散熱風扇的協助排出。所以說散熱風扇可以說是除主機板之外最貼近CPU的親密戰友。

數字系統及數字系統的轉換

 

回上一層數字系統及數字系統的轉換

電腦內部資料是以0和1來儲存的,這種只有0和1兩種狀態的系統,相當於二進位系統;本節將就二進位系統探討其轉換、加、減、AND及OR運算。

1.電腦常用數字系統

  1. 十進位制(decimal number system):十進位制是一種滿10進位,基底為十的數字系統,由0、1、2、3、4、5、6、7、8、9等十個數字組成,為日常生活中普遍使用的數制。例127810,其基底通常被省略,亦即1278。
  2. 二進位制(Binary number system):二進位制是一種滿2進位,基底為二的數字系統,由0和1兩個數字所組成,為電腦最基本的數字系統。通常表示時會在數字前加一"B"以便於識別,例B1101或1102。
  3. 八進位制(octal number system):八進位制為逢8進位的數字系統,由0、1、2、3、4、5、6、7所組成,通常於數字前加"&"或"&O"字母符號識別,例如&O467或4568。
  4. 十六進位制(hexadecimal number system):十六進位制為逢16進位的數字系統,由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F所組成,其中A表十進位的10,B表 11,依次類推,其識別方式是於數前加"&H",例如&H123C,&HA28。或123C16。
表一 各數字系統對照表

2.數字系統的轉換

(1) 十進位數轉換成二進位數
方法:
  1. 整數部份:將十進位整數連除以2,直到商數為0,再從下往上依次取出餘數。
  2. 小數部份:將十進位小數連乘以2,直到適當位數為止,從上往下依序取其整數
【例】43.62510 =        2。
解:(a)整數部份
 (b)小數部份
(2).二進位數轉換成十進位數
方法:將2進位每一位數分別乘以其位值, 再把結果加起來即可。
【例】 101011.1012=       10
解:二進位數各位值如下:

3.二進位數的邏輯運算

邏輯運算是數學家布林(Boolean)根據數位邏輯閘所發展出來的,茲擇要列表如下:
表二 邏輯符號及相關說明
根據上表做一些練習如下:
解:

4.二進位數的算術運算

二進位數的算術運算以加、減、乘、除的四則運算,它的作法和十進位相近,只是二進位數在加法時滿2進1,在減法時借1當作2,其餘相同,列表如下:

5.補數的運算

接著,從邏輯電路的觀念來了解一下電路是如何進行相加的。首先寫出「被加數+加數=和、進位」的真值表如下圖(a)所示,其中和的真值表是XOR閘的關係,進位則是AND的關係,進而劃出電路圖如下圖(c)所示。
被加數A加數B和S進位C
0000
0110
1010
1101
(a)真值表
此圖是一個最基本的加法電路,必須要有兩個這種電路才能執行一個完全的加法(包括上一個的進位也必須加進來),在電腦內為了簡化電路,因此是以加法器為基本運算單元,減法時以加補數方式進行,乘法則是連加、除法是連加補數,都是以加法方式完成的,何謂補數呢?補數又如何來完成減法呢?
所謂補數(Complement)是指兩個數字加起來等於某數時,則稱該二數互為某數的補數;例如3的10補數為7,同理7的10補數為3。而補數有助減法運算用加法器來執行。例如4的十進位補數為6,故:
對二進位而言有1補數系統和2補數系統兩個。
(1) 1的補數系統(1's Complement):1補數系統是指兩數之和為1,則此兩數互為1的補數,亦即0和1互為1的補數。換言之,欲求得二進位數的1補數,只需將0變成1,1變成0即可;例如10102 的1補數為01012。
(2) 2的補數系統(2's Complement):2補數系統的求法是先取該數的1補數,再加1即可,如下例:
【例】求0100之2補數
解:
以2補數法求兩數相減的步驟如下:
  1. 取減數的2補數。
  2. 和被減數相加。
  3. 相加後會產生有無溢位問題,再分別處理:
  4. 若沒有溢位,表示其結果為負值,再取此結果的2補數,才能得到正確的答案。
  5. 若發生溢位,表示其結果為正值,則將此溢位捨棄,即得正確的答案。
【例】以2補數求1101-0100 =      2
解:

16位元錯誤更正漢明碼


漢明碼

維基百科,自由的百科全書
漢明碼(Hamming Code),是在電信領域的一種線性偵錯碼,以發明者Richard Hamming的名字命名。漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於內存(RAM)。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。因此,當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於1時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。
在數學方面,漢明碼是一種二元線性碼。對於每一個整數m>2,存在一個編碼,帶有m個奇偶校驗位2^m-m-1個資料位。該奇偶檢驗矩陣的漢明碼是通過列出所有米欄的長度是兩兩獨立 。

目錄

  [隱藏] 

[編輯]歷史

1940年,漢明於貝爾實驗室(Bell Labs)工作,運用貝爾模型V(Bell Model V)電腦,一個週期時間在幾秒鐘內的機電繼電器機器。輸入端是依靠打孔卡(Punched Card),這不免有些讀取錯誤。在平日,特殊代碼將發現錯誤和閃燈(flash lights),使得操作者能夠糾正這個錯誤。在週末和下班期間,在沒有操作者的情況下,機器簡單的轉移到下一個工作。
漢明在週末工作,他對於不可靠的讀卡機總是必須重新開始專案變得愈來愈沮喪。在接下來的幾年中,他為了解決偵錯的問題,開發了功能日益強大的偵錯演算法。在1950年,他發表了至今所稱的漢明碼。現在漢明碼有著廣泛的應用。

[編輯]漢明碼之前

有多種檢查錯誤的編碼方式在漢明碼出現之前被使用,但是沒有一個可以在和漢明碼相同空間消耗的情況下,得到相等的效果。

[編輯]奇偶

奇偶校驗是一種添加一個奇偶位用來指示之前的資料中包含有奇數還是偶數個1的檢驗方式。如果在傳輸的過程中,有奇數個位發生了改變,那麼這個錯誤將被檢測出來(注意奇偶位本身也可能改變)。一般來說,如果資料中包含有奇數個1的話,則將奇偶位設定為1;反之,如果資料中有偶數個1的話,則將奇偶位設定為0。換句話說,原始資料和奇偶位組成的新資料中,將總共包含偶數個1.
奇偶校驗並不十分健壯,如果資料中有偶數個位發生變化,則奇偶位仍將是正確的,因此不能檢測出錯誤。而且,即使奇偶校驗檢測出了錯誤,他也不可以指出哪一位出現了錯誤,從而進行更正。資料必須整體丟棄並且重新傳輸。在一個噪音較大的媒介中,成功傳輸資料可能需要很長時間或者不可能完成。雖然奇偶校驗的效果不佳,但是由於他只需要一位額外的空間開銷,因此這是開銷最小的檢測方式。並且,如果知道了發生錯誤的位,奇偶校驗還可以恢複數據。

[編輯]漢明碼

如果一條訊息中包含更多用於糾錯的位,且透過妥善安排這些糾錯位使得不同的出錯位產生不同的錯誤結果,那麼我們就可以找出出錯位了。在一個7位的訊息中,單個位出錯有7種可能,因此3個錯誤控制位就足以確定是否出錯及哪一位出錯了。
漢名研究了包括五取二碼在內的編碼方案,並歸納了他們的想法。

[編輯]通用演算法

下列通用演算法可以為任意位數位產生一個可以糾錯一位(英語:Single Error Correcting)的漢明碼。
  1. 從1開始給數字的數據位(從左向右)標上序號, 1,2,3,4,5...
  2. 將這些資料位的位置序號轉換為二進制, 1, 10, 11, 100, 101, 等.
  3. 資料位的位置序號中所有為二的冪次方的位(編號1,2,4,8,等,即資料位位置序號的二進制表示中只有一個1)是校驗位
  4. 所有其它位置的資料位(資料位位置序號的二進制表示中至少2個是1)是資料位
  5. 每一位的資料包含在特定的兩個或兩個以上的校驗位中,這些校驗位取決於這些資料位的位置數值的二進制表示
    1. 校驗位 1 覆蓋了所有資料位位置序號的二進制表示倒數第一位是1的資料:1(校驗位自身,這裡都是二進制,下同),11,101,111,1001,等
    2. 校驗位 2 覆蓋了所有資料位位置序號的二進制表示倒數第二位是1的資料:10(校驗位自身),11,110,111,1010,1011,等
    3. 校驗位 4 覆蓋了所有資料位位置序號的二進制表示倒數第三位是1的資料:100(校驗位自身),101,110,111,1100,1101,1110,1111,等
    4. 校驗位 8 覆蓋了所有資料位位置序號的二進制表示倒數第四位是1的資料:1000(校驗位自身),1001,1010,1011,1100,1101,1110,1111,等
    5. 簡而言之,所有校驗位覆蓋了資料位置和該校驗位位置的二進制與的值不為0的數。
採用奇校驗還是偶校驗都是可行的。偶校驗從數學的角度看更簡單一些,但在實踐中並沒有區別。
校驗位一般的規律可以如下表示:
資料位位置1234567891011121314151617181920...
編碼後資料位置p1p2d1p4d2d3d4p8d5d6d7d8d9d10d11p16d12d13d14d15
奇偶校驗位
覆蓋率
p1XXXXXXXXXX
p2XXXXXXXXXX
p4XXXXXXXXX
p8XXXXXXXX
p16XXXXX
觀察上表可發現一個比較直觀的規律:第i個檢驗位是第2i-1位,從該位開始,檢驗2i-1位,跳過2i-1位……依次類推。例如上表中第3個檢驗位p4從第23-1=4位元開始,檢驗4、5、6、7共4位元,然後跳過8、9、10、11共4位元,再檢驗12、13、14、15共4位元……

[編輯]例子

對11000010進行漢明編碼,求編碼後的碼字。
1. 列出表格,從左往右(或從右往左)填入數位,但2的次方的位置不填。
位置1234567891011121314
資料11000010
2. 把資料行有的1的列的位置寫為二進制。
位置1234567891011121314
資料11000010
二進制001101011011
3. 收集所有二進制數位,求異或。0011 \oplus 0101 \oplus 1011 =1101
4. 把1101依次填入表格中2的次方的位置。
位置1234567891011121314
資料11000010
二進制001101011011
校驗1101
5. 所以編碼後的碼字是111010010010。