那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA的IIR數字濾波器設計

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

IIR(Infinite Impulse Response)無線脈沖響應濾波器

系統傳遞函數為:

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

系統的差分方程可寫為:

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

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

1 IIR數字濾波器的基本結構及類型

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

圖1 直接I型

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

圖2 直接II型

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

圖3 級聯型

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

圖4 并聯型

2 設計目標

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

3 matlab的設計驗證

Matlab源碼:

%參數定義

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

%波形產生

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

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

[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];              %轉換橫坐標以Hz為單位
f_osc=f_osc(1:length(ft));

%濾波器系數量化

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 結果');title('LPF 結果');
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結果');
hold off

%幅頻響應

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

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

圖5 matlab時域波形

如圖5所示,(5,1)波形加(5,2)波形得到(5,3)波形,經過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幅頻響應分析

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

4 FPGA設計驗證

FPGA IIR.v設計源碼:

`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

實驗結果:
Modelsim

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

圖8 modelsim 時域波形

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

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

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

圖10 FPGA結果數據分析

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21796

    瀏覽量

    605972
  • matlab
    +關注

    關注

    185

    文章

    2980

    瀏覽量

    230993
  • 濾波器
    +關注

    關注

    161

    文章

    7859

    瀏覽量

    178921
  • 數字濾波器
    +關注

    關注

    4

    文章

    270

    瀏覽量

    47092
  • IIR
    IIR
    +關注

    關注

    1

    文章

    62

    瀏覽量

    22878

原文標題:基于FPGA IIR數字濾波器的設計

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

收藏 人收藏

    評論

    相關推薦

    基于FPGA和MATLAB實現IIR數字濾波器的設計和仿真驗證分析

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

    IIR數字濾波器的Matlab和FPGA實現

    本帖最后由 eehome 于 2013-1-5 10:01 編輯 IIR數字濾波器的Matlab和FPGA實現
    發表于 08-20 22:16

    基于FPGAIIR數字濾波器的設計和實現方法介紹

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

    基于FPGAIIR數字濾波器的快捷設計

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

    IIR數字濾波器的設計

    實驗 IIR數字濾波器的設計 一、實驗目的 1.掌握雙線性變換法及脈沖相應不變法設計IIR數字濾波器的具體設計方法及其原理,熟悉用雙線性變換法及脈沖響應不變法設計
    發表于 05-10 09:46 ?134次下載

    IIR數字濾波器設計-在FPGA上實現任意階IIR數字濾波器

    IIR數字濾波器設計-在FPGA上實現任意階IIR數字濾波器 摘 要:本文介紹了一種采用級聯結構在FP
    發表于 01-16 09:45 ?2555次閱讀
    <b class='flag-5'>IIR</b><b class='flag-5'>數字濾波器</b>設計-在<b class='flag-5'>FPGA</b>上實現任意階<b class='flag-5'>IIR</b><b class='flag-5'>數字濾波器</b>

    FPGA設計的四階IIR數字濾波器

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

    IIR數字濾波器設計

    介紹IIR數字濾波器設計的相關知識 有興趣的下來看看
    發表于 12-25 10:39 ?11次下載

    基于LabVIEW平臺的IIR數字濾波器設計

    基于LabVIEW平臺的IIR數字濾波器設計
    發表于 01-20 16:27 ?43次下載

    IIR數字濾波器FPGA實現

    本文檔內容介紹了基于IIR數字濾波器FPGA實現,供參考
    發表于 03-02 13:45 ?36次下載

    基于級聯結構和VHDL語言的IIR數字濾波器FPGA上實現設計

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

    如何使用FPGA實現IIR數字濾波器的設計

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

    IIR數字濾波器FPGA實現

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

    FIR數字濾波器設計

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

    IIR數字濾波器時域濾波效果

    電子發燒友網站提供《IIR數字濾波器時域濾波效果.pdf》資料免費下載
    發表于 11-18 09:58 ?1次下載
    <b class='flag-5'>IIR</b><b class='flag-5'>數字濾波器</b>時域<b class='flag-5'>濾波</b>效果
    威尼斯人娱乐最新地址| 做生意门店风水知识| 大发888娱乐场df888| 百家乐官网路单破| 平昌县| 跨国际百家乐的玩法技巧和规则 | 百家乐官网技巧和规律| 大发888亚洲游戏 网页| 做生意布局风水| 百家乐官网网站那个好| 余杭棋牌世界| 乐天百家乐的玩法技巧和规则| 玩百家乐官网怎么能赢呢| 百家乐官网群号| 网络百家乐官网可靠吗| 888达人| 广州百家乐娱乐场开户注册| 网上百家乐官网群的微博| 百家乐官网娱乐城彩金| 财神娱乐城怎么样| 大发888游戏下载中心| 菲律宾百家乐的说法| 百家乐官网游戏世界视频| 大发888易付168 充值| 福布斯百家乐的玩法技巧和规则| 菲律宾百家乐官网娱乐| 南京市| sz新全讯网网址2290| 如何看百家乐的路纸| 百家乐官网1个人| 长白| 大发888娱乐场ylc8| 新皇冠现金网怎么样| 犹太人百家乐的玩法技巧和规则 | 澳门百家乐官网在线| 海王星线上娱乐| 新澳门娱乐城官网| 久胜线上娱乐| 澳门凯旋门娱乐城| 天博国际娱乐城| 吉安市|