国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

這篇具有很好參考價值的文章主要介紹了m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.算法描述

2.仿真效果預覽

3.verilog核心程序

4.完整FPGA


1.算法描述

? ? ? ? HBF模塊由半帶濾波器(HBF)和抽取模塊組成。該模塊的任務是實現(xiàn)2倍抽取進一步降低信號采樣速率。由于HBF的沖激響應h(k)除零點外其余偶數(shù)點均為零,所以用HBF實現(xiàn)2倍抽取可以節(jié)省一半的運算量,對增強軟件無線電的實時性非常重要,HBF還具有參數(shù)約束少,設計容易、方便的特點。半帶濾波器的主要作用是濾除信號高頻部分,防止抽取過程后信號發(fā)生頻譜混疊。

? ? 在實際中,需要將輸入信號進行多次濾波和抽取,并逐次降低采樣率,同時也降低對每一級抗混疊濾波器的要求,所以需要使用半帶濾波器進行設計與實現(xiàn)。

阻帶衰減: ? ?≥50dB

通帶不平坦度:≤2dB

? ? ? 通常情況下,半帶濾波器的有三種基本的結構,一般結構,轉(zhuǎn)置結構以及復用結構,下面我們將針對這三種結構的濾波效果以及硬件占用情況進行分析,從而選用最佳的設計方案。

m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

?m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

? ? ? ?頻譜對稱性的特點使得半帶濾波器的時域沖擊響應除極值點以外,在其余所有偶數(shù)點都為零,利用該性質(zhì),可以將運算量降低一半。

? ? ? ?本系統(tǒng),我們將設計的濾波器,首先,我們可以使用和FIR濾波器設計方法相同的方法進行設計。 根據(jù)的設計要求,輸入的信號帶寬為20M,前面設計的NCO,其載波頻率為20M,所以,在進行下變頻的時候,會產(chǎn)生兩倍的頻率分量,具體如下所示:

m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

? ? ? ? 所以,需要設計一個濾波器,其截止頻率可以設定為20M,即大于20M的全部濾除,所以,通過上式,可以將其中的高頻分量濾除掉。

此外,由于你的要求中提高通帶通帶不平坦度≤2dB,那么通常情況下,濾波器的階數(shù)需要設計為中高階,這里,我們選用65階的濾波器。

★半帶濾波器的一般結構

? ? ? 普通濾波器的結構,就是一般的FIR濾波器的結構,只是系數(shù)取一般,進行半帶濾波,根據(jù)半帶濾波的表達式,
m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

?m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構?

這個結構式最傳統(tǒng)的FIR濾波器的結構,我們首先來進行最簡單的結構設計。

然后根據(jù)半帶濾波器的性質(zhì),這里我們只需要做如下的運行進行就可以了。

★半帶濾波器的復用結構

復用結構比較簡單,其主要就是通過計數(shù)器來選擇不同時刻的h0值,然后

其相關理論知識比較簡單,下面我們將在FPGA中實現(xiàn)該算法。

那么這里,我們的濾波器系數(shù)為:

(0),(h15 = -624),(0),(h13 = -1175),(0),(h11 = 1238),(0),(h9 ?= -1238),

(0),(h7 ?= 667),(0),(h5 ?= 965),(0),(h3 ?= -4745),(0),(h1 ?= 20073),(h0 = 27316),

(h1 ?= 20073),(0),(h3 ?= -4745),(0),(h5 ?= 965),(0),(h7 ?= 667),

(0),(h9 ?= -1238),(0),(h11 = 1238),(0),(h13 = -1175),(0),(h15 = -624),(0)

通過一個計數(shù)器,來作為按鍵選擇不同時間的不同系數(shù)的選擇,這里,由于濾波器的系數(shù)由33個。即,計數(shù)器的值從0到32。而系數(shù)為非0的計數(shù)器值為

1,3,5,7,9,11,13,15,16,17,19,21,23,25,27,29,31

因此,在FPGA中,我們可以通過設計一個計數(shù)器進行乘法器的復用。

2.仿真效果預覽

版本vivado2019.2

m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構

3.verilog核心程序

...........................
 
//delay 33 units
integer i;
reg signed[15:0]men_delay[33:1];
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	       for(i=1;i<=33;i=i+1)
			 begin
			 men_delay[i] <= 16'd0;
			 end
	  end
else begin
          men_delay[1] <= i_din;
			 
	       for(i=2;i<=33;i=i+1)
			 begin
			 men_delay[i] <= men_delay[i-1];
			 end			 
     end
end
 
 
//level 1
reg signed[31:0]reg_adder01[33:1];
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	       for(i=1;i<=33;i=i+1)
			 begin
			 reg_adder01[i] <= 32'd0;
			 end
	  end
else begin
     		 reg_adder01[1] <= 32'd0;
			 reg_adder01[2] <= h15 *  men_delay[2];
			 reg_adder01[3] <= 32'd0;
			 reg_adder01[4] <= h13 *  men_delay[4];
			 
     		 reg_adder01[5] <= 32'd0;
			 reg_adder01[6] <= h11 *  men_delay[6];
			 reg_adder01[7] <= 32'd0;
			 reg_adder01[8] <= h9  *  men_delay[8];		
		
     		 reg_adder01[9] <= 32'd0;
			 reg_adder01[10]<= h7  *  men_delay[10];
			 reg_adder01[11]<= 32'd0;
			 reg_adder01[12]<= h5  *  men_delay[12];
 
     		 reg_adder01[13]<= 32'd0;
			 reg_adder01[14]<= h3  *  men_delay[14];
			 reg_adder01[15]<= 32'd0;
			 reg_adder01[16]<= h1  *  men_delay[16];
			 
//============================================================
     		 reg_adder01[17]<= h0  *  men_delay[17];
//============================================================	
		 
			 reg_adder01[18]<= h1  *  men_delay[18];
			 reg_adder01[19]<= 32'd0;
			 reg_adder01[20]<= h3  *  men_delay[20];	
     		 reg_adder01[21]<= 32'd0;
			 
			 reg_adder01[22]<= h5  *  men_delay[22];
			 reg_adder01[23]<= 32'd0;
			 reg_adder01[24]<= h7  *  men_delay[24];
     		 reg_adder01[25]<= 32'd0;
			 
			 reg_adder01[26]<= h9  *  men_delay[26];
			 reg_adder01[27]<= 32'd0;
			 reg_adder01[28]<= h11 *  men_delay[28];
     		 reg_adder01[29]<= 32'd0;
			 
			 reg_adder01[30]<= h13 *  men_delay[30];
			 reg_adder01[31]<= 32'd0;
			 reg_adder01[32]<= h15 *  men_delay[32];
			 reg_adder01[33]<= 32'd0;		 
     end
end
 
 
//level 2
reg signed[31:0]reg_adder02[9:1];
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	       for(i=1;i<=9;i=i+1)
			 begin
			 reg_adder02[i] <= 32'd0;
			 end
	  end
else begin
     		 reg_adder02[1] <= reg_adder01[2] + reg_adder01[32];
			 reg_adder02[2] <= reg_adder01[4] + reg_adder01[30];
			 reg_adder02[3] <= reg_adder01[6] + reg_adder01[28];
			 reg_adder02[4] <= reg_adder01[8] + reg_adder01[26];
			 
     		 reg_adder02[5] <= reg_adder01[17];
			 
			 reg_adder02[6] <= reg_adder01[10]+ reg_adder01[24];
			 reg_adder02[7] <= reg_adder01[12]+ reg_adder01[22];
			 reg_adder02[8] <= reg_adder01[14]+ reg_adder01[20];		
     		 reg_adder02[9] <= reg_adder01[16]+ reg_adder01[18];
     end
end
 
 
//level 3
reg signed[31:0]reg_adder03[5:1];
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	       for(i=1;i<=5;i=i+1)
			 begin
			 reg_adder03[i] <= 32'd0;
			 end
	  end
else begin
     		 reg_adder03[1] <= reg_adder02[1] + reg_adder02[9];
			 reg_adder03[2] <= reg_adder02[2] + reg_adder02[8];
			 reg_adder03[3] <= reg_adder02[3] + reg_adder02[7];
			 reg_adder03[4] <= reg_adder02[4] + reg_adder02[6];
     		 reg_adder03[5] <= reg_adder02[5];
     end
end
 
//level 4
reg signed[31:0]reg_adder04[3:1];
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	       for(i=1;i<=3;i=i+1)
			 begin
			 reg_adder04[i] <= 32'd0;
			 end
	  end
else begin
     		 reg_adder04[1] <= reg_adder03[1] + reg_adder03[5];
			 reg_adder04[2] <= reg_adder03[2] + reg_adder03[3];
			 reg_adder04[3] <= reg_adder03[4];
     end
end
 
//level 5
reg signed[31:0]r_dout = 32'd0;
reg signed[31:0]o_dout = 32'd0;      
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  r_dout <= 32'd0; 
	  end
else begin
	  r_dout <= reg_adder04[1] + reg_adder04[2] + reg_adder04[3];
     end
end
	
01_115m		 

4.完整FPGA

V文章來源地址http://www.zghlxwxcb.cn/news/detail-400820.html

到了這里,關于m基于FPGA的半帶濾波器verilog設計,對比普通結構以及乘法器復用結構的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • FPGA 的 DSP:Verilog 中的簡單 FIR 濾波器

    FPGA 的 DSP:Verilog 中的簡單 FIR 濾波器

    本項目介紹如何用 Verilog 實現(xiàn)一個帶有預生成系數(shù)的簡單 FIR 濾波器。 簡陋的 FIR 濾波器是 FPGA 數(shù)字信號處理中最基本的構建模塊之一,因此了解如何利用給定的抽頭數(shù)和相應的系數(shù)值組裝一個基本模塊非常重要。因此,在這個關于在 FPGA 上入門 DSP 基礎知識的實用方法迷你系

    2024年03月17日
    瀏覽(44)
  • FPGA 的數(shù)字信號處理:Verilog 實現(xiàn)簡單的 FIR 濾波器

    FPGA 的數(shù)字信號處理:Verilog 實現(xiàn)簡單的 FIR 濾波器

    該項目介紹了如何使用 Verilog 實現(xiàn)具有預生成系數(shù)的簡單 FIR 濾波器。 不起眼的 FIR 濾波器是 FPGA 數(shù)字信號處理中最基本的模塊之一,因此了解如何將具有給定抽頭數(shù)及其相應系數(shù)值的基本模塊組合在一起非常重要。因此,在這個關于 FPGA 上 DSP 基礎實用入門的教程中,將從一

    2024年02月09日
    瀏覽(27)
  • 【Verilog 教程】7.3 Verilog 串行 FIR 濾波器設計

    【Verilog 教程】7.3 Verilog 串行 FIR 濾波器設計

    串行 FIR 濾波器設計 設計說明 設計參數(shù)不變,與并行 FIR 濾波器參數(shù)一致。即,輸入頻率為 7.5 MHz 和 250 KHz 的正弦波混合信號,經(jīng)過 FIR 濾波器后,高頻信號 7.5MHz 被濾除,只保留 250KMHz 的信號。 串行設計,就是在 16 個時鐘周期內(nèi)對 16 個延時數(shù)據(jù)分時依次進行乘法、加法運算

    2024年02月06日
    瀏覽(26)
  • FPGA設計FIR濾波器低通濾波器,代碼及視頻

    FPGA設計FIR濾波器低通濾波器,代碼及視頻

    名稱:FIR濾波器低通濾波器 軟件:Quartus 語言:Verilog/VHDL 本資源含有verilog及VHDL兩種語言設計的工程,每個工程均可實現(xiàn)以下FIR濾波器的功能。 代碼功能: 設計一個8階FIR濾波器(低通濾波器),要求截止頻率為20KHz,使用線性相位結構。 參數(shù)設計方法: 使用matlab軟件設計濾

    2024年02月08日
    瀏覽(27)
  • 基于FPGA的FIR濾波器的實現(xiàn)(5)— 并行結構FIR濾波器的FPGA代碼實現(xiàn)

    基于FPGA的FIR濾波器的實現(xiàn)(5)— 并行結構FIR濾波器的FPGA代碼實現(xiàn)

    并行結構,并行實現(xiàn)濾波器的累加運算,即并行將具有對稱系數(shù)的輸入數(shù)據(jù)進行相加,而后采用多個乘法器并行實現(xiàn)系數(shù)與數(shù)據(jù)的乘法運算,最后將所有乘積結果相加輸出。這種結構具有最高的運行速度,因不需要累加運算,因此系數(shù)時鐘頻率可以與數(shù)據(jù)輸出時鐘頻率保持一

    2024年02月03日
    瀏覽(31)
  • CIC濾波器:原理、設計與FPGA開發(fā)

    CIC濾波器,全稱為累積積分器濾波器(Cascaded Integrator-Comb Filter),是一種數(shù)字濾波器,通常在信號處理和通信系統(tǒng)中使用。本文將詳細介紹CIC濾波器的原理、設計方法以及如何在FPGA上實現(xiàn)。 一、CIC濾波器原理 CIC濾波器由級聯(lián)的積分器和組合器組成,其中積分器用于對輸入信

    2024年02月04日
    瀏覽(23)
  • 基于FPGA的IIR濾波器的實現(xiàn)

    基于FPGA的IIR濾波器的實現(xiàn)

    IIR濾波器原理以及架構在此不做闡述,如何從模擬濾波器到數(shù)字濾波器進行設計,可參考 https://blog.csdn.net/k331922164/article/details/117265704?spm=1001.2101.3001.6661.1utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-117265704-blog-123083652.235%5Ev38%5Epc_relevant_anti_t3_based

    2024年02月04日
    瀏覽(23)
  • Sigma-delta ADC數(shù)字抽取濾波器的verilog與MATLAB設計

    Sigma-delta ADC數(shù)字抽取濾波器的verilog與MATLAB設計

    ? ? ? ?模數(shù)轉(zhuǎn)換器根據(jù)采樣率的不同發(fā)展為奈奎斯特(Nyquist)型和過采樣(Oversampling)型兩大類。奈奎斯特型ADC 采用2-3倍信號帶寬的采樣時鐘進行采樣。過采樣型ADC采用過采樣技術和噪聲整形技術,以遠高于2倍信號帶寬的采樣時鐘進行采樣,將信號中的噪聲搬移到高頻以

    2024年04月26日
    瀏覽(135)
  • Verilog實現(xiàn)多相濾波器

    Verilog實現(xiàn)多相濾波器

    一、多相濾波器,能夠使用較低頻率的時鐘,實現(xiàn)較高數(shù)據(jù)率的數(shù)據(jù)濾波抽取。(咳咳 先正式一點) 在實際的工程應用中, 為了降低硬件實現(xiàn)時的數(shù)據(jù)率, 往往需要進行多相分解。采用多相濾波結構,可利用Q個階數(shù)較低的濾波來實現(xiàn)原本階數(shù)較高的濾波,而且每個分支濾波器

    2024年02月05日
    瀏覽(31)
  • 基于FPGA的FIR低通濾波器實現(xiàn)(附工程源碼),matlab+vivado19.2+simulation

    基于FPGA的FIR低通濾波器實現(xiàn)(附工程源碼),matlab+vivado19.2+simulation

    本文為FPGA實現(xiàn)FIR濾波器仿真過程,附源代碼。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 打開MATLAB在命令行窗口輸入: fadtool 回車后在濾波器設計界面設置濾波器參數(shù)如下 之后點擊如圖標志,設置定點,在菜單欄\\\"目標(R)\\\"出選擇生成對應濾波器系數(shù).COE文件 mat

    2024年02月11日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包