脉冲密度调制

更新时间:2023-12-15 00:22

脉冲密度调制(Pulse Density Modulation),简称PDM,是一种使用二进制数0,1表示模拟信号的调制方式。在PDM信号中,模拟信号的幅值使用输出脉冲对应区域的密度表示。PWM波是PDM波转换频率固定的一种特例,对于一个使用8位长表示的电压信号而言,峰值的1/2处会高低电平各持续一半,即128个时钟周期。在PDM信号中,会在1,0之间每个时钟周期都切换。两种波形的平均值都是50%,但是PDM波切换的更加频繁。对于100%和0的电平信号,两种方式的输出相同。

定义

在实际输出的一位数据流中,只存在“1”和“0”,1的密度越大,代表该区域对应的模拟信号幅值越大,反之,0的密度越大,代表该区域的模拟信号幅值越小。1和0连续转换的区域对应中间幅值。使用低通滤波器将PDM信号滤波后,可以恢复连续的模拟信号波形。

AD转换

PDM数据流是通过sigma-delta调制实现从模拟到离散的编码,在此过程中会使用一位量化器,以使输出非1即0。1和0各自对应波形上升或下降的趋势。在现实世界中,很少有单方向变化的信号,总会存在量化误差,即1、0所表示的信号与实际模拟信号对应的差值,这个误差在sigma-delta电路中,通过回路反馈回来。因此,误差通过反馈,又能影响下一次的量化输出和误差,起到了平滑的作用。

DA转换

把PDM信号解码为模拟信号非常简单:只需要把PDM信号通过一个低通滤波器即可,该方法可行的原因是,低通滤波器能很好地起到平均波形信号的作用。由于原信号的平均幅值被各个时刻的脉冲1、0的密度衡量,因此低通滤波器是解码过程唯一所需的步骤。

代码

matlab仿真实现

仿真如图1所示,采样时间为0.001s,输入信号为正弦波,频率为2*pi,根据Y(z)=E(z)+[X(z)-Y(z)*z^-1]*(1/(1-z^-1)),转换为差分方程,得到y(n)=x(n)+e(n)-e(n-1)

得到的波形为:

matlab代码实现

%Sample demo for Delta modulation

sample_num=200;

n_sample=5;

x_src=0:2*pi/sample_num:n_sample*2*pi;

y_src=sin(x_src);

%y_src(i)与qe(i+1)对应,y_pdm(i)

% Delta modulation-demodulation

%len 表示采样点数

len = length(y_src);

qe(1) = 0;

for i=1:len

if(y_src(i)>=qe(i))

y_pdm(i)=1;

else

y_pdm(i)=-1;

end

qe(i+1)=y_pdm(i)-y_src(i)+qe(i);

end

subplot(2,1,1);plot(y_src,'r');

grid on

title('(red:input signal, green:sin PDM wave)');

ylabel('amplitude');

axis([0 n_sample*sample_num -1 1])

subplot(2,1,2);plot(y_pdm,'g');

grid on

ylabel('amplitude');

axis([0 n_sample*sample_num -1 1])

仿真波形:

应用

PDM是索尼公司SACD所使用的编码方式,名为 Direct Stream Digital。

一些系统会把立体音频的PDM信号转换为串行数据,主时钟的上升沿代表左声道的一位数据,下降沿代表右声道的一位数据。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}