• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 信號去直流方法

    信號去直流方法

    作者: 時間:2017-06-04 來源:網絡 收藏

    本文引用地址:http://www.czjhyjcfj.com/article/201706/348768.htm

    利用進行數字信號處理時,信號中的直流分量通常需要去除,而直流分量在AD前段就存在,如果采用模擬電路去除直流分量比較復雜,因此通常在AD后端數字域去除直流分量。在中,常規去直流的方法是先對信號進行累加,然后對累加值進行移位即可得到直流分量,如累加8192個數據,則直流分量可由累加值右移13位得到。

    本文介紹一種根據Xilinx 資源設計的去直流模塊,其基本原理采用,如圖1所示,通過一個一階RC電路,在V0端可等效一個低通濾波器,得到直流分量。


    由上式可推導出,

    定義系數,


    由此可得到下式:

    由上式可得到如圖2所示結構


    仔細觀察發現圖2中結構與Xilinx FPGA的結構十分相似,如圖3所示,兩個結構做了類比,其中Vi - Vo的減法可由中的Pre-Adder實現,k*(vi - vo)的乘法可由DSP48E1中的Multipler實現,而Vo + k*(vi - vo)加法可由DSP48E1中的Accumulator實現。因此實現這個去直流模塊只需1個DSP48E1資源,并且在Xilinx 7系列FPGA中,DSP48E1最大支持25-bit的Pre-adder、25*18-bit的Multipler和48-bit的Accumulator,基本可滿足常規處理。


    具體實現:


    在ISE的HDL language template中可以找到DSP48的宏定義,這邊需要用到ADDMACC_MACRO,只需要將這個宏模板拷貝到程序中直接例化即可調用DSP48,去直流模塊的DSP48E1實現代碼如下所示:


    module DCOff_DSP(


    input clk,


    input rst,


    input [15:0] din,


    output [15:0] dc


    );


    wire signed [31:0] PRODUCT;


    wire signed [15:0] K;


    wire signed [31:0] ACOUT;


    assign K=16h0085;


    ADDMACC_MACRO #(


    .DEVICE(7SERIES), // Target Device: VIRTEX6, SPARTAN6, 7SERIES


    .LATENCY(4), // Desired clock cycle latency, 0-4


    .WIDTH_PREADD(16), // Pre-adder input width, 1-25


    .WIDTH_MULTIPLIER(16), // Multiplier input width, 1-18


    .WIDTH_PRODUCT(32) // MACC output width, 1-48


    ) ADDMACC_MACRO_inst (


    .PRODUCT(PRODUCT), // MACC result output, width defined by WIDTH_PRODUCT parameter


    .CARRYIN(1b0), // 1-bit carry-in input


    .CLK(clk), // 1-bit clock input


    .CE(1b1), // 1-bit clock enable input


    .LOAD(1b1), // 1-bit accumulator load input


    .LOAD_DATA(PRODUCT), // Accumulator load data input, width defined by WIDTH_PRODUCT parameter


    .MULTIPLIER(K), // Multiplier data input, width defined by WIDTH_MULTIPLIER parameter


    .PREADD2(-PRODUCT[31:16]), // Preadder data input, width defined by WIDTH_PREADD parameter


    .PREADD1(din), // Preadder data input, width defined by WIDTH_PREADD parameter


    .RST(rst) // 1-bit active high synchronous reset


    );


    assign dc=PRODUCT[31:16];


    endmodule

    以下是得到的綜合報告,主要就使用了1個DSP48E1資源,并且最高時鐘頻率高達552MHz,可滿足通信系統中頻數據處理。


    Selected Device : 7k325tfbg676-3


    Slice Logic Utilization:


    Number of Slice LUTs : 16 out of 203800 0%


    Number used as Logic: 16 out of 203800 0%


    Number of DSP48E1s: 1 out of 840 0%


    Timing Summary:


    Minimum period: 1.811ns (Maximum Frequency: 552.273MHz)


    Minimum input arrival time before clock: 0.694ns


    Maximum output required time after clock: 0.568ns


    如圖4所示為去直流模塊的仿真波形,輸入為有直流偏置的正弦波,從圖中可看出輸出直流分量隨著濾波數據的增加慢慢收斂,而這個收斂速度取決于系數k,根據k的表達式可得,k的值取決于采樣周期和RC值,如果采樣頻率固定為245.76MHz,則RC值決定了k的取值。


    根據多次仿真的到k的不同取值對模塊的影響:


    k取值越大,DC值收斂得越快;k取值越小,DC值越穩定、越平滑。因此,不是k取值越大越好,收斂快但是波動比較大,如圖5所示,這樣直流分量肯定是濾不干凈的。


    究其原因,得從原理上著手,翻看了一下信號與系統書(這些基本概念長時間不用都還給老師了,平時還得多注意復習一下基礎知識),原來k的值決定了這個低通濾波器的截止頻率,輸出直流分量的波動性不僅僅跟k值有關,還與輸入信號頻率和采樣頻率有關,在本文實例中,輸入信號頻率為5MHz,采樣頻率為245.76MHz,在圖4中k=0x85,圖5中k=0x400,如圖6所式為k的兩個取值得到濾波器的幅頻特性,并且標出了輸入信號所在頻點(5MHz/245.76*2=0.04068)的幅度特性,分別為-29.98dB和-12.6dB,相差了近20dB。因此在設計去直流模塊時應根據實際應用情況決定k的取值。


    本文介紹了一種的新方法,但不是所有場合都試用,如果FPGA平臺DSP資源比較少,如SPARTAN系列,建議采用常規累加+移位的方法。而本文實例中采用Kintex7系列FPGA,有豐富的DSP資源,而采用此方法整個模塊只需要1個DSP48E1,并且能高速處理,因此非常適用。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 休宁县| 罗山县| 昌黎县| 南华县| 杭州市| 洛阳市| 高要市| 额尔古纳市| 许昌县| 和静县| 巴马| 仁寿县| 安义县| 治县。| 峡江县| 萝北县| 健康| 紫金县| 伊金霍洛旗| 永吉县| 临泉县| 扎囊县| 长海县| 大埔区| 保德县| 高安市| 桃源县| 大英县| 高台县| 波密县| 五华县| 商南县| 钟祥市| 原平市| 福贡县| 防城港市| 湖州市| 天镇县| 获嘉县| 楚雄市| 班戈县|