資源簡介
差分脈沖編碼調(diào)制算法研究 : 用Matlab實現(xiàn)DPCM算法
,文件包括源碼、運行結(jié)果分析、實驗問報告文檔。該文件演示了DPCM壓縮文件和對文件進行解壓縮的過程以及一些參數(shù)的分析,含有詳細注釋。

代碼片段和文件信息
%?用Matlab實現(xiàn)的DPCM算法實現(xiàn)。
%?351?工程主要執(zhí)行文件
%?該文件演示了DPCM壓縮文件和對文件進行解壓縮的過程。
function?dpcm351
clc
disp(‘?‘)
disp(‘?DPCM?CODING?ELEC?351?PROJECT?1997‘);
disp(‘?By?Justin?Hall?and?Daniel?Moutin‘)
disp(‘?‘);?
%?獲取外界輸入信息,清屏,關(guān)掉窗體
%?外部輸入波形文件的名稱?input351
input351=input(‘Enter?the?Wave?file?name?(ie?‘‘test.wav‘‘)?=>?‘‘s‘);
disp(‘?‘)
%?從外部輸入波形文件在信道上傳輸時每個抽樣點編碼表示時所需的位數(shù)?chanlbits
chanlbits=input(‘Enter?the?Channel?bits?=>?‘‘s‘);
chanlbits=sscanf(chanlbits‘%i‘);
disp(‘?‘)
%?清空屏幕、關(guān)掉當前所開的窗體(比如:運行程序時生成的窗體)
clc
for?i=1:6
close
end?
%?啟動執(zhí)行時間(將當前的時間保存到變量time里面,以供計算時間間隔時用)
time?=?clock;
%?讀入數(shù)據(jù)?(以?[采樣得到的幅值???頻率??(為表示該幅值所要用到的)位數(shù)]?的形式讀入)
[inputsamplefsbits]=wavread(input351);
disp(‘?‘)
samples=size(inputsample);
inputbyte=round((samples*bits)/8);??%?所輸入的波形文件的字節(jié)數(shù)--->原始文件大小?
outbits=bits;??%?保存原始的表示波形文件采樣幅值時所用的位數(shù)
%?clock?-?time??讀文件的時間??????????????
readtime=?etime(clocktime);
%****************
%?開始壓縮文件
%****************?
%?重新設(shè)置變量time的值為剛要開始壓縮文件時的時間(用來后面計算文件壓縮時間用的)
time=clock;?
%?對輸入的波形文件的幅值進行規(guī)格化
maxi=max(abs(inputsample));
norminput=inputsample/maxi;?
%?對輸入的波形文件的幅值進行量化(波形文件的幅值在計算機中用bits個二進制位進行存儲)
step=round(norminput*(2^bits));
qnormin=step/(2^bits);?
%?以下應(yīng)用?DPCM?算法對文件進行壓縮
%?取得輸入信號存儲矩陣的維數(shù)?(?[row?col]?)
dimension=size(qnormin);
%?初始化一數(shù)組?sigrotate?,最后來存放從預(yù)測器出來的一系列的預(yù)測值(對當前樣本的幅值的預(yù)測)
sigrotate=zeros(dimension);?
%?采用一循環(huán)獲得當前所輸入的樣本值的預(yù)測值?(這里我們用上一個樣本的實際值作為當前樣本值的預(yù)測值)
for?i=1:(dimension-1)
sigrotate(i+1)=qnormin(i);
end?
%?當前樣本的實際值?-?預(yù)測值?=?差值?(?即:被壓縮的信號?)?--->?每個元素與它的前一個元素的差值(第一個元素是和0比較的)
dpcmin=qnormin-sigrotate;?
%?對此被壓縮的信號進行規(guī)格化
maxi=max(abs(dpcmin));
normout=dpcmin./maxi;?
%?對此被壓縮的信號進行量化
step=round(normout*(2^bits));
qnormin=step/(2^bits);?
qnormin?=?qnormin?*?128;?%?擴大差值倍數(shù),便于輸出顯示???
%?對被壓縮的波形聲音信號文件進行存儲
fid?=?fopen(‘dpcm.hql‘‘wb‘);
fwrite(fidqnormin‘int4‘);
fclose(fid);
%?計算壓縮文件所用的時間?
comptime=?etime(clocktime);
%*****************
%??解壓
%*****************?
%?重新設(shè)置變量time的值為剛要開始解壓文件時的時間(用來后面計算文件解壓時間用的)
time?=?clock;?
%?恢復差值
qnormin?=?qnormin?/?128;?
%?規(guī)格化差分信號??注:在這里為什么還要再一次對差分信號進行規(guī)格化和量化呢?-->?因為前一步的恢復差值的操作已經(jīng)破壞了原先已經(jīng)規(guī)格化和量化好了的差分信號。
maxi=max(abs(qnormin));
normout=qnormin./maxi;?
%?量化差分信號
step=round(normout*(2^bits));
qnormout=step/(2^bits);?
%?按照以下途徑對文件dpcm.hql進行解壓
%?首先,獲取輸入信號(相對于接收端來說,指差值)的維數(shù)
dimension=size(qnormout);?
%?對差值信號進行解壓
%?初始化一個全零數(shù)組?decodeout(維數(shù)和輸入信號的維數(shù)相同)用來存放解壓完畢后的結(jié)果。
decodeout=zeros(dimension);?
decodeout(1)=qnormout(1);?%?第一個元素比較特殊,差值剛好等于樣本的實際值。
for?i=2:(dimension)
decodeout(i)=decodeout(i-1)+qnormout(i);?%?用前一個值和差值求出下一個值
end?
%?規(guī)格化此解壓過的信號
maxi=max(abs(decodeout));
normout=decodeout./maxi;
%?量化此解壓過的信號
step=round(normout*(2^bits));
qnormout=step/(2^bits);?
%?計算解壓文件所用的時間?
decomptime=?etime(clocktime);
%?計算信號在信道上傳輸?shù)目偟淖止?jié)數(shù)
outputbyte=round((samples*chanlbits)/8);
%******************************************
%?壓縮百分比?信噪比?和?誤差分析??
%******************************************?
%?壓縮百分比
percomp=(1-chanlbits/bits
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????76058??2004-12-28?09:33??dpcm算法研究\dpcm.WAV
?????文件???????8409??2009-10-27?17:53??dpcm算法研究\dpcm315.m
?????文件?????107008??2009-10-26?22:54??dpcm算法研究\演示文稿1.ppt
?????文件??????19000??2010-03-17?14:08??dpcm算法研究\dpcm.hql
?????文件?????253952??2009-11-04?14:00??dpcm算法研究\dpcm文件的運行程序.doc
?????文件??????53248??2009-11-03?20:48??dpcm算法研究\用Matlab實現(xiàn)的DPCM算法實現(xiàn)(注意版本??紅色標記).doc
?????文件??????98497??2010-03-17?13:41??dpcm算法研究\差分脈沖編碼1.rar
?????文件??????21504??2009-10-29?11:01??dpcm算法研究\備忘錄.doc
?????文件?????120832??2009-10-14?16:32??dpcm算法研究\dpcm\dpcm\dpcm.doc
?????文件??????67763??2009-09-27?13:29??dpcm算法研究\dpcm\dpcm\dpcm.docx
?????文件??????16888??2009-10-10?09:36??dpcm算法研究\dpcm\dpcm\dpcm.mdl
?????文件??????42681??2009-10-10?20:44??dpcm算法研究\dpcm\dpcm\dpcm.swf
?????文件??????75264??2009-10-14?16:32??dpcm算法研究\dpcm\dpcm\dpcm壓縮算法.doc
?????文件??????35292??2009-09-29?17:49??dpcm算法研究\dpcm\dpcm\dpcm壓縮算法.docx
?????文件???????9514??2009-09-29?17:39??dpcm算法研究\dpcm\dpcm\matlab實現(xiàn)DPCM編碼.png
?????文件?????563712??2009-10-21?11:10??dpcm算法研究\dpcm\dpcm\SIMUli
?????文件???????2330??2009-10-20?13:58??dpcm算法研究\dpcm\dpcm\壓縮被壓縮.png
?????文件????1554432??2009-10-23?22:21??dpcm算法研究\dpcm\dpcm\差分脈碼調(diào)制(DPCM.ppt
?????文件?????210798??2009-10-10?21:17??dpcm算法研究\dpcm\dpcm\差分脈碼調(diào)制(DPCM.pptx
?????文件?????110080??2009-10-26?19:08??dpcm算法研究\dpcm\dpcm\DPCM原理草稿.doc
?????文件??????26965??2009-10-10?20:23??dpcm算法研究\dpcm\dpcm\圖片庫\1507150.jpg
?????文件??????40586??2009-10-10?20:13??dpcm算法研究\dpcm\dpcm\圖片庫\20081203022117907.jpg
?????文件??????14043??2009-10-10?20:10??dpcm算法研究\dpcm\dpcm\圖片庫\46be7f63490bf7f9e7113a84.jpg
?????文件??????17302??2009-10-10?20:19??dpcm算法研究\dpcm\dpcm\圖片庫\68f5bd586cd336fb9d8204df.jpg
?????文件??????38362??2009-10-10?20:10??dpcm算法研究\dpcm\dpcm\圖片庫\95fe7b5922807ea5800a1885.jpg
?????文件??????61831??2009-10-10?20:18??dpcm算法研究\dpcm\dpcm\圖片庫\a3db43175478ac3c962b435b.jpg
?????文件??????26664??2009-10-10?20:18??dpcm算法研究\dpcm\dpcm\圖片庫\img200811061600121.jpg
?????文件???????5926??2005-11-28?16:19??dpcm算法研究\dpcm\dpcm\差分脈沖編碼\差分脈沖編碼\dpcm351-1.m
?????文件???????6552??2005-11-28?16:23??dpcm算法研究\dpcm\dpcm\差分脈沖編碼\差分脈沖編碼\dpcm351.2.txt
?????文件???????5814??2005-03-23?15:16??dpcm算法研究\dpcm\dpcm\差分脈沖編碼\差分脈沖編碼\dpcm351.m
............此處省略12個文件信息
評論
共有 條評論