在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

標準頻帶FIR濾波器設計

冬至子 ? 來源:菜J數據分析 ? 作者:菜J數據分析 ? 2023-06-20 11:26 ? 次閱讀

一、定義

FIR(Finite Impulse Response,有限脈沖響應)濾波器是一種數字濾波器,其輸出信號僅由輸入信號和濾波器的沖激響應決定。FIR濾波器的名稱源于其沖激響應是一個有限長度的序列。

FIR濾波器的特點是具有穩定性、線性相位特性和精確控制頻率響應的能力。它通過將輸入信號與濾波器的沖激響應進行卷積運算來實現信號的濾波效果。FIR濾波器在實際應用中廣泛用于濾除噪聲、提取信號特征、平滑數據等。

FIR濾波器的設計涉及選擇濾波器的階數(即沖激響應的長度)和確定濾波器的系數。常見的FIR濾波器設計方法包括窗函數法、頻率采樣法、最小最大法等。設計濾波器的目標是在滿足特定頻率響應需求的同時,盡可能減小濾波器的階數和降低誤差。

FIR濾波器具有一些優點,例如相對較簡單的實現、穩定性和可控的頻率響應。然而,較高階數的FIR濾波器可能需要更多的計算資源,并且在實時應用中可能引入一定的延遲。

二、原理

FIR(Finite Impulse Response,有限脈沖響應)濾波器是一種數字濾波器,其原理可以從時域和頻域兩個方面進行解釋。

2.1時域原理

FIR濾波器的輸出是通過將輸入信號與濾波器的沖激響應進行卷積得到的。沖激響應是濾波器對單位脈沖輸入信號的響應,它描述了濾波器在時域上的特性。FIR濾波器的沖激響應是一個有限長度的序列,因此稱為有限脈沖響應濾波器。

FIR濾波器的輸出可以用以下公式表示:

y[n] = b[0]*x[n] + b[1]*x[n-1] + b[2]*x[n-2] + ... + b[N]*x[n-N]

其中,y[n]是輸出信號的樣本值,x[n]是輸入信號的樣本值,b[0], b[1], ..., b[N]是濾波器的沖激響應系數,N是濾波器的階數。

2.2頻域原理

在頻域上,FIR濾波器可以通過濾波器的頻率響應來解釋。濾波器的頻率響應是指濾波器對不同頻率信號的響應特性。FIR濾波器的頻率響應是由濾波器的沖激響應確定的。

FIR濾波器的頻率響應可以用以下公式表示:

H(f) = b[0]e^(-j2pif0) + b[1]e^(-j2pif1) + ... + b[N]e^(-j2pif*N)

其中,H(f)是濾波器的頻率響應,b[0], b[1], ..., b[N]是濾波器的沖激響應系數,f是頻率,j是虛數單位。

FIR濾波器的頻率響應可以通過選擇合適的沖激響應系數來控制,從而實現對不同頻率信號的濾波效果。不同的沖激響應系數會導致不同的頻率響應特性,例如低通、高通、中通或帶阻等濾波器類型。

三、標準頻帶 FIR 濾波器設計

fir1/firwin使用最小二乘逼近計算濾波器系數,然后通過加窗對脈沖響應進行平滑處理。標準頻帶FIR濾波器是一種常見的設計方法,用于滿足特定的頻率響應需求。該設計方法旨在設計一個FIR濾波器,使其在指定的頻率范圍內具有預期的增益或衰減特性。下面是標準頻帶FIR濾波器的設計步驟:

(1)確定設計規格:

確定濾波器類型:低通、高通、中通或帶阻濾波器。

確定截止頻率:指定濾波器在頻率響應中的截止頻率。

確定通帶增益或衰減:指定濾波器在通帶內的增益或衰減要求。

確定阻帶衰減:如果是帶阻濾波器,指定濾波器在阻帶內的衰減要求。

(2)選擇窗函數:

常用的窗函數包括矩形窗、漢寧窗、漢明窗、布萊克曼窗等。

根據設計規格選擇合適的窗函數,不同的窗函數會對頻率響應產生不同的影響。

(3)確定濾波器的長度:

根據設計規格和選擇的窗函數,確定濾波器的長度(階數)。

濾波器的長度越長,頻率響應越精確,但計算復雜度也增加。

(4)設計濾波器:

使用窗函數法計算濾波器的沖激響應。

根據設計規格和選擇的窗函數,計算濾波器的系數。

(5)可選的優化步驟:

可以通過調整窗函數的參數、調整濾波器長度或使用其他設計方法來進一步優化濾波器的性能。

(6)應用濾波器:

將設計好的濾波器系數應用于輸入信號,通過卷積運算獲得濾波后的輸出信號。

Python中的SciPy庫提供了fir1/firwin函數,可以方便地進行標準頻帶FIR濾波器的設計。

firwin函數:

firwin(numtaps, cutoff, width=None, window='hamming', pass_zero=True, scale=True, fs=2.0)

numtaps :濾波器的長度(階數)。

cutoff :截止頻率或截止頻率數組。對于低通和高通濾波器,可以是一個標量值;對于帶通和帶阻濾波器,可以是包含兩個截止頻率的列表或數組。

width :僅在帶通和帶阻濾波器中使用,表示過渡帶(transition band)的寬度。

window :窗函數的類型,默認為漢明窗('hamming')。

pass_zero :確定濾波器是否通過零頻率點。對于低通和帶通濾波器,為True表示通過零頻率;對于高通和帶阻濾波器,為False表示不通過零頻率。

scale :指定是否對濾波器系數進行縮放。

fs :采樣頻率。

fir1函數:

fir1(numtaps, cutoff, window='hamming', pass_zero=True, scale=True, fs=2.0)

參數與firwin函數類似,但沒有width參數。

fir1函數返回濾波器的沖激響應系數,可以使用這些系數應用于輸入信號。

使用firwin函數設計一個低通FIR濾波器

from scipy.signal import firwin, lfilter
import numpy as np
import matplotlib.pyplot as plt


# 設計規格
numtaps = 101  # 濾波器長度
cutoff = 0.4  # 截止頻率
fs = 1.0  # 采樣頻率


# 使用firwin函數設計低通FIR濾波器
filter_coeff = firwin(numtaps, cutoff, fs=fs)


# 打印濾波器系數
print("Filter Coefficients:", filter_coeff)


# 應用濾波器
input_signal = np.random.randn(1000)  # 輸入信號為隨機噪聲
output_signal = lfilter(filter_coeff, 1, input_signal)


# 繪制輸入信號和輸出信號的時域波形
time = np.arange(0, len(input_signal)) / fs
plt.figure()
plt.plot(time, input_signal, label='Input Signal')
plt.plot(time, output_signal, label='Filtered Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Time Domain Waveform')
plt.legend()
plt.grid(True)
plt.show()

使用firwin函數設計一個中通FIR濾波器

from scipy.signal import firwin, lfilter
import numpy as np
import matplotlib.pyplot as plt


# 設計規格
numtaps = 101  # 濾波器長度
cutoff = [0.2, 0.6]  # 截止頻率范圍
fs = 1.0  # 采樣頻率


# 使用firwin函數設計中通FIR濾波器
filter_coeff = firwin(numtaps, cutoff, fs=fs, pass_zero=False)


# 打印濾波器系數
print("Filter Coefficients:", filter_coeff)


# 應用濾波器
input_signal = np.random.randn(1000)  # 輸入信號為隨機噪聲
output_signal = lfilter(filter_coeff, 1, input_signal)


# 繪制輸入信號和輸出信號的時域波形
time = np.arange(0, len(input_signal)) / fs
plt.figure(figsize=(10, 4))
plt.plot(time, input_signal, label='Input Signal')
plt.plot(time, output_signal, label='Filtered Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Time Domain Waveform')
plt.legend()
plt.grid(True)
plt.show()

使用firwin函數設計一個高通FIR濾波器

firwin函數在設計高通(highpass)和低通(lowpass)FIR濾波器時具有一些差異:

高通FIR濾波器:

對于高通濾波器,你需要將cutoff參數設置為截止頻率,并將pass_zero參數設置為False,表示濾波器不通過零頻率點。

高通濾波器將保留高于截止頻率的信號成分,而抑制低于截止頻率的信號成分。

低通FIR濾波器:

對于低通濾波器,你需要將cutoff參數設置為截止頻率,并將pass_zero參數設置為True,表示濾波器通過零頻率點。

低通濾波器將保留低于截止頻率的信號成分,而抑制高于截止頻率的信號成分。

from scipy.signal import firwin, lfilter
import numpy as np
import matplotlib.pyplot as plt


# 設計規格
numtaps = 101  # 濾波器長度
cutoff = 0.4  # 截止頻率
fs = 1.0  # 采樣頻率


# 使用firwin函數設計高通FIR濾波器
filter_coeff = firwin(numtaps, cutoff, fs=fs, pass_zero=False)


# 打印濾波器系數
print("Filter Coefficients:", filter_coeff)


# 應用濾波器
input_signal = np.random.randn(1000)  # 輸入信號為隨機噪聲
output_signal = lfilter(filter_coeff, 1, input_signal)


# 繪制輸入信號和輸出信號的時域波形
time = np.arange(0, len(input_signal)) / fs
plt.figure(figsize=(10, 4))
plt.plot(time, input_signal, label='Input Signal')
plt.plot(time, output_signal, label='Filtered Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Time Domain Waveform')
plt.legend()
plt.grid(True)
plt.show()

使用firwin函數設計一個帶阻FIR濾波器

firwin函數在設計帶通(bandpass)和帶阻(bandstop)FIR濾波器時具有一些差異:

帶通FIR濾波器:

對于帶通濾波器,你需要將包含兩個截止頻率的列表或數組作為cutoff參數,并將pass_zero參數設置為True。

帶通濾波器將保留位于截止頻率范圍內的信號成分,而抑制位于截止頻率范圍外的信號成分。

帶阻FIR濾波器:

對于帶阻濾波器,你需要將包含兩個截止頻率的列表或數組作為cutoff參數,并將pass_zero參數設置為False。

帶阻濾波器將抑制位于截止頻率范圍內的信號成分,而保留位于截止頻率范圍外的信號成分。

from scipy.signal import firwin, lfilter
import numpy as np
import matplotlib.pyplot as plt


# 設計規格
numtaps = 101  # 濾波器長度
cutoff = [0.4, 0.6]  # 截止頻率范圍
fs = 1.0  # 采樣頻率


# 使用firwin函數設計帶阻FIR濾波器
filter_coeff = firwin(numtaps, cutoff, fs=fs, pass_zero=True)


# 打印濾波器系數
print("Filter Coefficients:", filter_coeff)


# 應用濾波器
input_signal = np.random.randn(1000)  # 輸入信號為隨機噪聲
output_signal = lfilter(filter_coeff, 1, input_signal)


# 繪制輸入信號和輸出信號的時域波形
time = np.arange(0, len(input_signal)) / fs
plt.figure(figsize=(10, 4))
plt.plot(time, input_signal, label='Input Signal')
plt.plot(time, output_signal, label='Filtered Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Time Domain Waveform')
plt.legend()
plt.grid(True)
plt.show()

四、Kaiser 窗階估計

Kaiser窗法(Kaiser window method)是一種用于FIR濾波器設計的方法,它利用Kaiser窗函數來估計濾波器的階數(即濾波器長度)。Kaiser窗函數是一種基于貝塞爾函數的調制函數,具有可調節的參數β,可以控制窗函數的主瓣寬度和副瓣衰減。

Kaiser窗階估計的步驟如下:

(1)確定設計規格:包括濾波器的截止頻率、過渡帶寬、最大衰減和窗函數的形狀參數β。

(2)計算濾波器的階數:根據設計規格和窗函數的參數β,使用公式或表格來計算濾波器的階數。一種常用的計算公式是根據貝塞爾函數的零階近似計算:

scssCopy codeN = (A - 8) / (2.285 * 2π * Δf) + 1

其中,N是濾波器的階數,A是最大衰減(以分貝為單位),Δf是過渡帶寬。

(3)生成Kaiser窗函數:使用計算得到的階數N和參數β,生成Kaiser窗函數。Kaiser窗函數可以通過NumPy中的kaiser函數來生成。

(4)設計FIR濾波器:使用firwin函數,將生成的Kaiser窗函數作為窗函數參數,指定其他設計規格(如截止頻率、過渡帶寬等),生成最終的FIR濾波器系數。

下面是一個示例代碼,展示了如何使用Kaiser窗階估計方法設計一個FIR濾波器:

from scipy.signal import firwin, kaiser
import numpy as np
import matplotlib.pyplot as plt


# 設計規格
cutoff = 0.2  # 截止頻率
transition_width = 0.1  # 過渡帶寬
attenuation = 60  # 最大衰減(單位:分貝)
sampling_freq = 1000  # 采樣頻率


# 計算濾波器的階數
delta_freq = transition_width * 0.5
N = int((attenuation - 7.95) / (2.285 * 2 * np.pi * delta_freq) + 1)


# 生成Kaiser窗函數
beta = kaiser_beta = np.kaiser_beta(attenuation)
window = kaiser(N, beta)


# 設計FIR濾波器
filter_coeff = firwin(N, cutoff, window=window, fs=sampling_freq)


# 打印濾波器系數
print("Filter Coefficients:", filter_coeff)


# 繪制濾波器的頻率響應
freq, response = scipy.signal.freqz(filter_coeff)
magnitude = np.abs(response)
magnitude_db =

五、多頻帶FIR濾波器設計

fir2/firwin2函數還可用于設計加窗的FIR濾波器,但具有任意形狀的分段線性頻率響應。這與fir1/firwin不同,后者僅設計具有標準低通、高通、帶通和帶阻配置的濾波器。

scipy.signal.fir2(numtaps, freq, gain, fs=2.0, window='hamming', nyq=None, antisymmetric=False)

參數:

numtaps(整數) :濾波器的長度(階數),決定了濾波器的頻率響應的分辨率和計算復雜度。

freq(數組): 包含頻率點的序列,用于定義濾波器的頻率響應。頻率范圍為0到0.5(歸一化頻率),其中0.5對應采樣頻率的一半。

gain(數組): 與頻率點相對應的增益值,用于定義濾波器的目標頻率響應。

fs(標量): 采樣頻率,用于指定頻率的單位。默認為2.0,表示采樣頻率的一半。如果nyq參數也提供了,則fs參數會被忽略。

window(字符串或數組) 指定窗函數的類型或窗函數自身。可以使用字符串指定標準窗函數,如'hamming'、'hann'、'blackman'等。也可以直接傳遞一個窗函數數組,長度為numtaps,用于自定義窗函數。

nyq(標量): 采樣頻率的一半,用于指定頻率的單位。如果未提供,則默認為fs/2.0。

antisymmetric(布爾值): 指定濾波器是否為反對稱濾波器。默認為False,表示濾波器為一般的線性相位濾波器。

返回值:

h(一維數組): FIR濾波器的系數。

scipy.signal.firwin2(numtaps, freq, gain, fs=2.0, window='hamming', nyq=None)

參數:

numtaps(整數): 濾波器的長度(階數),決定了濾波器的頻率響應的分辨率和計算復雜度。

freq(一維數組): 頻率段邊界點的列表或數組,用于定義濾波器的頻率響應。頻率段邊界點應在0到fs/2之間,其中fs為采樣頻率。

gain(一維數組): 與頻率段相應的增益值的列表或數組,用于定義濾波器的目標頻率響應。

fs(標量): 采樣頻率,用于指定頻率的單位。默認為2.0,表示采樣頻率的一半。

window(字符串或數組): 指定窗函數的類型或窗函數自身。可以使用字符串指定標準窗函數,如'hamming'、'hann'、'blackman'等。也可以直接傳遞一個窗函數數組,長度為numtaps,用于自定義窗函數。

nyq(標量): 采樣頻率的一半,用于指定頻率的單位。如果未提供,則默認為fs/2.0。

返回值:

h(一維數組): FIR濾波器的系數。

下面是一個使用firwin2函數設計多頻帶FIR濾波器的示例代碼:

from scipy.signal import firwin2, freqz
import matplotlib.pyplot as plt


# 定義頻率點
freq = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5]
# 定義增益值
gain = [1.0, 1.0, 0.0, 0.0, 1.0, 1.0]


# 設計多頻帶FIR濾波器
filter_coeff = firwin2(101, freq, gain)


# 打印濾波器系數
print("Filter Coefficients:", filter_coeff)


# 繪制濾波器的頻率響應
w, h = freqz(filter_coeff)
plt.plot(w, abs(h))
plt.xlabel('Frequency')
plt.ylabel('Magnitude')
plt.title('Frequency Response')
plt.grid(True)
plt.show()
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數字濾波器
    +關注

    關注

    4

    文章

    270

    瀏覽量

    47094
  • 衰減器
    +關注

    關注

    4

    文章

    641

    瀏覽量

    34463
  • 模擬器
    +關注

    關注

    2

    文章

    881

    瀏覽量

    43421
  • fir濾波器
    +關注

    關注

    1

    文章

    95

    瀏覽量

    19093
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037
收藏 人收藏

    評論

    相關推薦

    FIR濾波器FAQ原理簡述

    FIR每一個抽頭都需要一個MAC。大多數DSP微處理實現MAC操作都是單指令周期。5)躍遷帶(Transition Band) -在通帶和阻帶邊沿之間的頻帶。躍遷帶越窄,需要更多的抽頭去實現
    發表于 09-24 16:05

    如何設計低通FIR濾波器

    此示例顯示如何設計低通FIR濾波器。這里介紹的許多概念可以擴展到其他響應,如高通,帶通等。FIR濾波器被廣泛使用,因為它們具有強大的設計算法,以非遞歸形式實現時的固有穩定性,可以輕松實
    發表于 08-23 10:00

    基于DSPBuilder的FIR濾波器的系統該怎么設計?

    脈沖響應(ⅡR)濾波器和有限長單位脈沖響應(FIR濾波器兩種,其中,FIR濾波器能提供理想的線性相位響應,在整個
    發表于 08-30 07:18

    FIR濾波器的特性是什么

    數字濾波器的類型有FIR(有限長沖擊與IIR(無限長。離散數字系統中,濾波器的表述為差分方程。FIRFIR基本特性:FIR 濾波器永遠是穩定
    發表于 08-17 06:19

    什么是fir數字濾波器 什么叫FIR濾波器

    什么是fir數字濾波器 Part 1: Basics1.1 什么是FIR濾波器?FIR 濾波器
    發表于 01-16 09:42 ?1.7w次閱讀

    FIR并行濾波器設計

    FIR并行濾波器設計 數字濾波器可以濾除多余的噪聲,擴展信號頻帶,完成信號預調,改變信號的特定頻譜分量,從而得到預期的結果。數字濾波器在D
    發表于 01-16 09:47 ?1445次閱讀
    <b class='flag-5'>FIR</b>并行<b class='flag-5'>濾波器</b>設計

    高階FIR正交鏡像濾波器的設計

    本文計論了高階FIR型正交鏡像濾波器的設計問題。根據FIR 正交鏡像濾波器 設計的基本原理,將高階正交鏡像濾波器的設計問題轉換為單變量的優化
    發表于 08-29 16:16 ?29次下載
    高階<b class='flag-5'>FIR</b>正交鏡像<b class='flag-5'>濾波器</b>的設計

    fir_濾波器sourc

    fir濾波器的有關資料 fir_濾波器sourc.rar
    發表于 12-14 14:12 ?24次下載

    基于MATLAB的FIR濾波器設計與濾波

    基于MATLAB的FIR濾波器設計與濾波
    發表于 12-14 22:08 ?64次下載

    詳解FIR濾波器和IIR濾波器的區別

    數字濾波器廣泛應用于硬件電路設計,一般分為FIR濾波器和IIR濾波器。那么FIR濾波器和IIR
    發表于 05-03 11:36 ?20次下載

    線性相位FIR濾波器設計

    如果一個FIR濾波器的脈沖響應函數具有對稱性或反對稱性,則其相位響應是頻率的線性函數r或附加一個固定的初始相位),這樣的濾波器稱為線性相位FIR濾波
    發表于 12-21 14:24 ?5次下載

    FIR濾波器的FPGA設計與實現

    本文針對快速、準確選擇參數符合項目要求的濾波器設計方法的目的,通過系統的介紹有限脈沖響應( Finite Impulse Response,FIR濾波器的原理、結構形式以及幾種FIR
    發表于 12-21 14:53 ?14次下載
    <b class='flag-5'>FIR</b><b class='flag-5'>濾波器</b>的FPGA設計與實現

    FIR濾波器和IIR濾波器的區別與聯系

    1.根據沖激響應的不同,將數字濾波器分為有限沖激響應(FIR濾波器和無限沖激響應(IIR)濾波器。對于FIR
    的頭像 發表于 12-30 23:45 ?4011次閱讀

    Verilog并行FIR濾波器設計

    FIR(Finite Impulse Response)濾波器是一種有限長單位沖激響應濾波器,又稱為非遞歸型濾波器
    的頭像 發表于 06-01 11:11 ?1269次閱讀
    Verilog并行<b class='flag-5'>FIR</b><b class='flag-5'>濾波器</b>設計

    IIR濾波器FIR濾波器的區別

    數字濾波器是數字信號處理中最常用的一種技術,可以對數字信號進行濾波、降噪、增強等處理,其中最常見的兩種數字濾波器是IIR濾波器FIR
    的頭像 發表于 06-03 10:21 ?1.9w次閱讀
    主站蜘蛛池模板: 男女交性动态免费视频 | 天天天天做夜夜夜夜做 | 久久免费精品 | 国产毛片久久久久久国产毛片 | 爱爱视频天天干 | 四虎国产精品免费观看 | 特黄一级大片 | 三级网址在线 | 国模精品视频一区二区三区 | 美女性爽视频国产免费 | 亚洲bbbbbxxxxx精品三十七 | 午夜网站免费版在线观看 | 国产精品视频久久久久久 | 国产三区视频 | 亚洲精品91香蕉综合区 | 久久澡人人澡狠狠澡 | 久久天天 | 久久综合五月开心婷婷深深爱 | 插菊综合网 | 99视频精品全国免费 | 四虎精品成人免费观看 | 成人亚洲网站www在线观看 | 亚洲a毛片| 永久在线观看视频 | 狠狠插狠狠插 | 51vv福利视频在线精品 | 天天摸夜班摸天天碰 | 啪啪亚洲| 啪啪大片| 九九热精品国产 | www.天天射| 日本系列 1页 亚洲系列 | 婷婷综合 在线 | 国产精品久久久香蕉 | 五月天情网| 午夜视频在线看 | 人与牲动交xxxxbbbb高清 | 亚洲天天 | 美女视频网站免费播放视 | 1024手机看片你懂得的 日韩欧美 | 免费看欧美一级特黄α大片 |