FIR(Finite Impulse Response)濾波器:有限長(zhǎng)單位沖激響應(yīng)濾波器,又稱(chēng)為非遞歸型濾波器,是數(shù)字信號(hào)處理系統(tǒng)中最基本的元件,它可以在保證任意幅頻特性的同時(shí)具有嚴(yán)格的線性相頻特性,同時(shí)其單位抽樣響應(yīng)是有限長(zhǎng)的,因而濾波器是穩(wěn)定的系統(tǒng)。因此,F(xiàn)IR濾波器在通信、圖像處理、模式識(shí)別等領(lǐng)域都有著廣泛的應(yīng)用。由于 FIR 濾波器處理的是數(shù)字信號(hào),所以模擬信號(hào)在進(jìn)入 FIR 濾波器前,需要先經(jīng)過(guò) AD 器件進(jìn)行模數(shù)轉(zhuǎn)換將模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),而為了讓信號(hào)處理不發(fā)生失真,信號(hào)的采樣速度必須滿足奈奎斯特采樣定理,一般取信號(hào)最高頻率的 4 到 5 倍作為采樣頻率。
1 、FIR結(jié)構(gòu)介紹
2 、EQ6HL130可編程邏輯芯片介紹
3 、eLinx工具介紹
4 、使用Verilog建立混頻波形
5 、matlab工具參數(shù)配置
6 、FIR結(jié)構(gòu)程序設(shè)計(jì)
7 、FIR IP核使用
8 、仿真驗(yàn)證
9 、開(kāi)發(fā)板試用
10、公司情況
1
FIR結(jié)構(gòu)介紹

FIR 濾波器信號(hào)處理如下公式所示,其中 x(n)是輸入的信號(hào),a(n)為 FIR 濾波系數(shù),y(n)為濾波后的信號(hào)。N為FIR濾波器的抽頭數(shù),濾波器階數(shù)為 N-1。

低通濾波器:低通濾波器是容許低于截止頻率的信號(hào)通過(guò),但高于截止頻率的信號(hào)不能通過(guò)的濾波。
高通濾波器:高通濾波器,又稱(chēng)低截止濾波器,低阻濾波器,允許高于某一截頻的頻率通過(guò),而大大衰減較低頻率的一種濾波器 ,它去掉了信號(hào)中不必要的低頻成分或者說(shuō)去掉了低頻干擾。
帶通濾波器:是指能通過(guò)某一頻率范圍內(nèi)的頻率分量,但將其他范圍的頻率分量衰減到極低水平的濾波器,與帶阻濾波器的概念相對(duì)。
帶阻濾波器:是指能通過(guò)大多數(shù)頻率分量,但將某些范圍的頻率分量衰減到極低水平的濾波器,與帶通濾波器的概念相對(duì)。

2
EQ6HL130可編程邏輯芯片介紹
EQ6HL130是中科億海微自主研發(fā)的可編程邏輯芯片,有效系統(tǒng)門(mén)容量達(dá)到1360萬(wàn)門(mén);
芯核電壓1.1V,I/O標(biāo)準(zhǔn)電壓3.3V,支持多種I/O標(biāo)準(zhǔn);
具有1200個(gè)4.5K嵌入式存儲(chǔ)器單元,最大存儲(chǔ)容量5.4M bit;
具有192個(gè)高速18bit×18bit乘法器;
具有8個(gè)可編程PLL,最高時(shí)鐘管理頻率可達(dá)500MHz;
最多可提供16路全局時(shí)鐘信號(hào);
最大可提供338個(gè)可編程用戶I/O, 最多提供169對(duì)LVDS差分端口;
支持片上數(shù)字控制終端電阻(Digital Control Termination,DCT);
支持主動(dòng)串行、被動(dòng)串行、主動(dòng)并行、被動(dòng)并行、JTAG、SPI等配置模式;
ESD大于2000V。
3
eLinx工具介紹
億靈思設(shè)計(jì)套件(eLinx Design Suite)是中科億海微研發(fā)的一款擁有國(guó)產(chǎn)自主知識(shí)產(chǎn)權(quán)的大規(guī)??删幊踢壿嬓酒_(kāi)發(fā)軟件,可以支持千萬(wàn)門(mén)級(jí)以上可編程邏輯芯片器件的設(shè)計(jì)開(kāi)發(fā)。eLinx軟件不僅可以支持工業(yè)界標(biāo)準(zhǔn)的開(kāi)發(fā)流程,即從RTL綜合到配置碼流生成下載的全套操作,而且可以提供面向嵌入式可編程電路IP核定制開(kāi)發(fā)的評(píng)估流程,幫助用戶定制嵌入式可編程電路IP核資源的規(guī)模和排布,并生成相應(yīng)的芯片數(shù)據(jù)庫(kù),為終端用戶提供與可編程邏輯芯片成片相同的EDA全流程服務(wù)。
產(chǎn)品特點(diǎn):
從 RTL到Bitstream的全正向自主可控融合架構(gòu)EDA工具;
集成了IP核生成器,包含豐富的IP軟硬核資源,幫助用戶快捷地實(shí)現(xiàn)復(fù)雜設(shè)計(jì);
除傳統(tǒng)流程外,還支持嵌入式可編程電路 IP 核的評(píng)估以及定制流程;
高效的時(shí)序裝箱布局布線算法,在延時(shí)/面積方面有著高質(zhì)量的QoR;
支持工業(yè)標(biāo)準(zhǔn)SDC文件作為時(shí)序約束來(lái)滿足時(shí)序要求;
集成了在線邏輯分析Bitprobe,可提供方便的在線調(diào)試手段;
支持各類(lèi)碼流下載模式,包括PROM/Flash片外下載;
支持第三方的仿真工具M(jìn)odelSim;
基于TCL腳本環(huán)境的自動(dòng)化流程控制;
軟件界面兼容國(guó)際主流商業(yè)工具,容易上手;
直觀的圖形化管腳分配以及Floorplan功能;
三模冗余(TMR)軟件抗輻照加固措施。
4
使用Verilog建立混頻波形

程序介紹:分別使用兩個(gè)rom輸出不同頻率,進(jìn)行相加。
頻率計(jì)算:使用時(shí)鐘/采樣點(diǎn)=真實(shí)頻率。

仿真結(jié)果:data_sum為相加后的結(jié)果!

5
matlab工具參數(shù)配置
設(shè)計(jì)一個(gè)16階的低通濾波器


參數(shù)選擇:選用低通濾波器,使用波紋設(shè)計(jì)法,階數(shù)自定義了16個(gè)(當(dāng)然階數(shù)越多濾波效果越好),F(xiàn)S的采樣頻率是50M,通過(guò)頻率0.5M,截至頻率為1M。
Response Type:選擇FIR濾波器的類(lèi)型:低通、高通、帶通和帶阻等。
Design Method:FIR濾波器設(shè)計(jì)方法有多種,最常用的是窗函數(shù)設(shè)計(jì)法(Window)、等波紋設(shè)計(jì)法(Equiripple)和最小二乘法 (Least-Squares)等。其中窗函數(shù)設(shè)計(jì)法在學(xué)校課堂中是重點(diǎn)講解的,提到FIR濾波器肯定會(huì)想到hamming、kaiser窗,但是實(shí)際應(yīng)用中卻很少使用,因?yàn)槿绻捎么昂瘮?shù)設(shè)計(jì)法,達(dá)到所期望的頻率響應(yīng),與其它方法相比往往階數(shù)會(huì)更多;而且窗函數(shù)設(shè)計(jì)法一般只參照通頻帶wp、抑制頻帶ws 和理想增益來(lái)設(shè)計(jì)濾波器,但是實(shí)際應(yīng)用中通頻帶和抑制帶的波紋也是需要考慮的,那在這種情況下,采用等波紋設(shè)計(jì)法就非常適用了。
Frequency Specification:設(shè)置頻率響應(yīng)的參數(shù),包括采樣頻率Fs、通帶頻率Fpass和阻帶頻率Fstop。
Filter Order:設(shè)置濾波器的階數(shù),這個(gè)選項(xiàng)直接影響濾波器的性能,階數(shù)越高,性能越好,但是相應(yīng)在可編程邏輯芯片實(shí)現(xiàn)耗用的資源需要增多。在這個(gè)設(shè)置中提供2個(gè)選項(xiàng):Specify order和Minimum order,Specify order是工程師自己確定濾波器的階數(shù),Minimum order是讓工具自動(dòng)確定達(dá)到期望的頻率相應(yīng)所需要的最小階數(shù),因此具體選擇哪個(gè)選項(xiàng)得視實(shí)際情況而定了,(這里我選用16階)。
將配置完成后的數(shù)據(jù)導(dǎo)出 :
File ---> Export ---> Export ;

輸入:> Num=round(Num*400) 取整數(shù)

將上方數(shù)據(jù)代入到verilog進(jìn)行乘累加濾波。
6
FIR結(jié)構(gòu)程序設(shè)計(jì)
module top (
input wire clk,
input wire rst_n
);
//Registers Declarations
reg [9:0] addr_1;
reg [9:0] addr_2;
reg [14:0] data_sum;
reg [14:0] delay_pipeline1 ;
reg [14:0] delay_pipeline2 ;
reg [14:0] delay_pipeline3 ;
reg [14:0] delay_pipeline4 ;
reg [14:0] delay_pipeline5 ;
reg [14:0] delay_pipeline6 ;
reg [14:0] delay_pipeline7 ;
reg [14:0] delay_pipeline8 ;
reg [14:0] delay_pipeline9 ;
reg [14:0] delay_pipeline10 ;
reg [14:0] delay_pipeline11 ;
reg [14:0] delay_pipeline12 ;
reg [14:0] delay_pipeline13 ;
reg [14:0] delay_pipeline14 ;
reg [14:0] delay_pipeline15 ;
reg [14:0] delay_pipeline16 ;
reg [14:0] delay_pipeline17 ;
reg signed [22:0] multi_data1 ;//乘積結(jié)果
reg signed [22:0] multi_data2 ;
reg signed [22:0] multi_data3 ;
reg signed [22:0] multi_data4 ;
reg signed [22:0] multi_data5 ;
reg signed [22:0] multi_data6 ;
reg signed [22:0] multi_data7 ;
reg signed [22:0] multi_data8 ;
reg signed [22:0] multi_data9 ;
reg signed [22:0] multi_data10 ;
reg signed [22:0] multi_data11 ;
reg signed [22:0] multi_data12 ;
reg signed [22:0] multi_data13 ;
reg signed [22:0] multi_data14 ;
reg signed [22:0] multi_data15 ;
reg signed [22:0] multi_data16 ;
reg signed [22:0] multi_data17 ;
reg signed [22:0] FIR_OUT;
//---Wiredsignaldeclaration
wire [13:0] data_1;
wire [13:0] data_2;
wire[7:0] coeff1 =8'd86; //濾波器系數(shù)
wire[7:0] coeff2 = 8'd5;
wire[7:0] coeff3 = 8'd6;
wire[7:0] coeff4 = 8'd6;
wire[7:0] coeff5 = 8'd6;
wire[7:0] coeff6 = 8'd6;
wire[7:0] coeff7 = 8'd6;
wire[7:0] coeff8 = 8'd6;
wire[7:0] coeff9 = 8'd6;
wire[7:0] coeff10 = 8'd6;
wire[7:0] coeff11 = 8'd6;
wire[7:0] coeff12 = 8'd6;
wire[7:0] coeff13 = 8'd6;
wire[7:0] coeff14 = 8'd6;
wire[7:0] coeff15 = 8'd6;
wire[7:0] coeff16 = 8'd5;
wire[7:0] coeff17 = 8'd86;
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
begin
addr_1<=? 10'd0;
addr_2<=? 10'd0;
end
else
begin
addr_1<=? addr_1+10'd41;??? //2m
addr_2<=? addr_2+10'd20;??? //1m
end
end
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
data_sum <=? 15'd0;
else
data_sum <=? data_1+?? data_2;
end
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
begin
delay_pipeline1 <=? 15'd0;
delay_pipeline2 <=? 15'd0;
delay_pipeline3 <=? 15'd0;
delay_pipeline4 <=? 15'd0;
delay_pipeline5 <=? 15'd0;
delay_pipeline6 <=? 15'd0;
delay_pipeline7 <=? 15'd0;
delay_pipeline8 <=? 15'd0;
delay_pipeline9 <=? 15'd0;
delay_pipeline10 <=? 15'd0;
delay_pipeline11 <=? 15'd0;
delay_pipeline12 <=? 15'd0;
delay_pipeline13 <=? 15'd0;
delay_pipeline14 <=? 15'd0;
delay_pipeline15 <=? 15'd0;
delay_pipeline16 <=? 15'd0;
delay_pipeline17 <=? 15'd0;
end
else
begin
delay_pipeline1 <=? data_sum;
delay_pipeline2 <=? delay_pipeline1;
delay_pipeline3 <=? delay_pipeline2;
delay_pipeline4 <=? delay_pipeline3;? ??
delay_pipeline5 <=? delay_pipeline4;? ??
delay_pipeline6 <=? delay_pipeline5;? ??
delay_pipeline7 <=? delay_pipeline6;? ??
delay_pipeline8 <=? delay_pipeline7;? ??
delay_pipeline9 <=? delay_pipeline8;? ??
delay_pipeline10 <=? delay_pipeline9;? ??
delay_pipeline11 <=? delay_pipeline10;??
delay_pipeline12 <=? delay_pipeline11;??
delay_pipeline13 <=? delay_pipeline12;??
delay_pipeline14 <=? delay_pipeline13;??
delay_pipeline15 <=? delay_pipeline14;??
delay_pipeline16 <=? delay_pipeline15;??
delay_pipeline17 <=? delay_pipeline16;??
end
end
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
begin
multi_data1 <=? 23'd0;//乘積結(jié)果
multi_data2 <=? 23'd0;
multi_data3 <=? 23'd0;
multi_data4 <=? 23'd0;
multi_data5 <=? 23'd0;
multi_data6 <=? 23'd0;
multi_data7 <=? 23'd0;
multi_data8 <=? 23'd0;
multi_data9 <=? 23'd0;
multi_data10 <=? 23'd0;
multi_data11 <=? 23'd0;
multi_data12 <=? 23'd0;
multi_data13 <=? 23'd0;
multi_data14 <=? 23'd0;
multi_data15 <=? 23'd0;
multi_data16 <=? 23'd0;
multi_data17 <=? 23'd0;
end
else
begin
multi_data1 <=? delay_pipeline1?? *?? coeff1;//乘積結(jié)果
multi_data2 <=? delay_pipeline2?? *?? coeff2;
multi_data3 <=? delay_pipeline3?? *?? coeff3;
multi_data4 <=? delay_pipeline4?? *?? coeff4;
multi_data5 <=? delay_pipeline5?? *?? coeff5;
multi_data6 <=? delay_pipeline6?? *?? coeff6;
multi_data7 <=? delay_pipeline7?? *?? coeff7;
multi_data8 <=? delay_pipeline8?? *?? coeff8;
multi_data9 <=? delay_pipeline9?? *?? coeff9;
multi_data10 <=? delay_pipeline10? *?? coeff10;
multi_data11 <=? delay_pipeline11? *?? coeff11;
multi_data12 <=? delay_pipeline12? *?? coeff12;
multi_data13 <=? delay_pipeline13? *?? coeff13;
multi_data14 <=? delay_pipeline14? *?? coeff14;
multi_data15 <=? delay_pipeline15? *?? coeff15;
multi_data16 <=? delay_pipeline16? *?? coeff16;
multi_data17 <=? delay_pipeline17? *?? coeff17;
end
end
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
FIR_OUT <=? 23'd0;
else
FIR_OUT <=multi_data1+multi_data2+multi_data3+multi_data4+multi_data5+multi_data6+multi_data7
+multi_data8+multi_data9+multi_data10+multi_data11+multi_data12+multi_data13+multi_data14+multi_data15
+multi_data16+multi_data17;
end
rom_1 u_rom_1(
.address (addr_1 ),
.clock (clk ),
.q (data_1 )
);
rom_1 u_rom_2(
.address (addr_2 ),
.clock (clk ),
.q (data_2 )
);
endmodule



仿真結(jié)果:FIR_OUT 為濾波后的效果。

7
FIR IP核使用
采用IP核的形式完成濾波實(shí)驗(yàn),需要使用MATLAB配置參數(shù),以MIF格式的文件放置到IP中進(jìn)行配置。

Docunmentation : FIR的IP核使用手冊(cè)。
Coefficient File Path : 防止配置后的MIF文件。

因?yàn)榭删幊踢壿嬓酒⒉恢С指↑c(diǎn)數(shù)的運(yùn)算,所以需要對(duì)抽頭系數(shù)進(jìn)行量化處理,在 Filter arithmetic 中選擇 Fixed-point, Number word length 中可以輸入的是字長(zhǎng),當(dāng)輸入 8 時(shí),點(diǎn)擊 Apply,可以看到有較大的偏差。所以將數(shù)值改為 16。

導(dǎo)出需要配置的數(shù)據(jù) :

將數(shù)據(jù)文件改成.MIF文件格式,給予eLinx軟件使用。

此處存儲(chǔ)為十六進(jìn)制數(shù)據(jù) , 我們建議使用二進(jìn)制進(jìn)行存儲(chǔ),數(shù)據(jù)更加穩(wěn)定。
IP核配置頁(yè)面 :


測(cè)試程序:

8
仿真驗(yàn)證

-
濾波器
+關(guān)注
關(guān)注
162文章
8220瀏覽量
184284 -
FIR
+關(guān)注
關(guān)注
4文章
151瀏覽量
34931
發(fā)布評(píng)論請(qǐng)先 登錄
中科億海微SiP微系統(tǒng)——EQ6HL45S-M1CSG400芯片
中科億海微Link-Sea-H6A圖像處理套件
中科億海微SoM模組——基于EQ6HL9S的單軸光纖陀螺板卡
中科億海微SoM模組——FPGA+DSP核心板
深入解讀智多晶FIR IP
如何通過(guò)高效工程評(píng)審EQ流程,實(shí)現(xiàn)PCB零缺陷制造?
Vivado FIR IP核實(shí)現(xiàn)
6020 Ultimate EQ說(shuō)明
使用DP130將4路等差輸入信號(hào)通過(guò)I2C配置對(duì)應(yīng)到4路等差輸出信號(hào),I2C通過(guò)軟件初始化完成不再對(duì)其操作,是否可以?
愛(ài)立信完成6G技術(shù)試驗(yàn)測(cè)試
求助,關(guān)于TLV320AIC3204音調(diào)EQ問(wèn)題求解
基于FPGA實(shí)現(xiàn)FIR數(shù)字濾波器

基于EQ6HL130實(shí)現(xiàn)FIR功能測(cè)試
評(píng)論