资源简介
差分脉冲编码调制算法研究 : 用Matlab实现DPCM算法
,文件包括源码、运行结果分析、实验问报告文档。该文件演示了DPCM压缩文件和对文件进行解压缩的过程以及一些参数的分析,含有详细注释。
代码片段和文件信息
% 用Matlab实现的DPCM算法实现。
% 351 工程主要执行文件
% 该文件演示了DPCM压缩文件和对文件进行解压缩的过程。
function dpcm351
clc
disp(‘ ‘)
disp(‘ DPCM CODING ELEC 351 PROJECT 1997‘);
disp(‘ By Justin Hall and Daniel Moutin‘)
disp(‘ ‘);
% 获取外界输入信息,清屏,关掉窗体
% 外部输入波形文件的名称 input351
input351=input(‘Enter the Wave file name (ie ‘‘test.wav‘‘) => ‘‘s‘);
disp(‘ ‘)
% 从外部输入波形文件在信道上传输时每个抽样点编码表示时所需的位数 chanlbits
chanlbits=input(‘Enter the Channel bits => ‘‘s‘);
chanlbits=sscanf(chanlbits‘%i‘);
disp(‘ ‘)
% 清空屏幕、关掉当前所开的窗体(比如:运行程序时生成的窗体)
clc
for i=1:6
close
end
% 启动执行时间(将当前的时间保存到变量time里面,以供计算时间间隔时用)
time = clock;
% 读入数据 (以 [采样得到的幅值 频率 (为表示该幅值所要用到的)位数] 的形式读入)
[inputsamplefsbits]=wavread(input351);
disp(‘ ‘)
samples=size(inputsample);
inputbyte=round((samples*bits)/8); % 所输入的波形文件的字节数--->原始文件大小
outbits=bits; % 保存原始的表示波形文件采样幅值时所用的位数
% clock - time 读文件的时间
readtime= etime(clocktime);
%****************
% 开始压缩文件
%****************
% 重新设置变量time的值为刚要开始压缩文件时的时间(用来后面计算文件压缩时间用的)
time=clock;
% 对输入的波形文件的幅值进行规格化
maxi=max(abs(inputsample));
norminput=inputsample/maxi;
% 对输入的波形文件的幅值进行量化(波形文件的幅值在计算机中用bits个二进制位进行存储)
step=round(norminput*(2^bits));
qnormin=step/(2^bits);
% 以下应用 DPCM 算法对文件进行压缩
% 取得输入信号存储矩阵的维数 ( [row col] )
dimension=size(qnormin);
% 初始化一数组 sigrotate ,最后来存放从预测器出来的一系列的预测值(对当前样本的幅值的预测)
sigrotate=zeros(dimension);
% 采用一循环获得当前所输入的样本值的预测值 (这里我们用上一个样本的实际值作为当前样本值的预测值)
for i=1:(dimension-1)
sigrotate(i+1)=qnormin(i);
end
% 当前样本的实际值 - 预测值 = 差值 ( 即:被压缩的信号 ) ---> 每个元素与它的前一个元素的差值(第一个元素是和0比较的)
dpcmin=qnormin-sigrotate;
% 对此被压缩的信号进行规格化
maxi=max(abs(dpcmin));
normout=dpcmin./maxi;
% 对此被压缩的信号进行量化
step=round(normout*(2^bits));
qnormin=step/(2^bits);
qnormin = qnormin * 128; % 扩大差值倍数,便于输出显示
% 对被压缩的波形声音信号文件进行存储
fid = fopen(‘dpcm.hql‘‘wb‘);
fwrite(fidqnormin‘int4‘);
fclose(fid);
% 计算压缩文件所用的时间
comptime= etime(clocktime);
%*****************
% 解压
%*****************
% 重新设置变量time的值为刚要开始解压文件时的时间(用来后面计算文件解压时间用的)
time = clock;
% 恢复差值
qnormin = qnormin / 128;
% 规格化差分信号 注:在这里为什么还要再一次对差分信号进行规格化和量化呢?--> 因为前一步的恢复差值的操作已经破坏了原先已经规格化和量化好了的差分信号。
maxi=max(abs(qnormin));
normout=qnormin./maxi;
% 量化差分信号
step=round(normout*(2^bits));
qnormout=step/(2^bits);
% 按照以下途径对文件dpcm.hql进行解压
% 首先,获取输入信号(相对于接收端来说,指差值)的维数
dimension=size(qnormout);
% 对差值信号进行解压
% 初始化一个全零数组 decodeout(维数和输入信号的维数相同)用来存放解压完毕后的结果。
decodeout=zeros(dimension);
decodeout(1)=qnormout(1); % 第一个元素比较特殊,差值刚好等于样本的实际值。
for i=2:(dimension)
decodeout(i)=decodeout(i-1)+qnormout(i); % 用前一个值和差值求出下一个值
end
% 规格化此解压过的信号
maxi=max(abs(decodeout));
normout=decodeout./maxi;
% 量化此解压过的信号
step=round(normout*(2^bits));
qnormout=step/(2^bits);
% 计算解压文件所用的时间
decomptime= etime(clocktime);
% 计算信号在信道上传输的总的字节数
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实现的DPCM算法实现(注意版本 红色标记).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实现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\差分脉码调制(DPCM.ppt
文件 210798 2009-10-10 21:17 dpcm算法研究\dpcm\dpcm\差分脉码调制(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个文件信息
- 上一篇:基于MATLAB的有源三相滤波器的设计
- 下一篇:仓库管理系统access数据库
评论
共有 条评论