?? mathencode.m
字號:
%算術編碼
%信源為二元信源,信源序列、碼長均可自定義
clear;
close all;
n=input('信源序列長度n=');
s=input('信源符號序列s=');
P=[input('p(0)=') input('p(1)=')];
F=[0 P(1,1)];%累積分布函數F(0)=0,F(1)=P(0)
Fs=0;As=1;%初始化
for k=1:1:n%信源序列長度
Fs=Fs+As*F(1,s(1,k)+1);%信源序列累積分布函數
As=As*P(1,s(1,k)+1);%信源序列對應的區間寬度
end
L=ceil(abs(log2(1/As)));%編碼后碼長
q=quantizer([3*n,3*n-1]);
c=num2bin(q,Fs);%將累積分布概率轉化為二進制
c_B=c(2:L+1);%取小數點后長度為L的碼字
%判斷L位以后是否有尾數,若有尾數就進位到第L位
c_D=bin2dec(c_B);
c2=c(L+2:3*n);
c2_D=bin2dec(c2);
if c2_D~=0
c_D=c_D+1;
mc_B=dec2bin(c_D,L);
else
mc_B=c_B;
end
disp(mc_B)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -