Verilog功能模块——降采样

article/2025/9/24 23:20:46

一. 模块功能与应用场景

模块功能:对输入信号进行降采样。

应用场景:

  • 输入数据量太大,后级难以处理,需要减小信号量而不丢失关键信息

二. 模块框图与使用说明

downSampling

参数DOWN_SAMPLING_TIME控制降采样倍数,参数DIN_WIDTH控制输入信号位宽。

注意:

  1. din与din_valid应对齐
  2. clk应就是din与din_valid产生的时钟,这是为了保证一个有效数据din_valid只持续一个时钟周期的高电平

三. 模块代码

/** @Author       : Xu Dakang* @Email        : XudaKang_up@qq.com* @Date         : 2021-04-21 15:02:16* @LastEditors  : Xu Dakang* @LastEditTime : 2021-05-05 15:44:39* @Filename     : downSampling.sv* @Description  : 降采样模块
*//*
* 思路: 对din_valid进行计数,到达DOWN_SAMPLING_TIME输出一次值
* 注意:1.din与din_valid应对齐2.clk应就是din与din_valid产生的时钟,这是为了保证一个有效数据din_valid只持续一个时钟周期的高电平
*/module downSampling
#(parameter DOWN_SAMPLING_TIME = 10, // 降采样倍数parameter DIN_WIDTH = 24
)(output logic [DIN_WIDTH-1 : 0]  down_sampling_dout,output logic                    down_sampling_dout_valid,input  logic [DIN_WIDTH-1 : 0]  din,input  logic                    din_valid,input  logic clk,input  logic rstn
);//< 输入数据同步 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
logic [DIN_WIDTH-1 : 0] din_r1;
logic [DIN_WIDTH-1 : 0] din_r2;
always_ff @(posedge clk) begindin_r1 <= din;din_r2 <= din_r1;
endlogic din_valid_r1;
logic din_valid_r2;
always_ff @(posedge clk) begindin_valid_r1 <= din_valid;din_valid_r2 <= din_valid_r1;
end
//< 输入数据同步 ------------------------------------------------------------//> 信号计数 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
logic [$clog2(DOWN_SAMPLING_TIME+1)-1 : 0] din_valid_cnt;
always_ff @(posedge clk, negedge rstn) beginif (~rstn)din_valid_cnt <= '0;else if (din_valid_r2)if (din_valid_cnt == DOWN_SAMPLING_TIME)din_valid_cnt <= 'd1;elsedin_valid_cnt <= din_valid_cnt + 1'b1;else if (din_valid_cnt == DOWN_SAMPLING_TIME)din_valid_cnt <= '0;elsedin_valid_cnt <= din_valid_cnt;
end
//> 信号计数 ------------------------------------------------------------//> 输出降采样值和有效信号 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
always_ff @(posedge clk, negedge rstn) beginif (~rstn)down_sampling_dout <= '0;else if (din_valid_cnt == DOWN_SAMPLING_TIME)down_sampling_dout <= din_r2;elsedown_sampling_dout <= down_sampling_dout;
endalways_ff @(posedge clk, negedge rstn) beginif (~rstn)down_sampling_dout_valid <= 1'b0;else if (din_valid_cnt == DOWN_SAMPLING_TIME)down_sampling_dout_valid <= 1'b1;elsedown_sampling_dout_valid <= 1'b0;
end
//> 输出降采样值和有效信号 ------------------------------------------------------------endmodule

四. testbench

/** @Author       : Xu Dakang* @Email        : XudaKang_up@qq.com* @Date         : 2021-04-21 15:02:16* @LastEditors  : Xu Dakang* @LastEditTime : 2021-05-05 22:12:07* @Filename     : downSampling_tb.sv* @Description  : testbench of downSampling
*/module downSampling_tb();timeunit 1ns;
timeprecision 10ps;localparam DOWN_SAMPLING_TIME = 10;
localparam DIN_WIDTH = 24;logic [DIN_WIDTH-1 : 0]  down_sampling_dout;
logic                    down_sampling_dout_valid;logic [DIN_WIDTH-1 : 0]  din;
logic                    din_valid;logic clk;
logic rstn;downSampling #(.DOWN_SAMPLING_TIME (DOWN_SAMPLING_TIME), // 降采样倍数.DIN_WIDTH          (DIN_WIDTH)
) downSampling_inst(.*);// 导入输入波形文件
string din_path = "F:/OneDrive/VivadoPrj/downSampling/downSampling.srcs/sim_1/new/sinc.txt"; // 可选 sin  exp_cos  sinclocalparam DATA_NUM = 10000; // 数据量, 也就是txt文件的行数, 如果此参数大于数据行数, 读取到的内容为不定态
logic [DIN_WIDTH-1 : 0] din_wave_data [DATA_NUM]; // 读取输入波形数据initial begin$readmemb(din_path, din_wave_data, 0, DATA_NUM-1); // vivado读取txt文件
end// 生成时钟
localparam CLKT = 2;
initial beginclk = 0;forever #(CLKT / 2) clk = ~clk;
endinitial beginrstn = 0;din_valid = 0;#(CLKT * 10)  rstn = 1;for (int i = 0; i < DATA_NUM; i++) begindin = din_wave_data[i];din_valid = 1;#(CLKT);end#(CLKT * 10) $stop;
endendmodule

五. 仿真验证

仿真工具:Vivado 2020.2 Simulator。

  1. 输入为sin信号:

    Verilog功能模块-降采样-2
  2. 输入为振荡信号:

    image-20210505155150485
  3. 输入为sinc信号:

    image-20210505155256195

六. 工程分享

downSampling 降采样模块 vivado 2020.2工程.7z。

欢迎大家关注我的公众号:徐晓康的博客,回复以下代码获取。

3659

建议复制过去不会码错字!


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。


http://chatgpt.dhexx.cn/article/df41A0yF.shtml

相关文章

点云降采样

点云处理有时因为数据量太大&#xff0c;我们需要对其进行下采样。 这里的方法是先将点云填入固定大小的三维网格中&#xff0c;然后每个网格中选一个点生成新的点云。 新点云即为下采样后的点云。 这里使用斯坦福兔子作为测试点云。 小兔子pcd下载地址。 原始点云&#xff1a;…

pcl 中的滤波与降采样

目录 pcl filter模块RandomSampleUniformSamplingVoxelGridStatisticalOutlierRemoval filter应用参考完 pcl filter模块 Module filters&#xff1a;https://pointclouds.org/documentation/group__filters.html RandomSample、UniformSampling、VoxelGrid都包含在其中 Rand…

降采样 matlab,改进型64倍降采样数字抽取滤波器的设计与仿真分析

1引言 ∑-△调制器与数字抽取滤波器是∑-△ADC实现16bit以上精度的关键电路模块。∑-△调制器依靠过采样与高阶闭环负反馈控制实现的噪声整形技术,将基带内的量化噪声搬移到高频段,而数字抽取滤波器则将带外高频段的噪声加以滤除,同时将输出频率降低到输入信号的奈奎斯特采样…

降采样滤波器 matlab,降采样FIR滤波器的设计与硬件实现

降采样FIR滤波器的设计与硬件实现 来源:luojiashao 作者:华仔 浏览:2051 时间:2016-08-10 14:18 标签: 摘要: 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计…

OpenCV 图像上采样和降采样

文章目录 相关概念图像金字塔高斯金字塔高斯金字塔的生成过程 高斯不同&#xff08;Difference of Gaussian-DOG&#xff09;&#xff1a;拉普拉斯金字塔 采样相关API上采样(cv::pyrUp) – zoom in 放大降采样 (cv::pyrDown) – zoom out 缩小 代码案例 好了&#xff0c;这次学…

Down-Sampling 降采样(Verilog)

简介 在图像处理领域中&#xff0c;降采样是一个非常常用的图像处理方法&#xff0c;目的是为了在大体上不改变图片的情况下&#xff0c;缩小图像&#xff0c;降低分辨率&#xff0c;减少数据的计算量&#xff0c;生成对应图像的降采样图。本质就是抽取图像数据来降低特征的维度…

关于数字信号处理中的降采样的学习总结

1、参考资料链接 https://baike.baidu.com/item/%E9%99%8D%E9%87%87%E6%A0%B7/6860368?fraladdin https://wenku.baidu.com/view/611009c881eb6294dd88d0d233d4b14e85243e4c.html https://baike.baidu.com/item/%E6%B7%B7%E5%8F%A0 https://blog.csdn.net/shenziheng1/art…

点云降采样(DownSampling)

点云降采样 1 概述 三维点云往往包含大量冗余数据&#xff0c;直接处理计算量大&#xff0c;消耗时间长&#xff0c;因此对其进行降采样是十分必要的。降采样同时也是点云预处理过程中的关键环节。 2 常用方法 2.1 体素网格下采样 2.1.1 原理 体素&#xff08;Voxel&…

对信号做降采样处理时,需要先滤波,后抽取(降采样);升采样操作与之相反

一、对信号做降采样处理时&#xff0c;需要先滤波&#xff0c;后抽取&#xff08;降采样&#xff09;的原因解释&#xff1a; 一句话就能概括&#xff0c;如果抽取时不先做滤波&#xff0c;就会导致信号混叠&#xff0c;这里的滤波器是抗混叠滤波器。 1、如果不滤波&#xff…

数字图像处理--六、图像压缩

目录 1.基本概念 1.1 图像压缩概念及其分类 1.2 数据冗余 1.3 图像信息的度量 1.4 图像保真度准则 (Fidelity Criteria) 1.5 图像压缩模型 2.图像压缩方法 2.1Huffman编码 消除编码冗余 2.2算术编码 (Arithmetic Coding) 消除编码冗余 2.3LZW编码 (Lempel-Ziv-Welch …

图像压缩之算术编码

JPEG中使用了量化、哈夫曼编码等&#xff0c;极大的压缩了图片占用的空间&#xff0c;那么是否可以进一步压缩呢&#xff1f; 从技术角度讲&#xff0c;是可以的。如DropBox开源的lepton&#xff0c;在目前的JPEG压缩基础上&#xff0c;可以再节省22%左右的空间。 lepton中使用…

数字图像处理——JPEG图像压缩

该文章的代码为数字图像的JPEG压缩模型。最后是我得到的结果。 import numpy as np import matplotlib.pyplot as plt from skimage import ioDC_Y {0: 00,1: 010,2: 011,3: 100,4: 101,5: 110,6: 1110,7: 11110,8: 111110,9: 1111110,10: 11111110,11: 111111110} AC_Y {(0…

JPEG图像压缩

转载自&#xff1a; https://blog.csdn.net/shelldon/article/details/54234433 www.thecodeway.com http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ 一、图像分割 JPEG算法的第一步&#xff0c;图像被分割成大小为8X8的小块&#xff0c;这些小块在整个压缩过程中…

JPEG2000图像压缩算法学习

压缩算法——JPEG2000 编解码原理 JPEG2000-Matlab源码实现 JPEG和JPEG2000 JPEG2000和JEPG都是静止图像压缩标准&#xff0c;最大区别是在空间域至频域转换。JPEG是基于离散余弦变换&#xff08;DCT&#xff09;&#xff0c; 而JEPG2000是基于离散小波变换&#xff08;DWT&a…

图像处理(六)——图像压缩

图像压缩模型图像数据中的冗余 三种数据冗余&#xff1a;编码冗余、像素冗余、视觉心理冗余 如果一个图像的灰度级编码&#xff0c;使用了多于实际需要的编码符号&#xff0c;就称该图像包含了编码冗余。 图像压缩中的信息论观点 字典压缩 有…

图片压缩算法

有损算法&#xff1a; JPEG&#xff0c;我们最为常用的算法。他是通过离散余弦变换&#xff0c;对图片质量尽量小的时候进行有损压缩&#xff0c;改算法对高中波特率下效果很好&#xff0c;但是对低波特率下&#xff0c;就会出现方格之类的&#xff0c;比如100多MB的MPEG电影&…

算法设计与分析——图像的压缩

一、基本概念&#xff1a; 像素灰度值为0-255&#xff0c;需要8位二进制数来存储。若一灰度序列为{p1,p2,p3…pn}&#xff0c;pi为第i个像素点的灰度值。则所需的空间为8n。 二、问题提出&#xff1a; 若图像中有一大部分的颜色的相同的或是相近的&#xff0c;能不能有更好的…

JPEG图像压缩算法的python实现

摘要 文章在研究JPEG压缩编码对图像数据压缩的基本原理的基础上&#xff0c;设计了JPEG图像压缩算法程序实现流程&#xff0c;利用 Python语言对程序进行了编写&#xff0c;并实现了对压缩质量进行控制&#xff0c;验证了JPEG压缩编码对图像数据压缩的可行性。 用 JPEG压缩软件…

基于深度学习的图像压缩

近年来&#xff0c;深度学习在计算机视觉领域已经占据主导地位&#xff0c;不论是在图像识别还是超分辨重现上&#xff0c;深度学习已成为图片研究的重要技术&#xff0c;但它们的能力并不仅限于这些任务&#xff1b;现在深度学习技术已进入图片压缩领域。下面就说说神经网络在…

JPEG压缩算法步骤原理

目录 JPEG压缩算法解密 步骤一&#xff1a;图像分割 步骤二&#xff1a;颜色空间转换RGB->YCbCr 步骤三&#xff1a;离散余弦变换 步骤四&#xff1a;数据量化 步骤五&#xff1a;哈弗曼编码 JPEG压缩算法解密 by jinchao 图片压缩有多重要&#xff0c;可能很多人可能…