Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • S student_project_template
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 3
    • Issues 3
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • tutorial
  • student_project_template
  • Wiki
  • final project report

final project report · Changes

Page history
rgly created page: final project report authored Feb 11, 2017 by Chia-Wei Chang's avatar Chia-Wei Chang
Hide whitespace changes
Inline Side-by-side
final-project-report.md 0 → 100644
View page @ 9ae475c6
Error Correction Code Final Project
Reed Solomon Program Design
=============================
在撰寫程式碼的時候,為了要讓程式碼能夠簡潔乾淨。我使用了大量的物件導技巧向來實作這份作業所需要的功能。如GF(64), Polynomial都被我包裝成可支援四則運算的c++ class。實作RS decoder的時候,要比較注意的地方是收到的訊號萬一沒有erasure,σ0(x)=1而不是0,而且當erasure超過R=21的時候,不管有多少的error,σ1(x)都是等於一,所以要提早寫判斷式去早期偵測出這種狀況。
在解碼上是採用time_domain_completion的演算法來計算error pattern,只要實作講義上寫好的Euclid Algorithm,就可以直接算出需要的σ1(x),及ω(x)。當初在計算Error pattern的時候,我一度誤以為ω(x) = rj(x) / rj(0)。所以解碼出來的codeword總是會有固定的差距,查了許久才發覺到那邊應該要是ω(x) = rj(x) / νj(0)
![bit_error_rate](/uploads/d87fbc484f3dc5c35c48e4c24318f2f5/bit_error_rate.png)
上圖為Bit Error Rate的比較圖
部份程式碼,這是測試在GF64 space的物件是否能正常運作。
```cpp
bool GF64::test()
{
bool a = (GF64(35) + GF64(2) == GF64(33));
bool b = (GF64(51) - GF64(17) == GF64(34));
bool c = (GF64(53) * GF64(48) == GF64(9));
bool d = (GF64(42) * GF64(17) == GF64(20));
bool e = (GF64(8) / GF64(34) == GF64(29));
bool f = (GF64(63) / GF64(31) == GF64(4));
bool plus = a & b;
bool mul = c & d;
bool div = e & f;
// 如果那六個等式都成立,則回傳 true
return plus & mul & div;
}
```
Clone repository
  • final project report
  • Home
  • lab1 preview report
  • lab2 preview report