算术编码 matlab

上传人:少*** 文档编号:55249437 上传时间:2022-02-17 格式:DOC 页数:2 大小:20.50KB
返回 下载 相关 举报
算术编码 matlab_第1页
第1页 / 共2页
算术编码 matlab_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述
function y =dectobin(innum,N)%十进制小数转换为二进制数%输入参数为innum和N%innum为输入的十进制小数%N为指定转换后二进制的位数if (innum1)|(N = 0)%判断输入的有效性 disp(error!); return;endcount=0;tempnum=innum;record=zeros(1,N);while(N) count=count+1;%长度小于N if(countN-1) N=0;% return; end tempnum=tempnum*2;%小数转换为二进制,乘2取整 if tempnum1 record(count)=1; tempnum=tempnum-1; elseif(tempnum=1) record(count)=1; N=0;%stop loop else record(count)=0; endend y=record;将上述文件保存为dectobin.m作为接下去主程序的调用,可实现将小数转二进制。与主程序保存在同一文件夹下主程序如下clc;clear all;p=0.3,0.3,0.4; %信源符号概率symbol=a,b,c ; %信源符号,与p相对应 range=1; %区间长度plow=0; %区间低概率端点phigh=0; %区间高概率端点pp=1; %计算当前联合概率symin=input(输入符号串,s);%输入待编码任意长的信号串,只能包含a,b,cn=length(symin);for i=1:n %for循环计算各区间对应的值 if symin(i)=a plow=plow; phigh=plow+range*p(1); range=phigh-plow; pp=pp*p(1); endif symin(i)=b plow=plow+range*p(1); phigh=plow+range*p(2); range=phigh-plow; pp=pp*p(2);endif symin(i)=c plow=plow+range*p(2); phigh=plow+range*p(3); range=phigh-plow; pp=pp*p(3);endend l=ceil(log2(1/pp); %计算所需码长maout=dectobin(plow,l+10);%将区间低概率端点转换成二进制,取比l长十位%dectobin自己写的函数将小于1的小数转换成对应二进制temp=0;for i=l:l+10 %判断是否要只进不舍 if(maout(i)=1) temp=1; endendfor i=1:l if(maout(i)=0) s(1,i)=0; else s(1,i)=1; endendlma=dec2bin(bin2dec(s)+bin2dec(temp),l) %根据temp判断是否向前进位并输出
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!