降采样数字滤波器-MATLAB建模

article/2025/9/24 21:55:07

用于SD-ADC后级的降采样数字滤波器

说明

第六届集创赛芯海杯赛题对数字滤波器的要求不是很高,记录一下从Matlab搭建模型到Verilog HDL代码实现,到一部分后仿的过程。

Matlab-Simulink搭建模型

降采样数字滤波器由三级组成,第一级CIC抽取滤波器,第二级CIC补偿滤波器,第三级半带滤波器。调用Simulink SD Toolbox中的模块搭建模型。
搭建的模型如图1所示。
降采样滤波器整体结构
图1 降采样滤波器整体结构

从左到右第一个模块为Jittered SineWave,用来产生测试信号。第二级为SubSystem,里面是调制器的模型。本设计的调制器选择四阶前馈单比特量化调制器,OSR=256,子系统里面包含了不同的非理想因素。

CIC Decimation

CIC Decimation就是CIC降采样滤波器模块,其设置如图2所示。
CIC Decimation模块设置图2 CIC Decimation模块设置

设置:

  • Coefficient source:这里选择第一个选项,第二个选项是Filter Object,用的是另一种结构定义的滤波器,将在后面解释;
  • Decimaton factor:降采样率为32;
  • Differential delay:1;
  • Number of sections:5,通常CIC梳状滤波器的section都选为调制器级数+1,所以这里级数是5;
  • Data type specification mode:Full precision,暂时不考虑位数;
  • Rate options:这里选择第一个选项,选择第二个选项的话,需要把前面的buffer去掉,可以正确运行到这一级,但是没办法连接下两级。

注意点:

  • 需要在调制器输出和CIC梳状滤波器中间加一个buffer,否则运行不了,buffer设置Output buffer size为32(即CIC Decimation)的倍数就行;
  • convert可以加也可以不加,如果运行过程中出现错误指明是data type错误就加一个。

CIC Compensation Decimator

CIC Compensation Decimator是CIC补偿滤波器,其设置如图3所示。
CIC Compensation Decimator模块设置图3 CIC Compensation Decimator模块设置

设置:

  • CIC filter to be compensated的设置和上面一样,用来描述补偿的滤波器;
  • Decimation factor:设置为2,因为降采样率为2;
  • Minimum order filter design:勾选就生成满足要求的最小阶数滤波器;
  • Passband edge frequency:设置通带;
  • Stopband edge frequency:设置阻带,这里没必要设置成1100左右的数,因为后级半带滤波器会进一步降采样,通带会变窄,这里如果过渡带设置得太小,会导致阶数过高,浪费资源;
  • Passband ripple,Stopband attenuation:波纹以及衰减,通常都是这两个数;
  • Input sample rate:调制器输出信号频率/32(上一级filter的降采样率)=这一级的输入采样率。

注意点:

  • 同样地,在CIC Decimation模块和CIC Compensation Decimator模块之间要加一个buffer,否则运行不了,buffer设置Output buffer size为2的倍数。

FIR Halfband Decimator

FIR Halfband Decimator就是半带滤波器,其设置如图4所示。
半带设置
图4 FIR Halfband Decimator模块设置

设置:

  • Transition width:200,过渡带带宽设置为200Hz;
  • Stopband attenuation:阻带衰减;
  • Input sample rate:调制器输出信号频率/64。

注意点:

  • 同样地,在FIR Halfband Decimator模块和CIC Compensation Decimator模块之间要加一个buffer,否则运行不了,buffer设置Output buffer size为2的倍数。

Simulink模型运行结果

下图显示的是Scope的时序输出,相移以及每个周期波形不一致是正常的。
Scope输出图5 Scope时序输出

下图为调制器输出PSD图。
调制器输出PSD
图6 调制器输出PSD图

下图是数字滤波器最后一级(半带滤波器)输出数据的PSD图。
输出PSD
图7 输出数据PSD图

注意点:

  • PSD参数设置(如图8所示):
    –Scope Number:用来设置每个PSD的编号;
    –Sampling Frequency:输入信号频率,每一级要相应改变,这里显示的是调制器输出信号的采样频率,在MATLAB中有定义;
    –Lower Band Bound:关心的频率范围的左边界,设置为0;
    –Upper Band Bound:关心的频率范围的右边界,最后输出的信号最大频率是1000Hz,所以是1000Hz;
    –Signal Frequency:信号发生(Jitter Sine Wave)的频率;
    –Number of FFT Points:FFT点数:取2^N,通常取256,512,1024……
    –Number of Transient Points:舍弃点数,这个越到后级舍弃的越多,因为滤波器在计算时会有一些没用的点,不舍弃结果会变差,需要试一下。

PSD设置
图8 PSD设置

数据处理

因为用verilog实现的时候不能用小数实现,所以要对得到的滤波器系数进行放大,但要在资源和精度之间折衷。这里用MATLAB 代码实现各个模块,然后对其参数进行调整后用Simulink中的模型实现新的滤波器,对比得到的滤波器功能是否符合要求。
先大概介绍一下用到的信息从哪找:

  1. 以图3为例,点击右下角的View Filter Respond,能得到对应的响应图,如图9所示为CIC补偿滤波器的响应。红色方框里面的选项可以查看相应的信息,这里主要关注滤波器系数,点击后得到图10。
  2. 点图3界面的帮助键,会跳转到官方提供的帮助文档,每一个模块其实都对应一个函数,可以在帮助文档中找到用的是哪个函数,转移到MATLAB中实现更方便处理参数。图3用的函数是dsp.CICCompensationDecimator。
    响应图9 CIC补偿滤波器响应

CICcom系数
图10 CIC补偿滤波器系数

MATLAB实现

用dsp.CICCompensationDecimator先生成对应的参数结构体,然后再进行扩大取整。

fs_ciccom = 8e3;
fPass_ciccom = 900;
fStop_ciccom = 3e3;CICCompDecim1 = dsp.CICCompensationDecimator('CICDifferentialDelay', 1,...'CICNumSections',5,...'CICRateChangeFactor', 32,...'DecimationFactor',2,...'PassbandFrequency',fPass_ciccom, ...'PassbandRipple', 0.01, ...'StopbandFrequency',fStop_ciccom,...'StopbandAttenuation', 100, ...'SampleRate',fs_ciccom);
%   fvtool(CICCompDecim1,'Analysis','freq');
coff_compen = coeffs(CICCompDecim1);
coff_ciccom = coff_compen.Numerator;
coff_ciccom_round = round(coff_ciccom * 2^11);

coff_ciccom_round就是处理过数据的参数,其结果是18个整数,用来生成滤波器。

Simulink实现

在Simulink中使用FIR Decimation模块并按照图11所示设置参数。
FIR设置图11 FIR Decimation模块设置

对应的Filter Respond如图12所示。
FIR响应图12 FIR Decimation响应

可以看到和图9有不一致的地方。同理将半带滤波器也用FIR Decimation模块代替(CIC梳状滤波器不需要的原因是它的系数都是±1,不需要处理),得到的可以用Verilog代码实现的滤波器参数。将CIC Compensation Decimator和半带滤波器模块用FIR Decimator代替,得到的结构如图13所示。运行后得到的PSD输出如图14所示。
总体结构图13 参数调整后的整体结构

PSD输出2
图14 输出PSD图

可见,相较于图7的17.11dB的ENOB,17.04dB只下降了一点,在可接受范围内,但是这样FIR Filter的系数较大,Verilog实现的时候要位宽较大的寄存器存储数据,可以继续调整系数大小,在可接受范围内使其所需资源减少。


http://chatgpt.dhexx.cn/article/0YpgwEYL.shtml

相关文章

Matlab | 滤波降采样操作

文章目录 仿真代码仿真结果仿真结论 仿真代码 close all;clear;clc; fs16000;fs_j2000;f0100;t0:1/fs:10; s_k sin(2*pi*f0*t); s_k_d lowpass(s_k,1000,fs); s_k_j resample(s_k_d,1,8); windowLen 2^ceil(log2(fs)); windowLen1 2^ceil(log2(fs_j)); s1 s_k(1,1:windo…

python图像降采样,【图像处理】——改变图像的大小(降采样重采样)

目录 我们常常需要将图片变成一样大小的图片,这样利于整理和批量操作,这时候就需要使用到调整图像的大小了 这里需要使用到的是重采样和降采样,重采样用在拉伸图像上,增加的像素点的像素值是通过插值法来得到的,最常用…

Verilog功能模块——降采样

一. 模块功能与应用场景 模块功能:对输入信号进行降采样。 应用场景: 输入数据量太大,后级难以处理,需要减小信号量而不丢失关键信息 二. 模块框图与使用说明 参数DOWN_SAMPLING_TIME控制降采样倍数,参数DIN_WIDTH控…

点云降采样

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

pcl 中的滤波与降采样

目录 pcl filter模块RandomSampleUniformSamplingVoxelGridStatisticalOutlierRemoval filter应用参考完 pcl filter模块 Module filters: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 图像上采样和降采样

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

Down-Sampling 降采样(Verilog)

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

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

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

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

一、对信号做降采样处理时,需要先滤波,后抽取(降采样)的原因解释: 一句话就能概括,如果抽取时不先做滤波,就会导致信号混叠,这里的滤波器是抗混叠滤波器。 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中使用了量化、哈夫曼编码等,极大的压缩了图片占用的空间,那么是否可以进一步压缩呢? 从技术角度讲,是可以的。如DropBox开源的lepton,在目前的JPEG压缩基础上,可以再节省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图像压缩

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

JPEG2000图像压缩算法学习

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

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

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

图片压缩算法

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

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

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