定義
在實際輸出的一位數據流中,只存在“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信號轉換為串列數據,主時鐘的上升沿代表左聲道的一位數據,下降沿代表右聲道的一位數據。