脈衝密度調製

脈衝密度調製

脈衝密度調製(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模擬實現
模擬如右圖所示,採樣時間為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信號轉換為串列數據,主時鐘的上升沿代表左聲道的一位數據,下降沿代表右聲道的一位數據。