Simulink中DPCM量化和编码仿真

DPCM编码与解码的介绍

DPCM是差分脉冲编码调制的简称,是一种利用信号样值之间的关联特性进行高效率波形编码的方法。当信号样值序列中邻近样值之间存在明显的关联时,那么样值的差值方差就会比样值本身的方差要小。PCM中直接传输样值本身,而在DPCM中,传输数据为样值的差值,在量化误差不变的条件下,就可以用较少的比特数来表示码字,也就提高了波形编码效率。DPCM编码与解码的仿真在Simulink中的仿真模型如图
Simulink中DPCM量化和编码仿真_第1张图片
该系统的信号发生器产生一个幅度为1,频率为1的正弦波,获得输出图像Scope1,其表达式为 x = sin ⁡ ( 2 π f t ) x=\sin (2\pi ft) x=sin(2πft),通过DPCM编码器,获得输出图像Scope2,再通过DPCM解码器解码,获得输出图像Scope3。通过Scope1与Scope3图像的对比来验证解码后的信号是否和原信号相同。并且在MATLAB中通过代码来验证其正确性。

Simulink仿真设置

在仿真中,我们对DPCM encoder(差分脉冲编码表调制编码器)的主要参数做如下设置:

  • predictor numerator(预测分子)设置为[0.9999]
  • predictor denominator(预测分母)设置为[1]
  • quantization partition(量子化分区)设置为[-0.0848 -0.029 0.0298 0.0853]
  • quantization codebook(量化码本)设置为[-0.06 0.0004 0.058]
  • sample time(采样时间)设置为0.01
    设置结果如图
    Simulink中DPCM量化和编码仿真_第2张图片
    我们对DPCM Decoder(差分脉冲编码表调制解码器)的主要参数做如下设置:
  • predictor numerator(预测分子)设置为[0.9999]
  • predictor denominator(预测分母)设置为[1]
  • quantization codebook(量化码本)设置为[-0.085 -0.03 0.03 0.085]
  • sample time(采样时间)设置为0.01
    设置结果如图
    Simulink中DPCM量化和编码仿真_第3张图片

仿真结果

我们对设置好参数的仿真图进行仿真,系统在信号发生器产生一段正弦波后,将正弦波送入DPCM编码器中,再通过DPCM解码器,得到输出信号。其中Scope1中的图像是信号发生器产生的原正弦波。Scope2中的图像是原正弦波经过DPCM编码器编码后的信号2。Scope3中的图像是信号2经过DPCM解码器解码后恢复的信号。
Simulink中DPCM量化和编码仿真_第4张图片
Simulink中DPCM量化和编码仿真_第5张图片
Simulink中DPCM量化和编码仿真_第6张图片
从仿真结果可以看出,从信号发生器产生的正弦波在经过DPCM的编码与解码后,能够准确的还原出原信号。

在MATLAB中对比验证仿真结果

代码如下:

clf;
clear all;
Ts = 0.001;
t = 0:Ts:10;
x = sin(2*pi*1*t);
delta = 0.4;
D(1+length(t)) = 0;
for k = 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);
end
%原信号
subplot(3,1,1);
plot(t,x);
axis([0 10 -2 2]);
title('原信号');
ylabel('幅度');
xlabel('时间/s');
hold on;
%编码
subplot(3,1,2);
stairs(t,codeout);
axis([0 20*Ts -2 2]);
title('编码输出结果');
ylabel('幅度');
xlabel('时间/s');
%解码
Dr(1+length(t)) = 0;
for k = 1:length(t)
    eq(k) = delta * (2*codeout(k) - 1);
    xr(k) = eq(k) + Dr(k);
    Dr(k+1) = xr(k);
end
subplot(3,1,3);
stairs(t,xr);
hold on;
subplot(3,1,3);
plot(t,x);
title('解码结果和原信号波形对比');
ylabel('幅度');
xlabel('时间/s');

输出结果如图
Simulink中DPCM量化和编码仿真_第7张图片
从MATLAB中的图像结果可以看出,原信号经过DCMP编码再解码之后能够还原出原信号,与Simulink仿真的结果一致。

你可能感兴趣的:(matlab,simulink,信号处理)