當(dāng)前位置:首頁 > 公眾號精選 > 全棧芯片工程師
[導(dǎo)讀]基于FPGAIIR數(shù)字濾波器的設(shè)計IIR(InfiniteImpulseResponse)無線脈沖響應(yīng)濾波器。系統(tǒng)傳遞函數(shù)為:系統(tǒng)的差分方程可寫為:IIR優(yōu)缺點:1)在相同的幅頻條件下,濾波器階數(shù)比FIR濾波器低。2)IIR濾波器占用的硬件資源比較少(相比FIR濾波器)。3)不具...

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

IIR(Infinite Impulse Response)無線脈沖響應(yīng)濾波器。
系統(tǒng)傳遞函數(shù)為:



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



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


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


圖1 直接I型


圖2 直接II型


圖3 級聯(lián)型


圖4 并聯(lián)型

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

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


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<log2(Mab/a(1))
Qm = Qm 1;
end
Qm = 2^Qm;
Qb1=round(b/Qm*(2^(Q-1)-1));
Qa1=round(a/Qm*(2^(Q-1)-1));
%繪圖
%時域波形圖


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);


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



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



圖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波



圖8 modelsim 時域波形由圖8可知,pcm_out1(1khz 3khz)經(jīng)過IIR濾波器后濾除了3khz,設(shè)計成功。
Matlab結(jié)果分析:


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


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


謝閱讀,別走!點贊、關(guān)注、轉(zhuǎn)發(fā)后再走吧






本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉