2025電賽G題-發揮部分-參數自適應FIR濾波器

(1)測評現場提供由RLC元件(各1個)組成的“未知模型電路”。 按照圖3所示,探究裝置連接該電路的輸入和輸出端口,對該電路進行 自主學習、建模(不可借助外部測試設備),2分鐘內完成學習建模,顯 示“未知模型電路”的濾波類型。 圖3 學習、建模

(2)學習建模完成后,斷開探究裝置和“未知模型電路”的端口連接,將信號發生器接入探究裝置和“未知模型電路”的輸入端口(探究裝置輸入 電阻不小于100kΩ),如圖4所示。探究裝置能根據信號發 生器的輸出信號推理生成與“未知模型電路”相同的輸出信 號。要求探究裝置和“未知模型電路”的輸出信號相比波形 無失真、在示波器上能連續同頻穩定顯示(相位無要求), 兩者峰峰值相對誤差絕對值不大于10%。

????????信號發生器的輸出為頻率1kHz~50kHz(步長200Hz)、 圖4 裝置與未知模型電路輸出比對 峰峰值2V的周期信號,類型分別為:正弦波、矩形波(占空比10%~50%、步長5%)和其他 周期信號。?

????????該部分核心功能為對電路進行自主學習、建模。并且要學習的電路對于不同頻率的輸入有著不同的響應。因此,可以使用參數自適應的FIR濾波器來實現該功能。

計算 FIR(有限脈沖響應)濾波器參數是設計 FIR 濾波器的核心步驟,其目標是確定濾波器的單位脈沖響應系數(即抽頭系數),以滿足預設的頻率響應指標(如通帶截止頻率、阻帶截止頻率、通帶波紋、阻帶衰減等)。以下是詳細的計算方法和步驟:

一、FIR 濾波器設計的基本原理

FIR 濾波器的頻率響應由其單位脈沖響應?h(n)?決定,表達式為:H(ejω)=∑n=0N?1?h(n)e?jωn
其中,N?是濾波器的階數(抽頭數),ω?是數字角頻率(范圍?0~π)。
設計的核心是找到合適的?h(n),使?H(ejω)?逼近理想頻率響應。

二、FIR 濾波器參數計算的關鍵步驟

1. 明確設計指標

首先需確定濾波器的基本參數,包括:

  • 濾波器類型:低通、高通、帶通、帶阻。
  • 截止頻率:通帶截止頻率?ωp?(或?fp?)、阻帶截止頻率?ωs?(或?fs?)(需轉換為數字頻率,公式:ω=2πf/fs?,fs??為采樣頻率)。
  • 通帶最大波紋:δp?(允許的通帶衰減波動,如?0.1?dB)。
  • 阻帶最小衰減:As?(阻帶衰減要求,如?60?dB)。
2. 選擇設計方法

FIR 濾波器參數計算的主流方法有以下三種,各有適用場景:

(1)窗函數法(最常用)

原理:用理想濾波器的脈沖響應(非因果、無限長)與窗函數(有限長)卷積,得到有限長、因果的?h(n)。
步驟

  1. 確定理想頻率響應?Hd?(ejω)(如低通濾波器的理想響應為:∣ω∣≤ωc??時為 1,否則為 0)。
  2. 計算理想脈沖響應?hd?(n):通過逆傅里葉變換?hd?(n)=2π1?∫?ππ?Hd?(ejω)ejωndω。
    • 例:理想低通的?hd?(n)=πnsin(ωc?n)?(ωc??為截止角頻率)。
  3. 選擇窗函數(如矩形窗、漢寧窗、漢明窗、布萊克曼窗等),窗函數需滿足:
    • 長度?N(需根據過渡帶寬和阻帶衰減確定,見下文)。
    • 因果性:將?hd?(n)?右移?(N?1)/2?個采樣點,得到?h(n)=hd?(n?(N?1)/2)?w(n),其中?w(n)?為窗函數。

窗函數選擇參考

窗函數過渡帶寬(2π/N)阻帶最小衰減(dB)適用場景
矩形窗1.821過渡帶寬要求嚴,衰減要求低
漢寧窗6.244平衡過渡帶和衰減
漢明窗6.653常用,衰減適中
布萊克曼窗11.074高阻帶衰減要求

階數?N?計算
根據過渡帶寬?Δω=ωs??ωp?,窗函數法的?N≈Δω窗函數過渡帶寬系數?2π?。

  • 例:漢明窗的過渡帶寬系數為 6.6,若?Δω=0.2π,則?N≈6.6×2π/0.2π=66。
(2)頻率采樣法

原理:在頻域對理想頻率響應?Hd?(ejω)?進行等間隔采樣,通過 IDFT 得到?h(n)。
步驟

  1. 確定采樣點數?N(濾波器階數),在?ωk?=2πk/N(k=0,1,...,N?1)處對?Hd?(ejω)?采樣,得到?H(k)。
  2. 為改善過渡帶性能,可在通帶與阻帶之間設置過渡采樣點(非 0 非 1 的中間值)。
  3. 計算?h(n)=N1?∑k=0N?1?H(k)ej2πkn/N。

特點:直接控制頻域采樣點,但過渡帶性能較差,需額外優化過渡點。

(3)等波紋優化設計法(切比雪夫逼近法)

原理:通過極小化最大誤差(通帶和阻帶內的波紋均勻分布),使實際頻率響應與理想響應的偏差最小。
步驟

  1. 定義逼近區間(通帶?[0,ωp?]、阻帶?[ωs?,π])和誤差權重(阻帶誤差權重通常更大)。
  2. 利用 Remez 交換算法求解最優?h(n),該算法通過迭代找到極值點,使誤差在各區間內達到最大值且符號交替。

特點:相同階數下性能優于窗函數法,過渡帶更窄,阻帶衰減更高,但計算更復雜(通常需工具實現)。

其中頻率采樣法易于實現

發揮部分可以分為兩個方向來處理,

對于頻率步進要求較高,意味著計算精度高,計算復雜度高(濾波器階數高于512階),對此,直接使用傅里葉變換進行濾波處理較為合適。

1.測試出電路的幅頻特性曲線(頻率步進應與FFT的頻率精度保持一致);

2.對輸入信號進行傅里葉變換

3.使用幅頻特性曲線對信號頻譜進行加權處理

4.對處理過后的頻譜進行信號重建,使用傅里葉反變換實現


C語言版本 FFT函數
	int NUM = 1 << num;float XI[64] = {0};int i,j,k;      float PLL = Fs / 64;for(i=0;i<NUM;i++) {arr2[i] = arr[(int)(PLL * i)];}for(i=0;i<NUM;i++){XR[i] = (float)arr2[K_VALUE[i]];}int TR, TI, WR, WI;for(int i=0;i<num;i++)            {int B = 1<<i;                  for(int j=0;j<B;j++)            {int p=j*(1<<(num-i-1));       //旋轉因子的系數for(int k=j;k<NUM;k=k+2*B){TR= XR[k];TI=XI[k];WR= XR[k+B]*COS_VALUE[p]+XI[k+B]*SIN_VALUE[p];WI=-XR[k+B]*SIN_VALUE[p]+XI[k+B]*COS_VALUE[p];XR[k]=(TR+WR);XI[k]=TI+WI;XR[k+B]=(TR-WR);XI[k+B]=TI-WI;}}}

對于實時性要求較高(濾波器階數低于512階),意味著較少的計算量,和較低的頻率步進,對此,使用fir濾波器較為合適
通過將幅頻特性曲線轉換到時域,得到FIR濾波器系數。


C語言版本的FIR濾波器系數計算
/*------------數字指標-------------------*/ double 	Wc1=2*pi*((Transfer_param->fp1+Transfer_param->fst1)/2)/Transfer_param->fs;double	Wc2=2*pi*((Transfer_param->fp2+Transfer_param->fst2)/2)/Transfer_param->fs;double  det_W1=2*pi*abs(Transfer_param->fst1-Transfer_param->fp1)/Transfer_param->fs;           double  det_W2=2*pi*abs(Transfer_param->fst2-Transfer_param->fp2)/Transfer_param->fs;			double 	det_W=det_W1;if((Filter_type==BANDPASSFILTER)||(Filter_type==BANDSTOPFILTER)) {det_W=det_W1>det_W2?det_W2:det_W1;}int n;int N;int window; /*窗函數選擇--------------------------------------------------------------------------- */ // 根據衰as減選擇窗 switch((int)(Transfer_param->ast/10)){case 2:   //20db N=(int)1.8*pi/det_W;if(N!=1.8*pi/det_W)N++;window=Rectangle;break;	case 3://30db N=(int)6.1*pi/det_W;if(N!=6.1*pi/det_W)N++;window=triangle;break;case 4: //40db N=(int)(6.2*pi/det_W);if(N!=6.2*pi/det_W)N++;window=Hanning;break;case 5 ://50db N=(int)(6.6*pi/det_W);if(N!=6.6*pi/det_W)N++;window=Hamming;break;case 7 ://70dbN=(int)11*pi/det_W;if(N!=11*pi/det_W)N++;window=Blackman;break;default: return 0;	}int const const_N=N;switch(window){case Rectangle:       for(n=0;n<N;n++){win_param[n]=1;  			}break;case triangle:for(n=0;n<N;n++){win_param[n]=1; 	}break;case Hanning:  for(n=0;n<N;n++){win_param[n]=0.5*(1-cos(2*pi*n/(N-1))); 			}break;case Hamming :for(n=0;n<N;n++){win_param[n]=0.54-0.46*cos(2*pi*n/(N-1));}  		break;case Blackman :for(n=0;n<N;n++){win_param[n]=0.42-0.5*cos((4*pi*n/(N-1))-0.08*(4*pi*n/(N-1))); 			}  		break;default:return 0;	}/*計算FIR的傳遞函數*/ Filter_h.N=N;for(n=0;n<N;n++) {Filter_h.Hn[n] = h_lixiang[n]*win_param[n];}return &Filter_h;	   

另外對于32單片機,實時處理信號較為困難,一般使用乒乓操作對數據進行處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93941.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93941.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux基礎 -- 內核快速向用戶態共享內核變量方案之ctl_table

系統化、可直接上手的 /proc/sys sysctl 接口使用文檔。內容涵蓋&#xff1a;機制原理、適用場景、ctl_table 字段詳解、常用解析器&#xff08;proc_handler&#xff09;完整清單與選型、最小樣例到進階&#xff08;范圍校驗、毫秒→jiffies、字符串、數組、每網絡命名空間&a…

【RH124知識點問答題】第3章 從命令行管理文件

1. 怎么理解“Linux中一切皆文件”&#xff1f;Linux是如何組織文件的&#xff1f;&#xff08;1&#xff09;“Linux中一切皆文件”的理解和文件組織&#xff1a;在Linux中&#xff0c;“一切皆文件”指的是Linux將各種設備、目錄、文件等都視為文件對象進行管理。這種統一的文…

練習javaweb+mysql+jsp

只是簡單的使用mysql、簡單的練習。 有很多待完善的地方&#xff0c;比如list的servlet頁面&#xff0c;應該判斷有沒有用戶的。 比如list.jsp 應該循環list而不是寫死 index.jsp 樣式可以再優化一下的。比如按鈕就特丑。 本文展示了一個簡單的MySQL數據庫操作練習項目&#x…

使用Nginx部署前端項目

使用Nginx部署前端項目 一、總述二、具體步驟 2.1解壓2.2將原來的html文件夾的文件刪除&#xff0c;將自己的靜態資源文件放進去&#xff0c;點擊nginx.exe文件啟動項目2.3查看進程中是否有ngix的兩個進程在瀏覽器中輸入“localhost:端口號”即可訪問。 2.4端口被占用情況處理 …

【論文學習】KAG論文翻譯

文章目錄KAG: Boosting LLMs in Professional Domains via Knowledge Augmented Generation摘要1 引言2 方法論2.1 LLM友好型知識表示2.2 互索引機制2.2.1 語義分塊2.2.2 帶豐富語境的的信息抽取2.2.3 領域知識注入與約束2.2.4 文本塊向量與知識結構的相互索引2.3 邏輯形式求解…

24黑馬SpringCloud安裝MybatisPlus插件相關問題解決

目錄 一、前言 二、菜單欄沒有Other 三、Config Database里的dburl需要加上時區等配置 一、前言 在學習24黑馬SpringCloud的MybatisPlus-12.拓展功能-代碼生成器課程時&#xff0c;發現由于IDEA版本不同以及MybatisPlus版本更新會出現與視頻不一致的相關問題&#xff0c;本博…

人工智能賦能聚合物及復合材料模型應用與實踐

近年來&#xff0c;生成式人工智能&#xff08;包括大語言模型、分子生成模型等&#xff09;在聚合物及復合材料領域掀起革命性浪潮&#xff0c;其依托數據驅動與機理協同&#xff0c;從海量數據中挖掘構效關系、通過分子結構表示&#xff08;如 SMILES、BigSMILES&#xff09;…

MyBatis-Plus3

一、條件構造器和常用接口 1.wapper介紹 MyBatis-Plus 提供了一套強大的條件構造器&#xff08;Wrapper&#xff09;&#xff0c;用于構建復雜的數據庫查詢條件。Wrapper 類允許開發者以鏈式調用的方式構造查詢條件&#xff0c;無需編寫繁瑣的 SQL 語句&#xff0c;從而提高開…

GXP6040K壓力傳感器可應用于醫療/汽車/家電

GXP6040K 系列壓力傳感器是一種超小型&#xff0c;為設備小型化做出貢獻的高精度半導體壓力傳感器&#xff0c;適用于生物醫學、汽車電子、白色家電等領域。采用標準的SOP6 和 DIP6 封裝形式&#xff0c;方便用戶進行多種安裝方式。 內部核心芯片是利用 MEMS&#xff08;微機械…

Android ConstraintLayout 使用詳解

什么是 ConstraintLayoutConstraintLayout&#xff08;約束布局&#xff09;是 Android Studio 2.2 引入的一種新型布局&#xff0c;現已成為 Android 開發中最強大、最靈活的布局管理器之一。它結合了 RelativeLayout 的相對定位和 LinearLayout 的線性布局優勢&#xff0c;能…

Unity3D數學第三篇:坐標系與變換矩陣(空間轉換篇)

Unity3D數學第一篇&#xff1a;向量與點、線、面&#xff08;基礎篇&#xff09; Unity3D數學第二篇&#xff1a;旋轉與歐拉角、四元數&#xff08;核心變換篇&#xff09; Unity3D數學第三篇&#xff1a;坐標系與變換矩陣&#xff08;空間轉換篇&#xff09; Unity3D數學第…

UV安裝并設置國內源

文章目錄一、UV下載1.官方一鍵安裝2.github下載安裝二、更換國內鏡像源&#xff08;加速下載&#xff09;方法1&#xff1a;臨時環境變量&#xff08;單次生效&#xff09;方法2&#xff1a;永久配置&#xff08;推薦&#xff09;方法3&#xff1a;命令行直接指定源三、驗證鏡像…

1 前言:什么是 CICD 為什么要學 CICD

什么是 CI/CD 我的資源庫網站&#xff1a;https://www.byteooo.cn 在開發階段&#xff0c;許多編譯工具會將我們的源碼編譯可使用的文件。例如 vue-cli 的項目會被 webpack 打包編譯為瀏覽器的文件&#xff0c;Java 項目會被編譯為 .class/jar 文件以供服務器使用。 但是&am…

GitHub 趨勢日報 (2025年07月30日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖3579copyparty752supervision664500-AI-Agents-Projects483awesome403prompt-optim…

“非參數化”大語言模型與RAG的關系?

這個問題觸及了一個關鍵的技術細節&#xff0c;兩者關系密切&#xff0c;但層面不同&#xff1a; “非參數化”大語言模型是一個更廣泛的概念或類別&#xff0c;而RAG&#xff08;Retrieval-Augmented Generation&#xff09;是實現這一概念最主流、最具體的一種技術框架。 您可…

LeetCode Hot 100:15. 三數之和

題目給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請你返回所有和為 0 且不重復的三元組。注意&#xff1a;答案中不可以包含重復的三元組。示例 1&…

銀行回單識別應用場景剖析

銀行回單OCR識別技術通過自動化處理紙質或電子回單中的關鍵信息&#xff0c;顯著提升了金融、企業及個人場景下的數據管理效率。以下是其核心應用場景及價值的詳細剖析&#xff1a;一、企業財務場景自動化賬務處理對賬與記賬&#xff1a;OCR自動提取交易日期、金額、賬號等信息…

React的介紹和特點

1. React是什么&#xff1f; 1.1. React&#xff1a; 用于構建用戶界面的JavaScript庫1.2. React的官網文檔&#xff1a;https://zh-hans.reactjs.org/ 2. React的特點2.1. 聲明式編程&#xff1a; 目前整個大前端開發的模式&#xff1a;Vue、React、Flutter、SwiftUI只需要維護…

內核smmu學習

思考 smmu對外提供功能&#xff0c;設備驅動調用smmu 提供的api來配置頁表&#xff0c;那其他設備是如何和smmu交互的&#xff1f;iommu 作為將不同smmu硬件的一個抽象封裝&#xff0c;其它設備應該只能看到iommu這個封裝層&#xff0c;那么iommu這個子系統是如何進行抽象的&a…

Android Slices:讓應用功能在系統級交互中觸手可及

引言 在當今移動應用生態中&#xff0c;用戶每天要面對數十個甚至上百個應用的選擇&#xff0c;如何讓自己的應用在關鍵時刻觸達用戶&#xff0c;成為開發者面臨的重要挑戰。Google在Android 9 Pie中引入的Slices技術&#xff0c;正是為了解決這一痛點而生。本文將全面介紹And…