2008年7月13日 星期日

Implenebtation of an encoder for turbo codes using the MIPS-like architecture

下圖為一個渦輪碼的編碼器:

訊號在傳送之前,必須經過編碼後再傳送出去.當有訊號要傳送時,輸出端可分為三個部份,一個為將原始訊號輸出;一個為將訊號經過encoder後在輸出;另一個為將訊號經過交錯器後,在進行編碼




下圖為本研究的流程圖:

首先使用C語言撰寫turbo code的encoder驗證正確後,使用LCC將C語言的encoder程式編譯為MIPS組合語言程式,接著修改部分組合語言內容後,使用PCSpim驗證經由LCC編譯的MIPS組合語言程式是否正確,驗證正確後再將PCSpim所產生的rom與sram擷取出來,放置在使用Verilog HDL撰寫的似MIPS架構上,最後在使用xilinx ise配合modelsim驗證與模擬.



下圖為使用C語言撰寫RSC encoder的執行結果:



下圖為RSC encoder在似MIPS架構下執行的結果:



下圖為使用C語言撰寫puncture所執行的結果:




下圖為puncture在似MIPS架構下執行的結果:


下圖為使用matlab所執行出來的結果:



下圖為使用C語言所執行出來的結果:



下圖為使用似MIPS架構所執行出來的結果:








2008年7月6日 星期日

Implementation of a RSC Encoder Using C Program

使用C語言實現一個RSC Encoder

下圖為一個渦輪碼的編碼器:
訊號在傳送之前,必須經過編碼後再傳送出去.當有訊號要傳送時,輸出端可分為三個部份,一個為將原始訊號輸出;一個為將訊號經過encoder後在輸出;另一個為將訊號經過交錯器後,在進行編碼.


下圖為一個RSC Encoder
RSC encoder與常見的convolution encoder不同在於RSC encoder有一個遞迴的訊號處理.之前所提到的convolution encoder 會在訊號後面加上m個0來清除記憶體內容值,而RSC encoder再訊號輸入端前有一個switch,首先switch會指向u,當訊號編碼完後,switch會接收遞迴的訊號,把遞迴的訊號當成輸入端,在進行編碼。


下圖是從上圖推導出來的,左邊框起來為記憶體的內容值,1~8為自訂的狀態,分別代表記憶體的000~111, u/c 是輸入與輸出的結果,箭頭的指向為下一個狀態,虛線代表輸入0,實線代表輸入1.只要知道訊號原,就可以從此圖推導出輸出值.


下圖為使用matlab所執行出來的結果。index為經過交錯器後所產生新的訊號的位址。en_output為經過RSC encoder 編碼出來的結果。


下圖為使用C語言所執行出來的結果圖,對照matlab的結果可知使用C語言所撰寫的RSC encoder無誤。

2008年5月24日 星期六

測試旋積碼編解碼器正確性

下圖為基本的通訊系統架構:


程式碼如下:

使用C語言實現通訊系統架構,加入本研究撰寫的convolutional Encoder 跟 Viterbi decoder執行過後,將資料放在Matlab上執行,執行結果如下圖:

2008年4月27日 星期日

將convolution code encoder and Viterbi decoder 使用lcc 編譯成可實現在似MIPS處理器上

將先前使用C語言撰寫出來的旋積碼編解碼器,利用Lcc編譯成可在似MIPS架構上執行。

流程圖如下:


使用C語言執行encoder結果:


下圖為由lcc編譯後,經過PCspim產生機器碼,將機器碼放置在似MIPS架構內,執行出來的結果


下圖為Viterbi decoder 演算法的流程圖:



下圖為使用C語言執行後的結果:
下圖為由lcc編譯後,經過PCspim產生機器碼,將機器碼放置在似MIPS架構內,執行出來的結果:

2008年4月19日 星期六

使用C語言實現旋積碼的編解碼器

根據(n,k,m)=(2,1,2)可得知為2 output, 1 input , 2 memory
根據接線可得知
g(1)=101
g(2)=111
有接線為1 無則為0

下圖為Encoder for (2,1,2)convolutional code

根據上圖可求出下列狀態機

根據狀態機可求出格狀圖,裡面記載所有的輸入輸出資料


下圖為使用C語言撰寫encoder的流程圖



下圖為執行結果


下圖為Viterbi decoding 流程圖:



下圖為HDD流程圖:

下圖為手動運算的步驟:


由下圖可求出最小漢明距離,以及必須刪除的部份

下圖為最後的解碼結果

使用C語言執行後的結果如下:









2008年3月29日 星期六

輸出HEX檔

此程式可從PCspim.log檔中截取出 ROM SRAM HEX檔
主程式流程圖如下:

下圖為兩個副程式的流程圖:

以下為HEX格式的標準:
第一部分為存放的機器碼共有幾個BYTE
第二部份為位址線
第三部份為有無資料的檢查碼,有資料為00 ,沒有資料為01
第四部份為機器碼
第五部份為檢查碼(Checksum值)
hex檔最後必須加上 :00000001FF 使燒錄器知道檔案結束

Checksum的算法

HEX檔的流程圖:


只用Visua C++ 6.0 執行出來hex.hex檔

使用燒錄器讀取hex.hex檔後的結果




2008年3月17日 星期一

Keil C小程式轉換至似MIPS測試結果

將Keil C跑馬燈程式轉換至似MIPS架構上,
流程圖如下


下圖為Keil C跑馬燈程式



經過部分修改過後即可在Visal C++上執行跑馬燈程式

執行結果如下圖:

將C語言跑馬燈程式透過LCC compiler為MIPS組合語言的跑馬燈程式
使用PCSpim測試正確後,將機器碼放置在似MIPS架構的記憶體內,使用ModelSim執行
模擬結果如下: