一、PDM简介
将信号的振幅变化按比例地变换成脉冲宽度的变化,得到脉冲宽度调制(PDM)。详细的原理理论可以参考该文:文献阅读–Pulse-Width Modulation,本文主要介绍PDM的FPGA实现,PDM的生成方式很多具体形式根据需求会有所不同
二、实验内容
实验设备: ZYNQ7020
2.1 恒频后沿调制
早期的PDM信号通过比较器生成,通过比较锯齿波和输入信号生成
脉冲信号。随着数字信号处理的广泛应用,现在通过一个计数器与数字信号进行比较就可生成脉冲信号。
实验生成PDM信号将采用锯齿波信号作为载波,如图所示:
PDM输出的前导(上升)沿在固定时刻出现,而后导(下降)沿的位置为随着参考信号电平的变化而调制。因此,该方法也称为恒频后沿调制。三角波计数从0开始递增,N时重置为0同时PDM上升沿出现。
module PDM
(Clk,Rst,Din,Do,cnt
);
input Rst,Clk;
input [15:0] Din;
output reg Do;
output reg [9:0] cnt;
reg [9:0] Dtr;
always @(posedge Rst or posedge Clk)beginif(Rst) beginDo<=1'b0;cnt<=10'b0;endelse begincnt<=cnt+1'b1;if (cnt>Dtr)begin //比较生成脉冲Do<=1'b0;endelse beginDo<=1'b1;endif (cnt==1023)begin //计数采样Dtr<=Din[15:7];endend
end
endmodule
实现效果如下图所示
2.2 中心对齐调制(锯齿波形式)
恒频后沿调制使用实验设备测试时,PDM通过滤波器无法正确恢复出PDM信号,将PDM信号生产改为中心对齐的形式。如图所示:
2.3 方法对比
恒沿后沿调制公式
P D M = { 1 c n t ⩽ S p 0 c n t > S p PDM= \begin{cases}1 & cnt \leqslant S_p \\ 0 & cnt>S_p\end{cases} PDM={10cnt⩽Spcnt>Sp
中心对齐调制公式
P D M = { 1 c n t ≥ L o r c n t ⩽ R 0 c n t < L o r c n t > R PDM= \begin{cases}1 & cnt \geq L &or& cnt \leqslant R \\0 & cnt<L &or&cnt>R\end{cases} PDM={10cnt≥Lcnt<Lororcnt⩽Rcnt>R
通过公式可以发现,其实两种方式生成的PDM波形是一致的,脉冲高低电平的宽度是相同的,只是第二种方法将脉冲中心移动到了计数中心点。
三、实验结果
PDM为恒频后沿调制,PDM2为中心对齐调制
总结
通过查资料发现载波使用三角波并进行规则采样PDM信号应该也是中心对齐的,实验的对齐方式实现仍使用锯齿载波,但在PDM判断采样上做了处理。但是实测后发现中心对齐方法脉冲并非完全对称,实际FPGA中Sp是数字信号比如实验中的16bit信号,压缩到1024的范围进行比较实际只需用到10bit,这时在生成L和R两个比较值可能会产生+1差值,无法实现公式中的完全对称,该情况输出脉冲右半边会比左半边多一个时钟周期,可以通过降低采样位数统一Sp位数去解决但是损失一定精度。