小數延遲濾波器


作者:桂。

時間:2017-10-10  22:38:46

鏈接:http://www.cnblogs.com/xingshansi/p/7648274.html 


前言

陣列信號處理中,經常用到小數延遲(fractional delay,FD)的思路,例如Beamforming、GSC等等,本文摘錄幾個小數延遲的實現方式,不打算做系統性的梳理,具體可參考課件。

一、問題模型

給出用到的資料:

1)部分code:網盤code.

2)stanford課件,對應鏈接:https://ccrma.stanford.edu/~jos/Interpolation/

3)Beamforming應用實例:http://www.labbookpages.co.uk/audio/beamforming/fractionalDelay.html

以均勻線陣為例:

設麥克風陣列共用M個陣元,中心為參考點,陣元間距為d,信號入射角為θ,聲音傳播速度為c,則根據幾何知識,第m(0≤m≤M-1)個陣元的時延為τm = (d/c) sinθ(m-(K-1)/2)。

麥克風采集的是數字信號,設采樣周期為T,則對時域離散的信號來說,時延為D = τ/T。通常D不是一個整數,而對離散信號來說,整數時延才有意義。對於非整數D,可以分解為整數部分和分數部分D = ⌊D⌋ + d,式中,⌊D⌋為D的向下取整,0≤d<1。對於非零的分數部分d,此時信號實際值介於兩個相鄰采樣點之間,即分數延遲。在實際處理中,可對d四舍五入取整,然后加上⌊D⌋,得到近似整數時延,但這種方法處理的結果不夠精確。為了得到精確的結果,通常借助小數延遲的思路。

二、小數延遲濾波器

  A-一階FIR設計

思路主要來自Taloy一階近似:

從而

即:

其中η為對應的小數延遲,濾波器架構(低通信號有效):

  B-一階IIR設計

此時對應的濾波器為全通濾波器(All pass),近似逼近

濾波器響應:

濾波器架構:

對應時間延遲:

   C-Sinc逼近

根據小數延遲濾波器的特性:

  • 幅度響應:全通
  • 相位響應:線性

得出濾波器:

對於采樣信號,需要限定在-fs/2 ~ fs/2之間,即相當於對濾波器進行了頻域截斷,截斷的濾波器特性:

求解該濾波器:

容易證明該濾波器是原型濾波器均方誤差最小的逼近。 

%線陣為例
delay = d*sin(theta)*fs/c*(0:1:element_num);
n = -64:63;
i = 3;%延遲的陣元
h = sinc(n+delay(i));
H = zeros(1,256);
H(1:128) = h;
output = ifft((fft(sig)).*(fft(H)));%sig為輸入信號
%相比時域卷積,頻域點乘進一步節省資源

  存疑如果不是[-pi pi],而是取[0 2*pi],即sin(2*pi*f0*t)其中f0為大於fs/2的信號,簡單的逼近結果錯誤,延遲如何實現?

已解決,具體參考:過采樣的小數延遲實現。

  D-Sinc加窗

由於C中濾波器存在截斷,防止能量泄露的一個常用思路就是:加窗截斷。

即:

α < 1 provides for a nonzero transition band。

對應code:

function h = hsincw2(L,d,wp,win)
% HSINCW2
% MATLAB m-file for sinc windowing method for FD filter design
% h = hsincw2(L,d,wp,win) designs an (L-1)th-order FIR
% filter to approximate a fractional delay of d samples,
% where 0 <= d < 1, wp is the passband of approximation and
% win is a length-L window function 
% (e.g., win = chebwin(L,ripple), with sidelope ripple in dB).
% Output: length-L filter coefficient vector h
% Function Calls: standard MATLAB functions and sinc.m
%
% Timo Laakso 23.12.1992
% Revised by Vesa Valimaki 19.10.1995
% Last modified 14.01.1996

N = L-1;                 % filter order
M = N/2;                 % middle value
if (M-round(M))==0       % if L is even...
        D = M + d;           % D = M + d
        else D = M + d -0.5; % ...otherwise
end;
b = (0:N)-D;    % sample instants
h = sinc(wp*b); % shifted & sampled sinc function
h = h.*win;     % windowing by the given window function

  E-拉格朗日插值

該思路主要是借助拉格朗日插值,近似得出小數延遲位置的數值。關於拉格朗日插值法的介紹有很多。

濾波器逼近:

基於Taloy展開的性質:

這一特性符合拉格朗日插值的思路,利用此思路:

得出濾波器實現架構

對應code:

function h = lagrange(N, delay)
%LAGRANGE h=lagrange(N,delay) returns order N FIR
% filter h which implements given delay
% (in samples). For best results,
% delay should be near N/2 +/- 1.
n = 0:N;
h = ones(1,N+1);
for k = 0:N
index = find(n ~= k);
h(index) = h(index) * (delay-k)./ (n(index)-k);
end

  不同插值個數對應的系數:

  F-Farrow濾波器

該思路為多項式擬合,即將每一階h看作是多項式擬合:

濾波器可表述為:

簡化:

α可存在RAM里,利用查找表直接調用,便可以實現快速的小數延遲。

其中,參數求解:

對應實現架構:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM