在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MATLAB調用C程序、調試和LDPC譯碼過程詳解

Hx ? 作者:工程師陳翠 ? 2018-07-12 01:49 ? 次閱讀

MATLAB是一個很好用的工具。利用MATLAB腳本進行科學計算也特別方便快捷。但是代碼存在較多循環時,MATLAB運行速度極慢。如果不想放棄MATLAB中大量方便使用的庫,又希望代碼能迅速快捷的運行,可以考慮將循環較多的功能采用C編寫,MATLAB調用。本文將概述這一過程。雖然本文以LDPC譯碼算法為例,但不懂該算法不影響本文閱讀。

1. 起因

最開始用MATLAB寫的LDPC譯碼算法中,其中一個版本是這里,里面有三重循環,運行速度極慢。后來考慮了MATLAB的向量化操作,通過算法的合理劃分以及內置函數調用,成功將三重循環修改為1層,具體這一版本的代碼可見這里。通過這一手段,函數的運行速度提高了幾倍乃至幾十倍。雖然這一方法下運行速度依舊比不過MATLAB工具箱中的comm.LDPCDecoder,遠比不上利用GPU的comm.gpu.LDPCDecoder,但勝在可明確算法并具有一定擴展性。

起初也注意到可以通過MATLAB調用C程序來加速程序運行,但向量化后的代碼湊活能用,加上有時也可調用更為強大的內置函數,這一想法一直沒有付諸實踐。這幾天想好好整理一下代碼,遂萌發了寫一個C版本譯碼算法的想法。代碼現在的狀態是“能用”,這里把相關經驗總結分析在此。

2. MATLAB調用C程序

這一部分的內容在劉曉輝的matlab調用C程序中已經有較為詳細的介紹了,想要正確調用C程序,關鍵概括為2點。

機器上裝有MATLAB編譯器,可通過在MATLAB命令行窗口輸入mex -setup進行具體設置。

有一個正確的接口子程序mexFunction完成MATLAB和C程序之間的數據轉換和程序調用

這里給出我寫得mexFunction(注意這個代碼寫得不好,沒有任何判斷,沒有健壯性……)

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {

double* llr = (double*)mxGetPr(prhs[0]);

int* rownum = mxGetPr(prhs[1]);

int* colnum = mxGetPr(prhs[2]);

int* trans = mxGetPr(prhs[3]);

double* state = mxGetPr(prhs[4]);

plhs[0] = mxCreateDoubleMatrix(1, state[1], mxREAL);

double* r =mxGetPr(plhs[0]);

ldpcDec( r ,llr, rownum,colnum, trans,state);

}

mexFunction的規范在劉曉輝的matlab調用C程序一文中已有提及,即

nlhs:輸出參數數目

plhs:指向輸出參數的指針

nrhs:輸入參數數目

prhs:指向輸入參數的指針

例如,在matlab命令行中使用

[a,b]=test(c,d,e)

調用mex函數test時,傳給test的這四個參數分別是

2,plhs,3,prhs

其中:

prhs[0]=c

prhs[1]=d

prhs[2]=e

由此可以解釋上述mexFunction,而命令plhs[0] = mxCreateDoubleMatrix(1, state[1], mxREAL) 則定義了一大小為1 × state[1]的矩陣,做為函數的返回值。最后調用的ldpcDec是一個C程序,運行C程序后plhs[0]指向的內存空間存儲的就是滿足要求的計算結果。ldpcDec代碼如下

#include

#include

void ldpcDec(double*r,double* llr, int* rownum, int* colnum, int* trans, double* state){

//列有序,trans為映射關系

//rownum[i]-rownum[i-1],第i+1行的行重

//colnum[i]-colnum[i-1],第i+1列的列重

//state[0]:maxiter state[1]:llr & colnum 長度 state[2] rownum 長度,

//state[3]:H中非零元素個數 state[4]: alpha

double* temp;

double* decodedtemp;

temp = (double*)malloc(sizeof(double)*state[3]);

decodedtemp = (double*)malloc(sizeof(double)*state[3]);

//init

int ii = 0;

for (int i = 0; i

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    186

    文章

    2981

    瀏覽量

    231090
  • C程序
    +關注

    關注

    4

    文章

    255

    瀏覽量

    36156
收藏 人收藏

    評論

    相關推薦

    matlab來仿真turbo編譯碼程序

    matlab來仿真turbo編譯碼程序,有沒有完整的程序及仿真過程
    發表于 04-23 10:22

    怎樣設計基于CMMB系統的LDPC譯碼器?

    低密度奇偶校驗(LowDensityParityCheck,LDPC)碼是由Gallager博士在1962年首次提出來的,由于LDPC碼的誤碼性能能夠逼近香農限,因而在無線通信、衛星通信等領域都得
    發表于 08-23 07:22

    大圍數QC_LDPC碼的譯碼器該怎么設計?

    LDPC碼是近年來發展較快且日趨成熟的一種信道編碼方案,因其具有的優越性能和實用價值而被人們認知,但由于隨機結構的LDPC碼編譯碼器硬件實現較為復雜,具有的準循環特性QC_LDPC碼已
    發表于 09-30 07:19

    LDPC碼與RS碼的聯合迭代譯碼

    針對LDPC碼與RS碼的串行級聯結構,提出了一種基于Chase的聯合迭代譯碼方法。軟入軟出的RS譯碼器與LDPC譯碼器之間經過多次信息傳遞,
    發表于 05-12 21:47 ?22次下載

    IEEE 802.16e中LDPC譯碼器的實現

    面向IEEE 802.16e 中 LDPC 碼,分析了各種譯碼算法的譯碼性能,歸一化最?。∟MS)算法具備較高譯碼性能和實現復雜度低的特點。提出一種基于部分并行方式的
    發表于 08-05 08:46 ?24次下載

    基于LDPC譯碼軟信息的迭代載波恢復

    基于LDPC譯碼軟信息的迭代載波恢復:針對較低信噪比(≤2 dB)下載波恢復難題,該文提出了基于LDPC 軟信息的迭代載波恢復算法。該算法以最大化LDPC 軟信息絕對值的和為準則,對載
    發表于 10-29 13:03 ?18次下載

    LDPC譯碼

    LDPC譯碼LDPC碼是一種線性分組奇偶校驗碼,它采用基于因子圖的置信傳播(Belief Propagation,BP)迭代譯碼算法進行譯碼
    發表于 03-01 17:36 ?2078次閱讀
    <b class='flag-5'>LDPC</b>編<b class='flag-5'>譯碼</b>

    基于最小和高效LDPC譯碼算法

    針對低密度奇偶校驗(LDPC)譯碼算法性能低的問題,提出一種基于最小和的高效譯碼算法。該算法從概率的角度分析消息的傳遞過程中校驗節點的更新過程
    發表于 05-18 18:54 ?0次下載
    基于最小和高效<b class='flag-5'>LDPC</b><b class='flag-5'>譯碼</b>算法

    高速通用LDPC譯碼技術

    香農的學生Gallager首次提出了LDPC碼的概念和完整的譯碼方法,目前LDPC碼正向著高速高增益的方向發展。文中針對目前對高速LDPC譯碼
    發表于 07-26 11:17 ?0次下載

    LDPC C++11版本程序下載

    利用C++仿真了LDPC碼,譯碼采用了基于對數似然比的BP算法。編碼矩陣可以在根文件夾中選擇。
    發表于 03-29 09:22 ?0次下載

    LDPC碼的譯碼停止準則

    提出了一種實用的LDPC譯碼停止準則,利用信息節點的對數概率似然比來控制迭代次數,避開了設置停止準則門限,可以很快判斷出譯碼情況,較其他方法省去了大量繁雜的計算。
    發表于 09-07 19:38 ?10次下載
    <b class='flag-5'>LDPC</b>碼的<b class='flag-5'>譯碼</b>停止準則

    基于FPGA 的LDPC 碼編譯碼器聯合設計

    該文通過對低密度校驗(LDPC)碼的編譯碼過程進行分析,提出了一種基于FPGA 的LDPC 碼編譯碼器聯合設計方法,該方法使編碼器和
    發表于 11-22 07:34 ?4528次閱讀
    基于FPGA 的<b class='flag-5'>LDPC</b> 碼編<b class='flag-5'>譯碼</b>器聯合設計

    c#調用matlab函數

    本文檔內容介紹了基于c#調用matlab函數,供參考
    發表于 04-19 10:53 ?24次下載

    MATLAB程序調試的方法及工具介紹

    MATLAB程序設計之MATLAB程序調試的方法及工具介紹。
    的頭像 發表于 07-13 17:50 ?6917次閱讀
    <b class='flag-5'>MATLAB</b><b class='flag-5'>程序</b><b class='flag-5'>調試</b>的方法及工具介紹

    C調用matlab方法

    C調用matlab方法介紹
    發表于 07-31 10:55 ?0次下載
    主站蜘蛛池模板: 手机看片日韩在线 | 久久天堂网 | 四虎影院久久久 | 亚洲精品久久婷婷爱久久婷婷 | 国产精品一区在线播放 | 色婷婷综合在线 | 日韩精品免费一区二区三区 | 性欧美高清短视频免费 | 二十年等一人小说在线观看 | 最刺激黄a大片免费观看下截 | 欧美一区二区三区高清视频 | 欧美黄色片免费观看 | 色综合天天射 | 伊人久久大线蕉香港三级 | 久久国产精品永久免费网站 | 色姑娘天天干 | 你懂的免费在线 | 女人成午夜大片7777在线 | 天堂中文字幕 | 欧美视频精品在线 | 天天干天天色天天射 | 欧美草逼 | 亚洲一区二区三区免费观看 | 国产精品第九页 | a久久久久一级毛片护士免费 | 深爱激情五月婷婷 | 亚洲一区二区免费 | 狠狠久| 四虎永久在线精品影院 | 亚洲精品亚洲人成毛片不卡 | 日韩成人影院 | 欧美午夜一区 | 国产女在线 | 午夜三级成人三级 | 亚洲精品www| 久久免费视频精品 | 男女爱爱免费 | 国产人人艹 | 欧美涩区| 欧美潘金莲一级风流片a级 欧美片欧美日韩国产综合片 | 美女张开腿让男生桶出水 |