求助能够实现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

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存