matlab解码求助
答案:2 悬赏:0
解决时间 2021-02-10 09:26
- 提问者网友:一人心
- 2021-02-10 05:27
matlab解码求助
最佳答案
- 二级知识专家网友:废途浑身病态
- 2021-02-10 06:31
1.PCM 编码实现(M函数)
function code=PCMcoding(Range,S)搜索
code=zeros(1,8);
Normalization=abs(S)/Range;
deta=1/2048;
if sign(S)==1
code(1)=1;
else
code(1)=0;
end
detas=ceil(Normalization/deta);
if detas>128
code(2)=1;
if detas>512
code(3)=1;
if detas>1024
code(4)=1;
end
elseif detas>256
code(4)=1;
end
elseif detas>32
code(3)=1;
if detas>64
code(4)=1;
end
elseif detas>16
code(4)=1;
end
Tribal=bin2dec(num2str(code(2:4)))+1;
if Tribal==1
Interval=1;
else Interval=(2^(Tribal+2))/16;
end
if Tribal==1
code(5)=(2^3)*Interval
code(6)=code(5)*(2^3)*Interval+(2^2)*Interval
code(7)=code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+(2^1)*Interval
code(8)=code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+(2^0)*Interval
else
code(5)=2^(Tribal+2)+(2^3)*Interval
code(6)=2^(Tribal+2)+code(5)*(2^3)*Interval+(2^2)*Interval
code(7)=2^(Tribal+2)+code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+(2^1)*Interval
code(8)=2^(Tribal+2)+code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+(2^0)*Interval
end
2。PCM 解码实现(M函数)
%PCM Decoding
function S=PCMdecoding(Range,code)
deta=Range/2048;
Tribal=bin2dec(num2str(code(2:4)))+1;
if Tribal==1
Interval=1;
else Interval=(2^(Tribal+2))/16;
end
if Tribal==1
S=code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+code(8)*(2^0)*Interval+Interval;
else
S=2^(Tribal+2)+code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+code(8)*(2^0)*Interval+Interval;
end
S=S*deta;
function code=PCMcoding(Range,S)搜索
code=zeros(1,8);
Normalization=abs(S)/Range;
deta=1/2048;
if sign(S)==1
code(1)=1;
else
code(1)=0;
end
detas=ceil(Normalization/deta);
if detas>128
code(2)=1;
if detas>512
code(3)=1;
if detas>1024
code(4)=1;
end
elseif detas>256
code(4)=1;
end
elseif detas>32
code(3)=1;
if detas>64
code(4)=1;
end
elseif detas>16
code(4)=1;
end
Tribal=bin2dec(num2str(code(2:4)))+1;
if Tribal==1
Interval=1;
else Interval=(2^(Tribal+2))/16;
end
if Tribal==1
code(5)=(2^3)*Interval
code(5)=2^(Tribal+2)+(2^3)*Interval
2。PCM 解码实现(M函数)
%PCM Decoding
function S=PCMdecoding(Range,code)
deta=Range/2048;
Tribal=bin2dec(num2str(code(2:4)))+1;
if Tribal==1
Interval=1;
else Interval=(2^(Tribal+2))/16;
end
if Tribal==1
S=code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+code(8)*(2^0)*Interval+Interval;
else
S=2^(Tribal+2)+code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+code(8)*(2^0)*Interval+Interval;
end
S=S*deta;
全部回答
- 1楼网友:野性且迷人
- 2021-02-10 06:44
我做过一个。
编码:
% b1; %%%输入代码中出现的字符,按ascii排序
% m1; %%%b1中字符在codes中首次出现的位置
% n1; %%%codes中字符在b1中出现的位置
function coding_callback(incodes)
global decod
clc;
digits(16);%%设置输出编码的小数点位数
incodes=input('please input the encoding string:\n','s');
incodes=['state tree'];
[b1, m1, n1] = unique(incodes, 'first');
incodes(sort(m1));
length(b1);
for ii=1:length(b1)
a(ii)=length(find(n1(1:end)==ii));
rate(ii)=a(ii)/length(n1); %%%b1中每个字符出现的概率区间
low1(1)=0; %%%b1区间下限
high1(1)=rate(1); %%%b1区间上限
if ii>1
low1(ii)=high1(ii-1);
high1(ii)=low1(ii)+rate(ii);
end
end
% high1 %%%每个字符的上限
% low1 %%%每个字符的下限
% rate %%%每个字符所占有比例
%%%%%算术编码过程%%%%%%
judge=n1(1);
rang(1)=high1(judge)-low1(judge);
low(1)=low1(judge);
high(1)=high1(judge);
for jj=2:length(incodes)
judge=n1(jj);
low(jj)=low(jj-1)+low1(judge).*rang(jj-1); %%%%codes中第jj个字符编码后的下限
high(jj)=low(jj-1)+high1(judge).*rang(jj-1); %%%%codes中第jj个字符编码后的上限
rang(jj)=high(jj)-low(jj); %%%%codes中第jj个字符编码后的区间
end
r=vpa(rang);
x=vpa(low(length(incodes)));
y=vpa(high(length(incodes)));
decod=(x+y)./2
set(decod,'string',num2str(decod));
save code.mat x y r decod low1 high1 b1 incodes rate
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯