0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的单级cic滤波器设计方案

电子设计 来源:FPGA开源工作室 作者:OpenSLee 2020-12-05 10:21 次阅读

作者: OpenSLee

1 概述

数字信号处理中,CIC滤波器是FIR滤波器中最优的一种,其使用了积分,梳状滤波器级联的方式。

CIC滤波器由一对或多对积分-梳状滤波器组成,在抽取CIC中,输入信号依次经过积分,降采样,以及与积分环节数目相同的梳状滤波器。在内插CIC中,输入信号依次经过梳状滤波器,升采样,以及与梳状数目相同的积分环节。

CIC滤波器的发明者是 Eugene B. Hogenauer,这是一类使用在不同频率的数字信号处理中的滤波器,在内插和抽取中使用广泛。与大多数FIR滤波器不同的是,它有一个内插或者抽取的结构。

1,线性相位响应

2,仅需延迟,加减法便可实现,不需要乘法,在FPGA等平台上易于实现。

2 单级CIC滤波器

CIC滤波器的冲击响应为:

3 设计目标

利用单级CIC滤波器将采样率为352.8KHZ的1khz sin波向下降采样率到44.1khz的1khz sin波(8倍抽取)。

1,matlab设计验证

2,FPGA verilog设计验证。

4 matlab设计验证

%Single CIC
%352.8khz sample rate down to 44.1khz sample rate
close all
clc
clear all

%参数定义
FS =352800; %Sample rate Frequncy
fc = 1000; %1khz
N = 1024;
Q = 16;
M= 8;
D = 8;
t =0:2*pi/FS:2*pi*(N-1)/FS;%时间序列

%波形产生
sin_osc =sin(t*fc); 
%滤波器系数
b=ones(1,M);
a = 1;

%8倍抽值处理
sf=filter(b,a,sin_osc);     
sm =sf./M;
sd=sm(1:D:length(t));

%绘图
figure(1),
subplot(221),stem(sin_osc);
title('采样频率352.8khz 1khz sin','fontsize',8);
subplot(222),stem(si0);
title('采样频率44.1khz 1khz sin','fontsize',8);
subplot(223);plot(f,mag);
xlabel('频率(Hz)','fontsize',8);
ylabel('幅度(dB)','fontsize',8);
title('freqz()幅频响应','fontsize',8);
subplot(224);plot(f,ph);
xlabel('频率(Hz)','fontsize',8);
ylabel('相位(度)','fontsize',8);

图1 8倍抽取前后的1khz sin时域波形

图2 滤波器系数的幅频和相频响应

由图1和图2分析可知,单级CIC滤波器的降采样率设计成功。

5 FPGA设计验证

FPGA的单级cic滤波器的设计其实就是一个滑动平均滤波器,由一个累加器和一个移位操作完成。

`timescale 1ps/1ps
module cic(
       input mclk,//45.1584MHZ
	   input reset_n,
	   input signed[31:0] pcm_in,//352.8khz 
	   output signed[31:0] pcm_out //44.1khz
	   );
	   
localparam LAST_CYCLE = 128;
reg [9:0] i;//44.1

reg signed [35:0] temp_pcm;
reg signed [35:0] dout_pcm;
assign pcm_out = dout_pcm[35:4];
always @(posedge mclk or negedge reset_n) begin
  if(reset_n == 1'b0) begin
    i <= 0;
	temp_pcm<=0;
	dout_pcm<=0;
  end
  else begin
    i<= i+1;
	if(i == (LAST_CYCLE-1) || i == (LAST_CYCLE*2-1) ||i == (LAST_CYCLE*3-1) || i == (LAST_CYCLE*4-1) || i == (LAST_CYCLE*5-1)||i == (LAST_CYCLE*6-1) ||i == (LAST_CYCLE*7-1)  ) temp_pcm <= temp_pcm + pcm_in;
	if(i == (LAST_CYCLE*8-1)) begin 
	  dout_pcm<= temp_pcm + pcm_in;
	  temp_pcm<=0;
	end
  end 
end
endmodule



图3 modelsim时域数据检测

图4 modelsim时域波形

图5 matlab还原数据的时域和频域

由图3,图4,和图5分析,1khz基本未发生改变,44.1khz相对于352.8khz采样率1khz点变得疏松。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21328

    浏览量

    593275
  • 数字信号处理

    关注

    15

    文章

    520

    浏览量

    45304
  • fir滤波器
    +关注

    关注

    1

    文章

    92

    浏览量

    18717
  • CIC滤波器
    +关注

    关注

    0

    文章

    15

    浏览量

    10490
  • 梳状滤波器
    +关注

    关注

    0

    文章

    4

    浏览量

    6586
收藏 人收藏

    评论

    相关推荐

    基于多速率DA的根升余弦滤波器FPGA实现

    Add Cell,MAC)结构,设计方便,只需要乘法器、加法器和移位寄存即可实现,但是在FPGA中实现硬件乘法器十分耗费资源。特别是当滤波器阶数很高时,资源耗费不可忽视。若采用乘法器复用的结构
    发表于 03-25 14:21

    把“电子”充满!FCom富士3030声表滤波器工业#晶振 #声表滤波器

    滤波器晶振
    FCom富士晶振
    发布于 :2023年12月06日 11:03:36

    一阶带通滤波器电路图原理

    传统的带通滤波器设计方法中涉及了很多复杂的理论分析和计算。针对上述缺点,介绍一种使用EDA软件进行带通滤波器设计方案,详细阐述了使用FilterPro软件进行有源带通滤波器电路的设计
    的头像 发表于 12-01 17:10 2098次阅读
    一阶带通<b class='flag-5'>滤波器</b>电路图原理

    求助,滤波器设计向导的使用疑问

    在使用ADI官网上的滤波器设计向导进行一个多级切比雪夫低通滤波器时,方向其第一是一RC缓冲,其增益是
    发表于 11-17 07:56

    模拟滤波器电源使用,射跟随的参考电压如何接入?

    模拟滤波器电源使用,射跟随的参考电压如何接入,是参考电压接一个电阻再接到负输入端吗
    发表于 11-17 06:15

    环路滤波器采用有源滤波器还是无源滤波器

    环路滤波器采用有源滤波器还是无源滤波器? 首先,我们需要了解什么是环路滤波器。环路滤波器是一种基于共振电路的
    的头像 发表于 10-30 10:56 605次阅读

    用Verilog在FPGA上实现低通滤波器

    在本文中,我们将简要介绍不同类型的滤波器,然后学习如何实现移动平均滤波器并使用CIC架构对其进行优化。
    发表于 10-02 15:38 1341次阅读
    用Verilog在<b class='flag-5'>FPGA</b>上实现低通<b class='flag-5'>滤波器</b>

    CIC IP用户手册

    CIC IP 用户手册 CIC(Cascaded Integrator–Comb Filter),级联积分梳状滤波器,是一种特殊的 FIR 滤波器,其特色是所有
    发表于 08-09 07:42

    滤波器的选频作用 滤波器与选频器的区别

    有关滤波器的作用,根据滤波器的选频作用,滤波器可以分成四类:低通、高通、带通和带阻滤波器滤波器与选频器的区别,选频器是
    的头像 发表于 06-29 16:47 2207次阅读
    <b class='flag-5'>滤波器</b>的选频作用 <b class='flag-5'>滤波器</b>与选频器的区别

    FIR及IIR滤波器FPGA设计实现方案

    这种方法是通过将模拟滤波器频率特性H(s)反拉氏变换为h(t),再将h(t)等间隔抽样成h(n)后,对h(n)取Z变换求得H(z),即得到了数字滤波器的系统函数。
    发表于 06-15 11:00 1558次阅读
    FIR及IIR<b class='flag-5'>滤波器</b>的<b class='flag-5'>FPGA</b>设计实现<b class='flag-5'>方案</b>

    如何使用HLS加速FPGA上的FIR滤波器

    电子发烧友网站提供《如何使用HLS加速FPGA上的FIR滤波器.zip》资料免费下载
    发表于 06-14 15:28 1次下载
    如何使用HLS加速<b class='flag-5'>FPGA</b>上的FIR<b class='flag-5'>滤波器</b>

    Verilog CIC滤波器设计

    积分梳状滤波器CIC,Cascaded Integrator Comb),一般用于数字下变频(DDC)和数字上变频(DUC)系统。
    的头像 发表于 06-01 11:05 1237次阅读
    Verilog <b class='flag-5'>CIC</b><b class='flag-5'>滤波器</b>设计

    简谈FIR滤波器和IIR滤波器的区别

    滤波输出取决于当前输入数据、历史输入数据和历史输出数据。以基于FPGA硬件的数字滤波器为例,FIR在处理信号时不需等待前一个信号的滤波输出,只需要考虑输入数据便可实时
    发表于 05-29 16:47

    并行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并进行了仿真验证。
    的头像 发表于 05-24 10:57 717次阅读
    并行FIR<b class='flag-5'>滤波器</b>MATLAB与<b class='flag-5'>FPGA</b>实现

    串行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器FPGA实现步骤,并结合杜勇老师的书籍中的串行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了简单的优化,并进行了仿真验证。
    的头像 发表于 05-24 10:56 617次阅读
    串行FIR<b class='flag-5'>滤波器</b>MATLAB与<b class='flag-5'>FPGA</b>实现