?? fracnum2bin.m
字號:
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;
elseif qLevel>=0
% 如果量化精度在整數權位,則輸出整數部分的二進制表示intBin
% 不需轉換小數部分,同時輸出量化精度與最高權位的距離Np
binlist=intBin;
binlist(lenIB-qLevel+1:end)=0;
qLpoint=lenIB-qLevel;
elseif qLevel<0
% 如果量化精度在小數權位,則需轉換小數部分
N=-1;
while N>=qLevel
% 小數部分的轉換只需進行到量化精度處
res=decpart-2^N;
if res==0
decBin=[decBin,1];
decBin(end+1:-qLevel)=0;
% 如果小數部分的轉換完成時仍未達到量化精度所在的權位,則補零
break;
elseif res>0
decBin=[decBin,1];
decpart=res;
N=N-1;
else
decBin=[decBin,0];
N=N-1;
end
end
binlist=[intBin,decBin];
qLpoint=lenIB-qLevel;
% 輸出整數部分和小數部分的二進制表示intBin,decBin,以及量化精度與最高權位的距離Np
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -