0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的IIR數(shù)字濾波器設(shè)計

FPGA之家 ? 來源: FPGA開源工作室 ? 2023-09-07 09:51 ? 次閱讀

IIR(Infinite Impulse Response)無線脈沖響應(yīng)濾波器。

系統(tǒng)傳遞函數(shù)為:

3cd08684-4d0f-11ee-a25d-92fbcf53809c.png

系統(tǒng)的差分方程可寫為:

3ce7a346-4d0f-11ee-a25d-92fbcf53809c.png

IIR優(yōu)缺點(diǎn):
1)在相同的幅頻條件下,濾波器階數(shù)比FIR濾波器低。
2)IIR濾波器占用的硬件資源比較少(相比FIR濾波器)。
3)不具備嚴(yán)格的線性相位特性。

1 IIR數(shù)字濾波器的基本結(jié)構(gòu)及類型

3cf4afaa-4d0f-11ee-a25d-92fbcf53809c.png

圖1 直接I型

3d069896-4d0f-11ee-a25d-92fbcf53809c.png

圖2 直接II型

3d279e9c-4d0f-11ee-a25d-92fbcf53809c.png

圖3 級聯(lián)型

3d344886-4d0f-11ee-a25d-92fbcf53809c.png

圖4 并聯(lián)型

2 設(shè)計目標(biāo)

采用matlab buffer函數(shù)設(shè)計一個IIR濾波器低通濾波器,通帶截止頻率為1khz,輸入信號為1khz+3khz sin波形,經(jīng)過IIR濾波器后輸出為1KHZ sin波,其他不做要求。(本文只對IIR設(shè)計思想進(jìn)行驗證不做性能要求)。

3 matlab的設(shè)計驗證

Matlab源碼:

%參數(shù)定義

FS =44100; %Sample rate Frequncy
fc = 1000; %1khz
fe = 3000; %外部輸入信號  3khz
N = 1024;
Q =16;

%波形產(chǎn)生

sin_osc =sin(t*fc);
sin_e =sin(t*fe);
sin_add = sin_osc+sin_e;

%IIR 濾波器系數(shù)(低通濾波器)

[b a] = butter(3,fc/(FS/2),'low');
 
%濾波(混頻后)
y = filter(b,a,sin_add);
 
f_osc =fft(sin_osc,N);
f_osc=20*log(abs(f_osc))/log(10);        %換算成dBW單位
ft=[0:(FS/N):FS/2];              %轉(zhuǎn)換橫坐標(biāo)以Hz為單位
f_osc=f_osc(1:length(ft));

%濾波器系數(shù)量化

Mab =max(max(abs(a),abs(b)));
%16bit 量化
Qb = round((b/Mab)*(2^(Q-1)-1));
Qa = round((a/Mab)*(2^(Q-1)-1));
%%%%
Qm =floor(log2(Mab/a(1)));
if Qm

%繪圖
%時域波形圖

figure(1),
hold on
subplot(221),plot(t(1:128),sin_osc(1:128),'-');
legend('sin 1khz');title('sin 1khz');
subplot(222),plot(t(1:128),sin_e(1:128),'-');
legend('sin 3khz');title('sin 3khz');
subplot(223),plot(t(1:128),sin_add(1:128),'-');
legend('sin 1khz add 3khz');title('sin 1khz add 3khz');
subplot(224),plot(t(1:128),y(1:128),'-');
legend('LPF 結(jié)果');title('LPF 結(jié)果');
grid;
hold off

%頻域波形

figure(2),
hold on
subplot(221);plot(ft,f_osc);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖 2KHZ','fontsize',8);legend('sinosc');
subplot(222);plot(ft,f_e);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖3KHZ','fontsize',8);legend('sine');
subplot(223);plot(ft,f_add);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖2KHZ 和 3KHZ','fontsize',8);legend('sin add');
subplot(224);plot(ft,y_f);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖濾波后','fontsize',8);legend('LPF結(jié)果');
hold off

%幅頻響應(yīng)

figure(3);
subplot(211);stem(Fb);
title('Fb單位抽樣響應(yīng)','fontsize',8);
subplot(212);plot(f,mag);
xlabel('頻率(Hz)','fontsize',8);
ylabel('幅度(dB)','fontsize',8);
title('freqz()幅頻響應(yīng)','fontsize',8);

3d4ef2d0-4d0f-11ee-a25d-92fbcf53809c.jpg

圖5 matlab時域波形

如圖5所示,(5,1)波形加(5,2)波形得到(5,3)波形,經(jīng)過IIR濾波器后得到(5,4)時域波形。

3d81f5e0-4d0f-11ee-a25d-92fbcf53809c.jpg

圖6 matlab頻域分析

如圖6所示,(6,3)與(6,4)相比3khz大概被削弱25DB左右。

3da0e02c-4d0f-11ee-a25d-92fbcf53809c.jpg
圖7 IIR幅頻響應(yīng)分析

如圖7所示,通過幅頻響應(yīng)(7,2)可知3khz所在位置大概被削弱25DB。

4 FPGA設(shè)計驗證

FPGA IIR.v設(shè)計源碼:

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

wire signed [15:0] b1,b2,b3,b4;
wire signed [15:0] a2,a3,a4;

wire signed [31:0] xn;
reg signed [31:0] xn1,xn2,xn3;
reg signed [31:0] yn,yn1,yn2,yn3;
reg signed [47:0] r_x1;
reg signed [47:0] r_x2;
reg signed [47:0] r_y;
reg signed [47:0] r_s;
reg signed [47:0] r_s1;

//coffe b
assign b1 = 3;
assign b2 = 8;
assign b3 = 8;
assign b4 = 3;

//coffe a
assign a2 = -22243;
assign a3 = 20231;
assign a4 = -6159;

assign xn = pcm_in;
assign pcm_out = yn;


always @(posedge mclk or negedge reset_n) begin
  if(reset_n == 1'b0) begin
    i <= 0;
xn1 <= 0;
xn2 <= 0;
xn3 <= 0;

yn <=  0;
yn1 <= 0;
yn2 <= 0;
yn3 <= 0;

r_x1 <= 0;
r_x2 <= 0;
r_y  <= 0;
r_s  <= 0;
r_s1 <= 0;
  end
  else begin
    i<= i+1;
  if(i==1) begin
  r_x1 <= b1*(xn + xn3);
  r_x2 <= b2*(xn1 + xn2);//Zero(n)
  r_y  <= a2*yn1+a3*yn2+a4*yn3;//Pole(n)
  $display("r_x1 = %d,r_x2 = %d,r_y = %d",r_x1,r_x2,r_y);
end
if(i==2) begin
   r_s <= r_x1 +r_x2 - r_y;//8192y(n) = Zero(n)-Pole(n)
   $display("%d",r_s);
end
if(i==3) r_s1 <= (r_s>>13);
if(i==4) yn <= r_s1[31:0];
if(i==5) begin //pipeline
  xn1 <= xn;
  xn2 <= xn1;
  xn3 <= xn2;
  
  yn1 <= yn;
  yn2 <= yn1;
  yn3 <= yn2;
end
  end
end

Endmodule

實驗結(jié)果:
Modelsim

3dac0358-4d0f-11ee-a25d-92fbcf53809c.jpg

圖8 modelsim 時域波形

由圖8可知,pcm_out1(1khz + 3khz)經(jīng)過IIR濾波器后濾除了3khz,設(shè)計成功。
Matlab結(jié)果分析:
3de160d4-4d0f-11ee-a25d-92fbcf53809c.jpg

圖9 FPGA輸入波形matlab時域分析

3e0768c4-4d0f-11ee-a25d-92fbcf53809c.jpg

圖10 FPGA結(jié)果數(shù)據(jù)分析

由圖10的頻域分析結(jié)果可知3khz大概被削弱25db左右,設(shè)計成功。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1643

    文章

    21983

    瀏覽量

    614621
  • matlab
    +關(guān)注

    關(guān)注

    188

    文章

    2998

    瀏覽量

    233383
  • 濾波器
    +關(guān)注

    關(guān)注

    162

    文章

    8095

    瀏覽量

    181209
  • 數(shù)字濾波器
    +關(guān)注

    關(guān)注

    4

    文章

    272

    瀏覽量

    47521
  • IIR
    IIR
    +關(guān)注

    關(guān)注

    1

    文章

    62

    瀏覽量

    23110

原文標(biāo)題:基于FPGA IIR數(shù)字濾波器的設(shè)計

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于FPGA和MATLAB實現(xiàn)IIR數(shù)字濾波器的設(shè)計和仿真驗證分析

    IIR數(shù)字濾波器在很多領(lǐng)域中都有著廣闊的應(yīng)用。與FIR數(shù)字濾波器相比,IIR數(shù)字濾波器可以用較低的階數(shù)獲得較高的選擇性,而且所用存儲單元少,
    發(fā)表于 07-23 17:05 ?3142次閱讀
    基于<b class='flag-5'>FPGA</b>和MATLAB實現(xiàn)<b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>的設(shè)計和仿真驗證分析

    IIR數(shù)字濾波器的Matlab和FPGA實現(xiàn)

    本帖最后由 eehome 于 2013-1-5 10:01 編輯 IIR數(shù)字濾波器的Matlab和FPGA實現(xiàn)
    發(fā)表于 08-20 22:16

    基于FPGAIIR數(shù)字濾波器的設(shè)計和實現(xiàn)方法介紹

    1.引言數(shù)字濾波器在通信、自動控制、雷達(dá)、軍事、航空航天、醫(yī)療、家用電器等眾多領(lǐng)域得到了廣泛的應(yīng)用。其中IIR數(shù)字濾波器和FIR數(shù)字濾波器是目前人們使用較多的兩種。
    發(fā)表于 07-08 07:18

    基于FPGAIIR數(shù)字濾波器的快捷設(shè)計

    詳細(xì)討論了IIR數(shù)字濾波器從MATLAB設(shè)計到FPGA實現(xiàn)的整個過程,提出了用遞推算法解決實現(xiàn)過程中一些關(guān)鍵問題的方法,并在modelsim上進(jìn)行了仿真袁最終在以Xilinx公司的FPGA
    發(fā)表于 03-07 10:09 ?7次下載

    IIR數(shù)字濾波器的設(shè)計

    實驗 IIR數(shù)字濾波器的設(shè)計 一、實驗?zāi)康?1.掌握雙線性變換法及脈沖相應(yīng)不變法設(shè)計IIR數(shù)字濾波器的具體設(shè)計方法及其原理,熟悉用雙線性變換法及脈沖響應(yīng)不變法設(shè)計
    發(fā)表于 05-10 09:46 ?134次下載

    IIR數(shù)字濾波器設(shè)計-在FPGA上實現(xiàn)任意階IIR數(shù)字濾波器

    IIR數(shù)字濾波器設(shè)計-在FPGA上實現(xiàn)任意階IIR數(shù)字濾波器 摘 要:本文介紹了一種采用級聯(lián)結(jié)構(gòu)在FP
    發(fā)表于 01-16 09:45 ?2680次閱讀
    <b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>設(shè)計-在<b class='flag-5'>FPGA</b>上實現(xiàn)任意階<b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>

    FPGA設(shè)計的四階IIR數(shù)字濾波器

    FPGA設(shè)計的四階IIR數(shù)字濾波器 常用的數(shù)字濾波器有FIR數(shù)字濾波器IIR
    發(fā)表于 01-16 18:15 ?1535次閱讀
    用<b class='flag-5'>FPGA</b>設(shè)計的四階<b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>

    IIR數(shù)字濾波器設(shè)計

    介紹IIR數(shù)字濾波器設(shè)計的相關(guān)知識 有興趣的下來看看
    發(fā)表于 12-25 10:39 ?11次下載

    基于LabVIEW平臺的IIR數(shù)字濾波器設(shè)計

    基于LabVIEW平臺的IIR數(shù)字濾波器設(shè)計
    發(fā)表于 01-20 16:27 ?43次下載

    IIR數(shù)字濾波器FPGA實現(xiàn)

    本文檔內(nèi)容介紹了基于IIR數(shù)字濾波器FPGA實現(xiàn),供參考
    發(fā)表于 03-02 13:45 ?36次下載

    基于級聯(lián)結(jié)構(gòu)和VHDL語言的IIR數(shù)字濾波器FPGA上實現(xiàn)設(shè)計

    IIR數(shù)字濾波器在很多領(lǐng)域中有著廣闊的應(yīng)用。與FIR數(shù)字濾波器相比,它可以用較低的階數(shù)獲得高選擇性,所用存儲單元少,經(jīng)濟(jì)而效率高,在相同門級規(guī)模和相同時鐘速度下可以提供更好的帶外衰減特性。下面介紹一種在
    發(fā)表于 03-04 10:32 ?2456次閱讀
    基于級聯(lián)結(jié)構(gòu)和VHDL語言的<b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>在<b class='flag-5'>FPGA</b>上實現(xiàn)設(shè)計

    如何使用FPGA實現(xiàn)IIR數(shù)字濾波器的設(shè)計

    數(shù)字濾波器在通信、自動控制、雷達(dá)、軍事、航空航天、醫(yī)療、家用電器等眾多領(lǐng)域得到了廣泛的應(yīng)用。其中IIR數(shù)字濾波器和FIR數(shù)字濾波器是目前人們使用較多的兩種。
    發(fā)表于 08-06 18:50 ?3次下載
    如何使用<b class='flag-5'>FPGA</b>實現(xiàn)<b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>的設(shè)計

    IIR數(shù)字濾波器FPGA實現(xiàn)

    一、關(guān)于IIR數(shù)字濾波器 當(dāng)然關(guān)于IIR濾波器的知識,想必大家在教材上都已經(jīng)很熟了,這里我就簡單說一下自己的理解好了。 正如前面說的,IIR
    的頭像 發(fā)表于 04-04 12:21 ?1.3w次閱讀
    <b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>的<b class='flag-5'>FPGA</b>實現(xiàn)

    FIR數(shù)字濾波器設(shè)計

    數(shù)字濾波器的輸入輸出均為數(shù)字信號,信號通過數(shù)字濾波器后,可以改變頻率成分的相對比例或濾除某些頻率成分。數(shù)字濾波器可以分為IIR
    的頭像 發(fā)表于 04-05 09:47 ?5984次閱讀

    IIR數(shù)字濾波器時域濾波效果

    電子發(fā)燒友網(wǎng)站提供《IIR數(shù)字濾波器時域濾波效果.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 09:58 ?1次下載
    <b class='flag-5'>IIR</b><b class='flag-5'>數(shù)字濾波器</b>時域<b class='flag-5'>濾波</b>效果

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品