CIC濾波器原理與設計

一、CIC濾波器論文

首先介紹CIC濾波器的論文背景。CIC全稱為Cascaded Integrator-Comb濾波器,最早由E. H. Robinson和R. W. Schafer在1982年提出。CIC濾波器是數字信號處理領域中一種高效的低通濾波器,常用於信號降採樣、信號定點化、數據壓縮和數據預處理等應用。由於其結構簡單,實現容易,速度快等特點,被廣泛應用於數字通信、電力系統、控制系統等領域。

隨後,又有L. R. Rabiner等人在2002年的論文中對CIC濾波器進行了深入的研究,提出不同類型和長度的CIC濾波器的設計方法及其影響因素。於是CIC濾波器的設計以及應用得到了更加成熟和廣泛的應用。

二、CIC濾波器FPGA實現

CIC濾波器在FPGA實現中是非常常見的,其主要原因就是由於其結構特殊,能夠用多個級聯的積分器和滑動平均器簡單地構建出低通數字濾波器。FPGA的可編程性和高速並行性也使得CIC濾波器在數字信號處理中表現得十分出色。

以下是基於Verilog語言實現的2級CIC濾波器代碼示例:

module cic_filter
#(
    parameter SDW = 16,   //輸入數據寬度
    parameter SDP = 16,   //積分器寬度
    parameter SDC = 16,   //CF width
    parameter NST = 2,    //級聯數量
    parameter CF = 8      //CIC濾波器的CF參數,即積分器階數
)(
    input clk,            //時鐘
    input rstn,           //異步重置
    input [SDW-1:0] in_data,//輸入數據
    output reg [SDW-1:0] out_data//輸出數據
);

reg signed[SDP-1:0] integrator1; // 積分器1
reg signed[SDP-1:0] integrator2; // 積分器2

// CIC濾波器參數設置
reg signed[SDC-1:0] cntr[NST-2:0];
assign csum = {cntr[NST-2],cntr[NST-3:NST-CF]};
reg signed[SDC+log2(NST)-1:0] cic_p_n;
reg signed[SDP+log2(NST)-1:0] cic_f;
reg signed[(SDP+SDC)+log2(NST)-1:0] cic_q;

reg cic_r;
reg cic_f_nf;

generate
    genvar i;
    for(i=0;i<NST-1;i=i+1)
    begin : cic_instance
        cic foo(SDP,SDC,CF)(
            .clk(clk),
            .rstn(rstn),
            .prm_rst(prm_rst),
            .p(ccsum[i]),
            .f(ccsum[i+1]),
            .q(bar[i]),
            .r(cic_r),
            .f_nf(cic_f_nf)
        );
    end
endgenerate

// CIC濾波器模塊連接
assign ccsum[0] = {csum,in_data};
genvar i;
generate
    for(i=1;i<NST-1;i=i+1)
    begin : cic_sum_connection
        assign ccsum[i] = bar[i-1];
    end
endgenerate
assign out_data = cic_q[NST*SDC+NST*CF+SDP-1:NST*SDC];
endmodule

三、CIC濾波器的長度與延時

CIC濾波器的長度和延時是與濾波器參數和級聯數量直接相關的。在級聯數量為1的情況下,CIC濾波器的長度等於CF,延時為CF-1。在級聯數量為2的情況下,CIC濾波器的長度為CF * CF + CF,延時為CF * (CF-1)。

可以通過FPGA實現並進行仿真驗證,以下是一個CIC濾波器延時為49的仿真結果:

module cic_sim(
    input clk,
    input rstn,
    input signed [31:0] in_data,
    output signed [31:0] out_data
);

reg signed [14:0] cic_out [4:0];

wire [15:0] cic_out_int;
wire [15:0] cic_out_int_delayed;

genvar i;
generate
    for(i=0;i<5;i=i+1)
    begin : cic_lvl
        cic_filter #(16,16,16,3,2)(.clk(clk), .rstn(rstn), .in_data(cic_out[i]), .out_data(cic_out[i+1]));
    end
endgenerate

assign cic_out_int = cic_out[2][31:16];
assign cic_out_int_delayed = #10 cic_out_int;
assign out_data = {cic_out_int,cic_out_int_delayed}[47:16];

endmodule

四、CIC濾波器的作用和原理

CIC濾波器能夠實現數字信號降採樣或者特定頻段的濾波,常用於數據預處理的環節。其本質上是一個低通積分器,積分器的輸出經過累加器後得到多個抽樣點內信號的平均值,實現了信號的平滑。CIC濾波器利用了理想低通濾波器的離散時間形式,將濾波器的“微分”和“積分”操作拆分并迭代執行,達到了簡單實現和高效運算的目的。但是CIC濾波器在設計的時候會存在性能損耗和輸出噪聲增加等問題,需要針對特定的應用需求進行設計和調整。

五、CIC濾波器的設計和增益

CIC濾波器的設計基於其級聯結構,主要涉及到CF參數的選擇(即積分器的階數)和級聯數量的確定。CF參數的選擇和級聯數量的增加都會影響濾波器的性能和輸出結果,需要進行權衡。同時,CIC濾波器也存在一定的增益,其值為2的CF倍數次方,也需要在設計過程中加以考慮。

以下是一個基於MATLAB的2級CIC濾波器設計代碼示例:

fs = 1000;  % 採樣率
fc = 50;    % 截止頻率
cf = 2;     % 積分器個數

N = 2;      % 級聯個數
M = 2^N;    % CIC濾波器增益

R = round(fs/fc);   % 重採樣係數
Q = R^cf;           % 各級積分器輸入採樣率

% 各級差分器的係數
a = zeros(1,cf + 1);
a(1) = M;
for i = 1:cf
    a(i+1) = R;
end

% 一階IIR濾波器
b = [1-R R-1];

% 計算CIC濾波器的差分方程
b_cic = 1;
a_cic = 1;
for i = 1:N
    b_cic = conv(b_cic,a);
    a_cic = conv(a_cic,b);
end

% 歸一化係數
b_cic = b_cic/M;
a_cic = a_cic;

% 畫出CIC濾波器的幅頻響應
fvtool(b_cic, a_cic);

六、CIC濾波器的仿真選取

仿真具體操作如下:

1、模擬信號的生成:可以使用Matlab代碼或Simulink工具生成需要濾波的信號;

2、驗證CIC濾波器的性能:使用Verilog語言設計CIC濾波器,並用Vivado工具仿真驗證其性能,如幅頻特性和延時等;

3、功能和性能集成:將CIC濾波器的模擬信號和CIC濾波器的系統集成起來,觀察其實際效果。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183893.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:50
下一篇 2024-11-25 05:50

相關推薦

  • Harris角點檢測算法原理與實現

    本文將從多個方面對Harris角點檢測算法進行詳細的闡述,包括算法原理、實現步驟、代碼實現等。 一、Harris角點檢測算法原理 Harris角點檢測算法是一種經典的計算機視覺算法…

    編程 2025-04-29
  • 瘦臉算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉算法 Python 實現的原理和方法,包括該算法的意義、流程、代碼實現、優化等內容。 一、算法意義 隨着科技的發展,瘦臉算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • 神經網絡BP算法原理

    本文將從多個方面對神經網絡BP算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP算法簡介 BP算法是一種常用的神經網絡訓練算法,其全稱為反向傳播算法。BP算法的基本思想是通過正…

    編程 2025-04-29
  • GloVe詞向量:從原理到應用

    本文將從多個方面對GloVe詞向量進行詳細的闡述,包括其原理、優缺點、應用以及代碼實現。如果你對詞向量感興趣,那麼這篇文章將會是一次很好的學習體驗。 一、原理 GloVe(Glob…

    編程 2025-04-27
  • 編譯原理語法分析思維導圖

    本文將從以下幾個方面詳細闡述編譯原理語法分析思維導圖: 一、語法分析介紹 1.1 語法分析的定義 語法分析是編譯器中將輸入的字符流轉換成抽象語法樹的一個過程。該過程的目的是確保輸入…

    編程 2025-04-27
  • Python字典底層原理用法介紹

    本文將以Python字典底層原理為中心,從多個方面詳細闡述。字典是Python語言的重要組成部分,具有非常強大的功能,掌握其底層原理對於學習和使用Python將是非常有幫助的。 一…

    編程 2025-04-25
  • Grep 精準匹配:探究匹配原理和常見應用

    一、什麼是 Grep 精準匹配 Grep 是一款在 Linux 系統下常用的文本搜索和處理工具,精準匹配是它最常用的一個功能。Grep 精準匹配是指在一個文本文件中查找與指定模式完…

    編程 2025-04-25
  • 深入探討馮諾依曼原理

    一、原理概述 馮諾依曼原理,又稱“存儲程序控制原理”,是指計算機的程序和數據都存儲在同一個存儲器中,並且通過一個統一的總線來傳輸數據。這個原理的提出,是計算機科學發展中的重大進展,…

    編程 2025-04-25
  • 樸素貝葉斯原理詳解

    一、樸素貝葉斯基礎 樸素貝葉斯是一種基於貝葉斯定理的算法,用於分類和預測。貝葉斯定理是一種計算條件概率的方法,即已知某些條件下,某事件發生的概率,求某條件下另一事件發生的概率。樸素…

    編程 2025-04-25
  • 單點登錄原理

    一、什麼是單點登錄 單點登錄(Single Sign On,SSO)指的是用戶只需要登錄一次,在多個應用系統中使用同一個賬號和密碼登錄,而且在所有系統中都可以使用,而不需要在每個系…

    編程 2025-04-25

發表回復

登錄後才能評論