日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用FFT进行快速FIR滤波

發布時間:2023/12/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用FFT进行快速FIR滤波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘自<Understanding Digital Signal Processing>第三版,13.10 Fast FIR Filtering Using the FFT一節

基于的理論:頻域上的乘積等效于時域上的卷積。

基本的計算流程,如下圖所示。

將輸入信號x(n)x(n)x(n)和濾波器參數h(k)h(k)h(k)分別進行FFT,得到X(m)X(m)X(m)H(m)H(m)H(m),在頻域上進行乘積,然后,進行IFFT。

對于Q?tapQ-tapQ?tap的FIR濾波器,其標準的卷積方程為
y(n)=∑k=0Q?1h(k)x(n?k)=h(k)?x(n)y(n)=\sum ^{Q-1} _{k=0} {h(k)x(n-k)}=h(k)*x(n) y(n)=k=0Q?1?h(k)x(n?k)=h(k)?x(n)
假設h(k)h(k)h(k)的長度為QQQx(n)x(n)x(n)的長度為PPP,則最終輸出的y(n)y(n)y(n)的長度為L=Q+P?1L=Q+P-1L=Q+P?1.

為了使快速卷積技術能得到有效的結果,前向和逆FFT的尺寸必須等于或大于LLL,因此,N?pointN-pointN?point的FFT尺寸為N≥LN\ge LNL,并對h(k)h(k)h(k)x(n)x(n)x(n)進行zero?padzero-padzero?pad,使其長度等于NNN。所需要的輸出y(n)y(n)y(n)為逆FFT的前LLL個樣本的實數部分。關于濾波器參數的FFT只需計算一次并存儲下來即可。

當輸出序列長度太大,必須進行分段處理時,有兩種處理方法:overlap?and?saveoverlap-and-saveoverlap?and?saveoverlap?and?addoverlap-and-addoverlap?and?add。

Overlap-and-save

具體流程,如下圖所示。

對于給定的FIR濾波器的脈沖響應h(k)h(k)h(k)的長度為QQQ,輸入序列x(n)x(n)x(n)的長度為PPP,具體步驟:

  • 選擇FFT的尺寸為NNN,其中NNN為2的指數,約等于4倍QQQ
  • h(k)h(k)h(k)的末端增加(N?Q)(N-Q)(N?Q)個零值樣本,進行N?pointN-pointN?point的FFT,生成復序列H(m)H(m)H(m);
  • 計算整數M,M=N?(Q?1)M=N-(Q-1)M=N?(Q?1)
  • x(n)x(n)x(n)的前MMM樣本之前插入(Q?1)(Q-1)(Q?1)個零值樣本,創建N?pointN-pointN?point的FFT的輸入序列x1(n)x_1(n)x1?(n)
  • x1(n)x_1(n)x1?(n)進行N?pointN-pointN?point的FFT計算,并乘以H(m)H(m)H(m),然后,對乘積進行N?pointN-pointN?point的逆FFT。去掉逆FFT結果的前(Q?1)(Q-1)(Q?1)個樣本,生成M?pointM-pointM?point的輸出y1(n)y_1(n)y1?(n)
  • x1(n)x_1(n)x1?(n)的前(Q?1)(Q-1)(Q?1)個零值樣本增加到第二個原始長度為M的x(n)x(n)x(n)的開頭部分,創建第二個N?pointN-pointN?point的FFT輸入序列x2(n)x_2(n)x2?(n)
  • x2(n)x_2(n)x2?(n)進行N?pointN-pointN?point的FFT計算,并乘以H(m)H(m)H(m),然后,進行逆FFT,去除前(Q?1)(Q-1)(Q?1)個樣本,生成第二個M點的輸出數據y2(n)y_2(n)y2?(n)
  • 重復步驟6-7,直至處理完整個輸入序列。
  • 將生成的y1(n),y2(n),y3(n),....y_1(n),y_2(n),y_3(n),....y1?(n),y2?(n),y3?(n),....進行串聯合并,生成最終的線性卷積濾波器的輸出序列y(n)y(n)y(n)
  • 可以試驗不同的NNN值,看是否存在一個最優的NNN使得你的硬件和軟件實現的計算載荷最小。不過,在任何情況下,NNN必須不小于(M+Q?1)(M+Q-1)(M+Q?1)
  • Overlap-and-add

    具體流程,如下圖所示。

    對于這種方法,輸入序列x(n)x(n)x(n)被分段成長度為MMM的數據片段,數據的overlap發生在逆FFT計算。對于給定的FIR濾波器的脈沖響應h(k)h(k)h(k)的長度為QQQ,輸入序列x(n)x(n)x(n)的長度為PPP,具體步驟:

  • 選擇FFT尺寸為NNN,其中NNN為2的指數,約等于2倍的Q;
  • h(k)h(k)h(k)的末端增加(N?Q)(N-Q)(N?Q)個零值樣本,進行N?pointN-pointN?point的FFT,生成復序列H(m)H(m)H(m);
  • 計算整數M,M=N?(Q?1)M=N-(Q-1)M=N?(Q?1)
  • 在原始序列x1(n)x_1(n)x1?(n)的前MMM樣本末端增加(Q?1)(Q-1)(Q?1)個零值樣本,創建N?pointN-pointN?point的FFT的輸入序列x1(n)x_1(n)x1?(n)
  • x1(n)x_1(n)x1?(n)進行N?pointN-pointN?point的FFT計算,并乘以H(m)H(m)H(m),然后,對乘積進行N?pointN-pointN?point的逆FFT。并保留前MMM個樣本,生成MMM樣本的輸出數據y1(n)y_1(n)y1?(n)
  • 在第二個原始序列x2(n)x_2(n)x2?(n)的前MMM樣本末端增加(Q?1)(Q-1)(Q?1)個零值樣本,創建N?pointN-pointN?point的FFT的輸入序列x2(n)x_2(n)x2?(n)
  • 對第二個N?pointN-pointN?point的輸入序列進行FFT計算,并乘以H(m)H(m)H(m),然后,對乘積進行N?pointN-pointN?point的逆FFT。將上一步的逆FFT的最后Q?1Q-1Q?1個樣本增加到當前逆FFT序列的開頭的Q?1Q-1Q?1個樣本上。保留Q?1Q-1Q?1個樣本相加過程的結果序列中的開頭的MMM個樣本作為輸出數據y2(n)y_2(n)y2?(n);
  • 重復步驟6-7,直至處理完整個數據序列。
  • 將生成的y1(n),y2(n),y3(n),....y_1(n),y_2(n),y_3(n),....y1?(n),y2?(n),y3?(n),....進行串聯合并,生成最終的線性卷積濾波器的輸出序列y(n)y(n)y(n)
  • 可以試驗不同的NNN值,看是否存在一個最優的NNN使得你的硬件和軟件實現的計算載荷最小。不過,在任何情況下,NNN必須不小于$
  • 總結

    以上是生活随笔為你收集整理的使用FFT进行快速FIR滤波的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。