您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > SPIHT-matlab的实现
精细扫描程序functionRn=refinement(N,LSP_Old)%函数REFINEMENT()为精细编码程序,对上一级编码产生的重要系数列表LSP_Old,读取每个%表项相应小波系数绝对值的二进制表示,输出其中第N个重要的位,即相应于2^N处的码数%输入参数:N——本级编码阈值的指数%LSP_Old——上一级编码产生的重要系数列表%输出参数:Rn——精细扫描输出位流globalMat%Mat是输入的小波分解系数矩阵,作为全局变量,在编码的相关程序中使用Rn=[];%每级精细扫描开始时,Rn均为空表%LSP_Old非空时才执行精细扫描程序if~isempty(LSP_Old)rlsp=size(LSP_Old,1);%获取LSP_Old的表项个数,对每个表项进行扫描forr=1:rlsptMat=Mat(LSP_Old(r,1),LSP_Old(r,2));%读取该表项对应的小波系数值[biLSP,Np]=fracnum2bin(abs(tMat),N);%函数FRACNUM2BIN()根据精细扫描对应的权位N,将任意的十进制正数转换为二进制数,%输出参数为二进制表示列表biLSP和权位N与最高权位的距离Np。Rn=[Rn,biLSP(Np)];%biLSP(Np)即为小波系数绝对值的二进制表示中第N个重要的位endend十进制数转换为二进制表示的程序function[binlist,qLpoint]=fracnum2bin(num,qLevel)%函数FRACNUM2BIN()根据精细扫描对应的权位N,将任意的十进制正数转换为二进制数,%包括带有任意位小数的十进制数。Matlab中的函数dec2bin()、dec2binvec()只能将十%进制数的整数部分转换为二进制表示,对小数部分则不转换。%%输入参数:num——非负的十进制数%qLevel——量化转换精度,也可以是精细扫描对应的权位N%输出参数:biLSP——二进制表示列表%Np——权位N与最高权位的距离,N也是本级编码阈值的指数intBin=dec2binvec(num);%首先用Matlab函数dec2binvec()获取整数部分的二进制表示intBin,低位在前,高位在后intBin=intBin(end:-1:1);%根据个人习惯,将二进制表示转换为高位在前,低位在后lenIB=length(intBin);%求出二进制表示的长度decpart=num-floor(num);%求出小数部分decBin=[];%小数部分的二进制表示初始化为空表%根据量化精度要求输出总的二进制表示列表if(qLevel+1)lenIB%如果量化精度高于整数部分的二进制码长,则输出为零值列表binlist=zeros(1,qLevel+1);qLpoint=1;elseifqLevel=0%如果量化精度在整数权位,则输出整数部分的二进制表示intBin%不需转换小数部分,同时输出量化精度与最高权位的距离Npbinlist=intBin;binlist(lenIB-qLevel+1:end)=0;qLpoint=lenIB-qLevel;elseifqLevel0%如果量化精度在小数权位,则需转换小数部分N=-1;whileN=qLevel%小数部分的转换只需进行到量化精度处res=decpart-2^N;ifres==0decBin=[decBin,1];decBin(end+1:-qLevel)=0;%如果小数部分的转换完成时仍未达到量化精度所在的权位,则补零break;elseifres0decBin=[decBin,1];decpart=res;N=N-1;elsedecBin=[decBin,0];N=N-1;endendbinlist=[intBin,decBin];qLpoint=lenIB-qLevel;%输出整数部分和小数部分的二进制表示intBin,decBin,以及量化精度与最高权位的距离Npend
本文标题:SPIHT-matlab的实现
链接地址:https://www.777doc.com/doc-5486929 .html