ZYNQ实验--PDM波形生成

一、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)begin
	if(Rst) begin
		Do<=1'b0;
		cnt<=10'b0;
	end
	else begin
		cnt<=cnt+1'b1;
		if (cnt>Dtr)begin //比较生成脉冲
			Do<=1'b0;
		end
		else begin
			Do<=1'b1;
		end
		if (cnt==1023)begin  //计数采样
			Dtr<=Din[15:7];
		end
	end
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={10cntSpcnt>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={10cntLcnt<LororcntRcnt>R
通过公式可以发现,其实两种方式生成的PDM波形是一致的,脉冲高低电平的宽度是相同的,只是第二种方法将脉冲中心移动到了计数中心点。

三、实验结果

PDM为恒频后沿调制,PDM2为中心对齐调制
在这里插入图片描述

总结

  通过查资料发现载波使用三角波并进行规则采样PDM信号应该也是中心对齐的,实验的对齐方式实现仍使用锯齿载波,但在PDM判断采样上做了处理。但是实测后发现中心对齐方法脉冲并非完全对称,实际FPGA中Sp是数字信号比如实验中的16bit信号,压缩到1024的范围进行比较实际只需用到10bit,这时在生成L和R两个比较值可能会产生+1差值,无法实现公式中的完全对称,该情况输出脉冲右半边会比左半边多一个时钟周期,可以通过降低采样位数统一Sp位数去解决但是损失一定精度。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 02:52:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 02:52:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 02:52:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 02:52:03       18 阅读

热门阅读

  1. 嵌入式学习 Day 31

    2024-03-12 02:52:03       20 阅读
  2. redis进阶以及springboot连接使用redis

    2024-03-12 02:52:03       24 阅读
  3. LeetCode 第 388 场周赛个人题解

    2024-03-12 02:52:03       20 阅读
  4. DDL、DML 和 DQL区分

    2024-03-12 02:52:03       21 阅读
  5. oracle 数据链接过多,导致后续链接链接不上

    2024-03-12 02:52:03       22 阅读
  6. 开发总结12-call、apply、bind区别

    2024-03-12 02:52:03       20 阅读
  7. ZYNQ--GT收发器(TX)

    2024-03-12 02:52:03       20 阅读
  8. PYTHON 120道题目详解(97-99)

    2024-03-12 02:52:03       18 阅读
  9. 把flask 项目部署在windows上步骤

    2024-03-12 02:52:03       18 阅读
  10. flutter无法在windows平台上拖拽文件到它的窗口中

    2024-03-12 02:52:03       16 阅读