m基于FPGA和MATLAB的数字CIC滤波器设计和实现

简介: m基于FPGA和MATLAB的数字CIC滤波器设计和实现

1.算法概述

  CIC滤波器由一对或多对积分-梳状滤波器组成,在抽取CIC中,输入信号依次经过积分,降采样,以及与积分环节数目相同的梳状滤波器。在内插CIC中,输入信号依次经过梳状滤波器,升采样,以及与梳状数目相同的积分环节。CIC滤波器是一种基于零极点相抵消的FIR滤波器。N级CIC抽取滤波器的基本结构框图如图1所示。

1.png
2.png

我们将这个系统模块话,然后在实际应用的时候,我们只要改变其中的参数就可以了。

系统分为如下三个模块。

3.png
4.png
5.png

模块一的设计:

delay_one(

            i_clk,//输入时钟

            i_rst,//输入复位信号

            i_data,//输入信号

            o_data//输出信号

            );

模块二的设计:

down(

       i_clk,//输入时钟

       i_rst,//输入复位信号

       i_M,  //抽取值

       i_data,//输入信号

       o_data//输出信号

       );

模块三的设计:

delay_M(

          i_clk,//输入时钟

          i_rst,//输入复位信号

          i_data,//输入信号

          o_data//输出信号

          );

那么其在顶层,我们只要调用这些模块就行了。

2.仿真效果预览
QUARTUS12.1

matlab2022a仿真

6.jpeg
7.jpeg
8.jpeg
9.png
10.png
11.png

3.MATLAB/FPGA部分代码预览

b4=conv(b3,b3);
a4=conv(a3,a3);
b5=conv(b4,b3);
a5=conv(a4,a3);
b6=conv(b4,b4);
a6=conv(a4,a4);
b7=conv(b6,b3);
a7=conv(a6,a3);
figure(1);
freqz(b7/D^5,a7,'whole');
 
%CIC抽取滤波器
% 抽取因子
r = 2;                 
hm = mfilt.cicdecim(r);  
%原始的采样率 44.1kHz.
fs = 44.1e3; 
%10240个采样点
n = 0:10239;           
%原始信号
x  = sin(2*pi*1e3/fs*n);  
%得到抽取后的5120个采样点
y_fi = filter(hm,x);        
x = double(x);
y = double(y_fi);
y = y/max(abs(y));
figure(2);
stem(n(1:44)/fs,x(2:45)); hold on;  
stem(n(1:22)/(fs/r),y(3:24),'r','filled'); 
xlabel('时间(sec)');ylabel('信号值');
title('CIC抽取滤波器');
 
%CIC内插滤波器
%插值因子
R = 2;                    
hm = mfilt.cicinterp(R);
% 原始采样频率:22.05 kHz.
fs = 22.05e3;           
% 5120个采样点
n = 0:5119;              
%原始信号
x = sin(2*pi*1e3/fs*n);    
y_fi = filter(hm,x);  
x = double(x);
y = double(y_fi);
y = y/max(abs(y));
figure(3);
stem(n(1:22)/fs,x(1:22),'filled'); hold on;
stem(n(1:44)/(fs*R),y(4:47),'r');  
xlabel('时间(sec)');ylabel('信号值');
01-23M

module down(
           i_clk,//输入时钟
           i_rst,//输入复位信号
           i_M,  //抽取值
           i_data,//输入信号
           o_data,//输出信号
           r_clk
           );
           
input              i_clk;//输入时钟
input              i_rst;//输入复位信号
input       [7:0]  i_M;  //抽取值          
input signed[31:0] i_data;//输入信号
output signed[31:0]o_data;//输出信号
output             r_clk;//输出信号
reg       [7:0] r_cnt =8'd0;
reg signed[31:0]o_data=32'd0;
reg             r_clk =1'b0;
 
always @(posedge i_clk)
begin
     if(!i_rst)//系统复位
     begin
     r_cnt<=8'd0;
     r_clk<=1'b0;
     end
else begin
          if(r_cnt==i_M/2-1)//分频
          begin
          r_clk<=~r_clk;
          r_cnt<=8'd0;
          end
     else begin
          r_cnt<=r_cnt+1'b1;
          r_clk<=r_clk; 
          end 
     end
end 
 
always @(posedge r_clk)
begin
     if(!i_rst)//系统复位
     begin
     o_data<=32'd0;
     end
else begin
     o_data<=i_data;//抽取
     end
end 
 
 
endmodule        
相关文章
|
6月前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
326 8
|
6月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
222 6
|
6月前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
405 1
|
6月前
|
机器学习/深度学习 算法 语音技术
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
216 4
|
6月前
|
传感器 算法 数据可视化
【卡尔曼滤波跟踪】跟踪目标的轨迹,并将滤波器输出与原始轨迹进行比较(Matlab实现)
【卡尔曼滤波跟踪】跟踪目标的轨迹,并将滤波器输出与原始轨迹进行比较(Matlab实现)
395 4
|
7月前
|
机器学习/深度学习 资源调度 算法
【图像去噪的滤波器】非局部均值滤波器的实现,用于鲁棒的图像去噪研究(Matlab代码实现)
【图像去噪的滤波器】非局部均值滤波器的实现,用于鲁棒的图像去噪研究(Matlab代码实现)
260 2
|
6月前
|
存储 算法 生物认证
基于Zhang-Suen算法的图像细化处理FPGA实现,包含testbench和matlab验证程序
本项目基于Zhang-Suen算法实现图像细化处理,支持FPGA与MATLAB双平台验证。通过对比,FPGA细化效果与MATLAB一致,可有效减少图像数据量,便于后续识别与矢量化处理。算法适用于字符识别、指纹识别等领域,配套完整仿真代码及操作说明。
|
8月前
|
存储 算法 数据安全/隐私保护
基于FPGA的图像退化算法verilog实现,分别实现横向和纵向运动模糊,包括tb和MATLAB辅助验证
本项目基于FPGA实现图像运动模糊算法,包含横向与纵向模糊处理流程。使用Vivado 2019.2与MATLAB 2022A,通过一维卷积模拟点扩散函数,完成图像退化处理,并可在MATLAB中预览效果。
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。

热门文章

最新文章