Python數字信號處理之最佳等波紋濾波器階數估計原理

Matlab中的階數估計函數

在MATLAB中,使用firpmord函數可以估算等波紋FIR濾波器的最小階數。該方法基于Parks-McClellan算法,通過通帶和阻帶的頻率邊界、幅度響應及允許的最大誤差來自動計算參數。

rp = 3;           % Passband ripple in dB 
rs = 40;          % Stopband ripple in dB
fs = 2000;        % Sampling frequency
f = [500 600];    % Cutoff frequencies
a = [1 0];        % Desired amplitudes
dev = [(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)]; 
[n,fo,ao,w] = firpmord(f,a,dev,fs);
b = firpm(n,fo,ao,w);
freqz(b,1,1024,fs)
title('Lowpass Filter Designed to Specifications')
  • 輸入參數f(頻率邊界),a(幅度),dev(誤差),fs(采樣頻率,可選)
  • 輸出參數n(估算的階數),fo(歸一化頻率邊界),ao(幅度響應),w(加權系數)

階數估計公式

對于給定的通帶波紋大小xdB,阻帶衰減
在這里插入圖片描述

注意,上述幾個值不是獨立得,任意4個值就能確定5個。用于預測所需濾波器長度的公式清楚地表明了這一點。Kaiser開發了以下近似關系來估計滿足規范的濾波器長度:

N ≈ ? 20 log ? 10 ( δ p δ s ) ? 13 14.6 Δ F + 1 N \approx \frac{-20\log_{10}(\sqrt{\delta_p\delta_s})-13}{14.6\Delta F}+1 N14.6ΔF?20log10?(δp?δs? ?)?13?+1

其中 Δ F = ( ω s ? ω p ) / ( 2 π ) \begin{aligned}\Delta F = (\omega_s - \omega_p) / (2\pi)\end{aligned} ΔF=(ωs??ωp?)/(2π)?,即過渡帶帶寬。Herrmann等人[3]給出了一個更準確的公式

N ≈ D ∞ ( δ p , δ s ) ? f ( δ p , δ s ) ( Δ F ) 2 Δ F + 1 N \approx \frac{D_{\infty}(\delta_p, \delta_s) - f(\delta_p, \delta_s)(\Delta F)^2}{\Delta F} + 1 NΔFD?(δp?,δs?)?f(δp?,δs?)(ΔF)2?+1

其中:

D ∞ ( δ p , δ s ) = ( 0.005309 ( log ? 10 δ p ) 2 + 0.07114 log ? 10 δ p ? 0.4761 ) log ? 10 δ s ? ( 0.00266 ( log ? 10 δ p ) 2 + 0.5941 log ? 10 δ p + 0.4278 ) , \begin{aligned}\\D_{\infty}(\delta_p, \delta_s) &= (0.005309 (\log_{10} \delta_p)^2 + 0.07114 \log_{10} \delta_p - 0.4761) \log_{10} \delta_s \\\\&- (0.00266 (\log_{10} \delta_p)^2 + 0.5941 \log_{10} \delta_p + 0.4278),\\\end{aligned} D?(δp?,δs?)?=(0.005309(log10?δp?)2+0.07114log10?δp??0.4761)log10?δs??(0.00266(log10?δp?)2+0.5941log10?δp?+0.4278),?

f ( δ p , δ s ) = 11.01217 + 0.51244 ( log ? 10 δ p ? log ? 10 δ s ) f(\delta_{p},\delta_{s})=11.01217+0.51244(\log_{10}\delta_{p}-\log_{10}\delta_{s}) f(δp?,δs?)=11.01217+0.51244(log10?δp??log10?δs?)

這些公式假設δs<δp。否則,必須交換δp和δs。該公式在信號處理工具箱中的Matlab函數中實現。

請注意,上述估計公式都表明濾波器長度N和過渡寬度?F成反比(對于(16),當 Δ F \Delta F ΔF變為0時)。這與最大平坦對稱濾波器(maximally flat symmetric filters)的對應關系形成鮮明對比。對于具有固定δp和δs的等波紋濾波器,?F減小為1/N;而對于最大平坦濾波器,?F減小為 1 / N 1/\sqrt{N} 1/N ?

參考文獻

  1. remez講座:https://eeweb.engineering.nyu.edu/iselesni/EL713/remez/remez.pdf
  2. matlab函數(firpmord)說明:https://ww2.mathworks.cn/help/signal/ref/firpmord.html
  3. Python scipy庫文檔:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.remez.html
  4. O. Herrmann, L. R. Rabiner, and D. S. K. Chan. Practical design rules for optimum finite impulse response lowpass digital filters. The Bell System Technical Journal, 52:769–799, 1973.

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

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

相關文章

JumpServer基礎功能介紹演示

堡壘機可以讓運維人員通過統一的平臺對設備進行維護&#xff0c;集中的進行權限的管理&#xff0c;同時也會對每個操作進行記錄&#xff0c;方便后期的溯源和審查&#xff0c;JumpServer是由飛致云推出的開源堡壘機&#xff0c;通過簡單的安裝配置即可投入使用&#xff0c;本文…

C++和C的區別

C和C語言雖然共享相似的語法&#xff0c;但在設計理念和功能特性上有顯著區別。以下是兩者的主要差異&#xff1a; 1. 編程范式 C&#xff1a;純過程式編程&#xff0c;強調函數和步驟。C&#xff1a;支持多范式&#xff0c;包括面向對象編程&#xff08;類、繼承、多態&…

Android LeakCanary 使用 · 原理詳解

一、簡介 LeakCanary 是 Square 公司開源的 Android 內存泄漏檢測工具&#xff0c;通過自動化監控和堆轉儲分析&#xff0c;幫助開發者快速定位內存泄漏根源。其核心設計輕量高效&#xff0c;已成為 Android 開發中必備的調試工具。 二、使用方式 1. 集成步驟 在項目的 buil…

每日一題---dd愛框框(Java中輸入數據過多)

dd愛框框 實例&#xff1a; 輸入&#xff1a; 10 20 1 1 6 10 9 3 3 5 3 7 輸出&#xff1a; 3 5 這道題要解決Java中輸入的數過多時&#xff0c;時間不足的的問題。 應用這個輸入模板即可解決&#xff1a; Java中輸入大量數據 import java.util.*; import java.io.*;pu…

redis部署架構

一、redis多實例部署 實例1 安裝目錄&#xff1a;/app/6380 數據目錄&#xff1a;/app/6380/data 實例2 安裝目錄&#xff1a;/app/6381 數據目錄&#xff1a;/app/6381/data 1、創建實例安裝目錄 2、拷貝實例的配置文件 3、編輯實例的配置文件 第…

vscode python相對路徑的問題

vscode python相對路徑的問題 最近使用使用vscode連接wsl2寫python時&#xff0c;經常遇到找不到包中的方法的問題&#xff0c;最終發現vscode在執行python代碼時目錄不是從當前python文件開始算起&#xff0c;而是從當前工作區的目錄開始算起&#xff0c;比如說我打開的是/ho…

面試vue2開發時怎么加載編譯速度(webpack)

可以輸入命令獲取默認 webpack 設置 vue inspect > set.js 1.使用緩存 configureWebpack: {cache: {type: filesystem, // 使用文件系統緩存類型buildDependencies: {config: [__filename] // 緩存依賴&#xff0c;例如webpack配置文件路徑}}}, 2.啟用 vue-loader (測試明…

uv命令介紹(高性能Python包管理工具,旨在替代pip、pip-tools和virtualenv等傳統工具)

文章目錄 **主要功能**1. **快速安裝和管理 Python 包**2. **生成和管理鎖文件 (requirements.lock)**3. **創建虛擬環境**4. **與 poetry 兼容** **核心優勢**1. **極快的速度**&#xff1a;基于 Rust 實現&#xff0c;利用多線程和緩存大幅加速依賴解析。2. **輕量且獨立**&a…

企業數據管理的成本與效率革命

在數字經濟時代&#xff0c;企業每天產生的數據量正以指數級速度增長。IDC預測&#xff0c;到2025年全球數據總量將突破180 ZB。面對海量數據存儲需求和有限的IT預算&#xff0c;企業逐漸意識到&#xff1a;將每字節數據都存儲在昂貴的高性能存儲設備上&#xff0c;既不經濟也不…

深度學習-服務器訓練SparseDrive過程記錄

1、cuda安裝 1.1 卸載安裝失敗的cuda 參考&#xff1a;https://blog.csdn.net/weixin_40826634/article/details/127493809 注意&#xff1a;因為/usr/local/cuda-xx.x/bin/下沒有卸載腳本&#xff0c;很可能是apt安裝的&#xff0c;所以通過執行下面的命令刪除&#xff1a; a…

洛谷每日1題-------Day20__P1401 [入門賽 #18] 禁止在 int 乘 int 時不開 long long

題目描述 在比賽中&#xff0c;根據數據范圍&#xff0c;分析清楚變量的取值范圍&#xff0c;是非常重要的。int 類型變量與 int 類型變量相乘&#xff0c;往往可能超出 int 類型可以表示的取值范圍。 現在&#xff0c;給出兩個 int 類型變量 x,y 及其取值范圍&#xff0c;請…

3.15刷題

P6337 [COCI 2007/2008 #2] CRNE - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;//橫加豎 最大。n/2,n/21if(n%20){cout<<(n/21)*(n/21);}else cout<<(n/22)*(n/21);return 0; }P6338 [COCI 2007/2008 #2] PRVA - 洛…

Browser Copilot 開源瀏覽器擴展,使用現有或定制的 AI 助手來完成日常 Web 應用程序任務。

一、軟件介紹 文末提供源碼和開源擴展程序下載 Browser Copilot 是一個開源瀏覽器擴展&#xff0c;允許您使用現有或定制的 AI 助手來幫助您完成日常 Web 應用程序任務。 目標是提供多功能的 UI 和簡單的框架&#xff0c;以實現和使用越來越多的 copilots&#xff08;AI 助手&…

selenium等待

通常代碼執行的速度?頁?渲染的速度要快,如果避免因為渲染過慢出現的?動化誤報的問題呢?可以使?selenium中提供的三種等待?法: 1. 隱式等待(Implicit Wait) 隱式等待適用于全局,它告訴 WebDriver 在查找元素時等待一定的時間,直到元素出現。 如果超時,WebDriver 不…

解鎖C++:指針與數組、字符串的深度探秘

目錄 一、指針與數組:親密無間的伙伴 1.1 指針是數組的 “快捷通道” 1.2 數組名與指針:微妙的差別 1.3 動態數組:指針大顯身手 二、指針與字符串:千絲萬縷的聯系 2.1 字符指針與 C 風格字符串 2.2 指針與 std::string 類 2.3 字符串常量與指針 三、指針在數組和字…

20250315-OpenAI-AgentSDK實驗

湊熱鬧。可以用GLM跑。 這里暫時用GLM底座“魔鬼修改”&#xff0c;代碼庫僅供參考&#xff08;共同進步吧&#xff09; openai-agents-python-glm: 基于GLM底座運行SDK&#xff0c;學習實驗SDK內的mAGT功能。https://gitee.com/leomk2004/openai-agents-python-glm 自言自語&a…

Qt QML實現彈球消磚塊小游戲

前言 彈球消磚塊游戲想必大家都玩過&#xff0c;很簡單的小游戲&#xff0c;通過移動擋板反彈下落的小球&#xff0c;然后撞擊磚塊將其消除。本文使用QML來簡單實現這個小游戲。 效果圖&#xff1a; 正文 代碼目錄結構如下&#xff1a; 首先是小球部分&#xff0c;邏輯比較麻…

04_Linux驅動_05_pinctrl子系統

以下代碼都在pinctrl相關的驅動函數和設備樹中 pinctrl-rockchip.c驅動&#xff0c;對應的是那個&#xff08;那些&#xff09;設備樹呢&#xff1f; 答案&#xff1a;通過.compatible "rockchip,rk3568-pinctrl"連接到rk3568.dtsi根節點下的pinctrl節點 一&#…

Python的那些事第四十五篇:繼承自Nose的測試框架Nose2

Nose2:繼承自Nose的測試框架 摘要 本文深入探討了Nose2這一繼承自Nose的測試框架。在軟件開發過程中,測試是確保代碼質量和穩定性的重要環節,而測試框架為測試工作的開展提供了有力支持。Nose2作為Nose的繼承者,在保留Nose優勢的基礎上進行了諸多改進和擴展,為Python測試…

如何通過 Airbyte 將數據攝取到 Elasticsearch

作者&#xff1a;來自 Elastic Andre Luiz Airbyte 是一個數據集成工具&#xff0c;可自動化并可擴展地將信息從各種來源傳輸到不同的目的地。它使你能夠從 API、數據庫和其他系統提取數據&#xff0c;并將其加載到 Elasticsearch 等平臺&#xff0c;以實現高級搜索和高效分析。…