求助能够实现LDPC编译码的c语言程序,急用,谢谢!

求助能够实现LDPC编译码的c语言程序,急用,谢谢!,第1张

我回答你的问题啊!呵呵,你怎么不给分啊????实验命令:clcclear all

N=input('N=')%输入信源符号的个数

s=0l=0H=0

for i=1:N

fprintf('第%d个',i)

p(i)=input('p=')%输入信源符号概率分布矢量,p(i)<1

if p(i)<=0

error('不符合概率分布')

end

s=s+p(i)

H=H+(- p(i)*log2(p(i)))%计算信源信息熵

end

if (s<=0.999999||s>=1.000001)

error('不符合概率分布')

end

tic

for i=1:N-1 %按概率分布大小对信源排序

for j=i+1:N

if p(i)<p(j)

m=p(j)p(j)=p(i)p(i)=m

end

end

end

x=f1(1,N,p,1)

for i=1:N %计算平均码长

L(i)=length(find(x(i,:)))

l=l+p(i)*L(i)

end

n=H/l%计算编码效率

fprintf('按概率降序排列的码字:\n')

disp(x) %显示按概率降序排列的码字

fprintf('平均码长:\n')

disp(l)% 显示平均码长

fprintf('信源信息熵:\n')

disp(H)%显示信源信息熵

fprintf('编码效率:\n')

disp(n) %显示编码效率

fprintf('计算耗时time= %f\n',toc)

再建立两个M文件:%函数f1存放于f1.m

function x=f1(i,j,p,r)

global x

x=char(x)

if(j<=i)

return

else

q=0

for t=i:j %对于区间[i,j]自上而下求累加概率值

q=p(t)+qy(t)=q

end

for t=i:j%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组

v(t)=abs(y(t)-(q-y(t)))

end

for t=i:j

if(v(t)==min(v)) %求该数组中最小的一个值来确定分界点位置

for k=i:t%赋值码字

x(k,r)='0'

end

for k=(t+1):j

x(k,r)='1'

end

d=t

f1(i,d,p,r+1)%递归调用及相互调用

f2(d+1,j,p,r+1)

f1(d+1,j,p,r+1)

f2(i,d,p,r+1)

else

end

end

end

return第二个:%函数f2存放于f2.m

function x=f2(i,j,p,r)

global x

x=char(x)

if(j<=i)

return

else

q=0

for t=i:j %对于区间[i,j]自上而下求累加概率值

q=p(t)+qy(t-i+1)=q

end

for t=1:j-(i-1)%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组

v(t)=abs(y(t)-(q-y(t)))

end

for t=1:j-(i-1)

if(v(t)==min(v)) %求该数组中最小的一个值来确定分界点位置

d=t+i-1

for k=i:d %赋值码字

x(k,r)='0'

end

for k=(d+1):j

x(k,r)='1'

end

f2(d+1,j,p,r+1)%递归调用及相互调用

f1(i,d,p,r+1)

f2(i,d,p,r+1)

f1(d+1,j,p,r+1)

else

end

end

end

return

#include <iostream>

#include <limits>

#define LNODE 20

using namespace std

#include <malloc.h>

#include <conio.h>

typedef char **HuffmanCode

HuffmanCode HuffmanCoding(int n)

{

int i , f , start , j , count = 1

char *cd

HuffmanCode HC

HC = (HuffmanCode)malloc((n+1)*sizeof(char *))

cd = (char *)malloc(n*sizeof(char))

cd[n-1] = '\0'

for(i = 1 i <= n i++)

{

start = n - 1

for(j = 1 j <= count j++){

cd[--start] = '9'

}

HC[i] = (char *)malloc((n-start)*sizeof(char))

strcpy(HC[i],&cd[start])

count++

}

free(cd)

return(HC)

}//HuffmanCoding

int main()

{

int k

int A[LNODE]

HuffmanCode q

q = HuffmanCoding(LNODE)

for(k = 1 k <= LNODE k++)

cout <<*q[k] <<" "

cout <<"OK"

getch()

return 0

}

任何一个(n,k)分组码,如果其信息元与监督元之间的关系是线性的,即能用一个线性方程来描述的,就称为线性分组码。

低密度奇偶校验码图(LDPC码)本质上是一种线形分组码,它通过一个生成矩阵G将信息序列映射成发送序列,也就是码字序列。对于生成矩阵G,完全等效地存在一个奇偶校验矩阵H,所有的码字序列C构成了H的零空间 (null space),即。

LDPC仿真系统图DLPC 码的奇偶校验矩阵H是一个稀疏矩阵,相对于行与列的长度,校验矩阵每行、列中非零元素的数目(我们习惯称作行重、列重)非常小,这也是LDPC码之所以称为低密度码的原因。由于校验矩阵H的稀疏性以及构造时所使用的不同规则,使得不同LDPC码的编码二分图(Taner图)具有不同的闭合环路分布。而二分图中闭合环路是影响LDPC码性能的重要因素,它使得LDPC码在类似可信度传播(Belief ProPagation)算法的一类迭代译码算法下,表现出完全不同的译码性能。

当H的行重和列重保持不变或尽可能的保持均匀时,我们称这样的LDPC码为正则LDPC码,反之如果列、行重变化差异较大时,称为非正则的LDPc码。研究结果表明正确设计的非正则LDPC码的性能要优于正则LDPC。根据校验矩阵H中的元素是属于GF(2)还是GF(q)(q=2p),我们还可以将LDPC码分为二元域或多元域的LDPC码。研究表明多元域LDPC码的性能要比二元域的好。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11911591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存