DPCM和PCM系统的量化噪声与matlab实现Word下载.doc
《DPCM和PCM系统的量化噪声与matlab实现Word下载.doc》由会员分享,可在线阅读,更多相关《DPCM和PCM系统的量化噪声与matlab实现Word下载.doc(4页珍藏版)》请在冰点文库上搜索。
![DPCM和PCM系统的量化噪声与matlab实现Word下载.doc](https://file1.bingdoc.com/fileroot1/2023-5/7/ce7081b9-aea5-43a8-95a1-9b701cff99dc/ce7081b9-aea5-43a8-95a1-9b701cff99dc1.gif)
根据抽样定理,若x(t)表示信号源发出的样本函数,抽样器以抽样率fs≥fm采得样值,则可以由样值无失真恢复原始信号,这里mf是x(t)频谱中的最高频率。
2)量化
每个信号样值量化成2^L个幅度电平之一,L是样值量化后的二进制位数。
对于均匀量化器,输出电平标定为,对应的输入信号幅度范围是
,这里的Δ是步长,它的值是量化范围与量化级数的商。
图1
3)编码
编码器根据PCM编码规则将量化值数字化。
编码方法也是多种多样的,现有的编码方法中,若按编码的速度来分大致可分为低速编码和高速编码两大类。
通信中一般都采用第二类。
编码器的种类大体上可以归结为3种:
逐次比较型、折叠级联型和混合型。
经过信道传输的二进制码按照与上面3步相反的逆过程进行解码、扩张和滤波得到输出信号。
(2)增量调制(ΔM)是在PCM方式的基础上发展而来的另一种模拟信号数字化的方法。
ΔM可以看成是DPCM的一种简化形式,它们都是用二进制形式去表示模拟信号的方法。
在增量调制方式下,采用1比特量化器,即用1位二进制码传输样值的增量信息,预测器是一个单位延迟器,延迟一个采样时间间隔。
预测滤波器的分子系数向量是[0,1],分母系数为1。
当前样值与预测器输出的前一样值进行比较,如果其差值大于零,则发1码,如果小于零,则发0码。
四、[实验内容]
使用抽样量化编码器和DPCM编码器分别对同一正弦信号进行量化和编码
五、[实验结果]
PCM实验程序代码:
1)连续信号的均匀量化的主程序
t=[0:
0.01:
10];
a=sin(t);
[sqnr8,aquan8,code8]=u_pcm(a,8);
[sqnr16,aquan16,code16]=u_pcm(a,16);
sqnr8%N=8时的信号量化噪声比
sqnr16%N=16时的信号量化噪声比
%信号波形及其量化后的曲线
plot(t,a,'
-'
t,aquan8,'
-.'
t,aquan16,'
t,zeros(1,length(t)));
legend('
信号波形'
'
8电平量化'
16电平量化'
Location'
SouthEast'
)
量化及PCM编码程序
function[sqnr,a_quan,code]=u_pcm(a,n)
amax=max(abs(a));
a_quan=a/amax;
b_quan=a_quan;
d=2/n;
q=d.*[0:
n-1];
q=q-((n-1)/2)*d;
%量化值的计算
fori=1:
n
a_quan(find((q(i)-d/2<
=a_quan)&
(a_quan<
=q(i)+d/2)))=...
q(i).*ones(1,length(find((q(i)-d/2<
=a_quan)&
(a_quan<
=q(i)+d/2))));
b_quan(find(a_quan==q(i)))=(i-1).*ones(1,length(find(a_quan==q(i))));
end
a_quan=a_quan*amax;
%PCM编码
nu=ceil(log2(n));
code=zeros(length(a),nu);
length(a)
forj=nu:
-1:
0
if(fix(b_quan(i)/(2^j))==1)%fix(x)对x向0取整的函数
code(i,(nu-j))=1;
b_quan(i)=b_quan(i)-2^j;
end
end
%SQNR的计算
sqnr=20*log10(norm(a)/norm(a-a_quan));
%norm(a)求a的均方根值
DPCM实验程序代码:
clear;
clc;
Ts=1e-3;
%采样间隔
t=0:
Ts:
20*Ts;
%仿真时间序列
x=2*sin(2*pi*50*t);
%信号
delta=0.4;
%量化阶距
D(1+length(t))=0;
%预测器初始状态
fork=1:
length(t)
e(k)=x(k)-D(k);
e_q(k)=delta*(2*(e(k)>
=0)-1);
%量化器输出
D(k+1)=e_q(k)+D(k);
%延迟器状态更新
codeout(k)=(e_q(k)>
0);
%编码输出
subplot(3,1,1);
plot(t,x,'
-o'
);
axis([020*Ts,-22]);
holdon;
subplot(3,1,2);
stairs(t,codeout);
%解码端
Dr(1+length(t))=0;
%解码端预测器初始状态
length(t)
eq(k)=delta*(2*codeout(k)-1);
%解码
xr(k)=eq(k)+Dr(k);
Dr(k+1)=xr(k);
%延迟器状态更新
subplot(3,1,3);
stairs(t,xr);
%解码输出
plot(t,x);
%原信号