matlab群延时函数,群延迟函数(group delay function)群延迟滤波器 | 学步园
最近看了許多介紹Group delay function的論文,文章中大篇幅提到Group delay,group delay of digital filters,對這個方面的知識好像還挺有用的,所以想把它記錄下來。然后總結下計算Group delay function的步驟。
假設有N個樣本的脈沖響應為h(n)的數字濾波器,n為時間序列標號,對該數字濾波器進行離散時間傅里葉變換(discrete-time Fourier transform (DTFT)),H(ω),用極點的方式表示如下:
??????(1)
在公式(1), M(ω) 是濾波器的頻幅響應, Φ(ω)?是濾波器的相頻響應?, ω?是連續的角頻率,單位為弧度每秒rad/s ,用H(ω)對 ω求導, 得到如下的等式:
??????(2)
用公式 (2)?除以M(ω), 寫成如下的形式:
?????(3)
對公式(3)的右邊第一項進行求導展開,得到如下的形式:
???(4)
對等式(4)兩邊同時除以j/ejΦ(ω) 得到如下等式:
?????(5)
從上面的等式(5)我們能得到什么呢?通過觀察,我們發現如下熟悉的項:
jd[H(ω)]/dω = n·h(n) 的DTFT
M(ω)?ejΦ(ω) =H(ω) =h(n) DDTFT
–d[Φ(ω)]/dω =?群延遲濾波器(group delay of the filter )
現在可以把上面的公式改成更直觀的形式:
?????(6)
用DFT代替DTFT可以得到計算群延遲數字濾波器的公式:
???(7)
從上面的公式看出,計算群延遲濾波器的過程。公式(7)是傳統群延遲h(n)]值為0的情況。
下面用Matlab演示公式?(7)的計算過程:
clear, clc
Npts = 128; % 畫圖點數
B = [0.03, 0.0605, 0.121, 0.0605, 0.03];
A = [1, -1.194, 0.436];
Imp_Resp_Length = 40;
[Imp_Resp,n] = impz(B,A,Imp_Resp_Length);
ImpResp_times_Time = Imp_Resp.*n;
[Freq_Resp, W] = freqz(Imp_Resp, 1, Npts, 'whole');
[Deriv_of_Freq_Resp, W] = freqz(ImpResp_times_Time, ...
1, Npts, 'whole');
Grp_Delay = real(Deriv_of_Freq_Resp./Freq_Resp);
%[gdm, fgm] = grpdelay(B,A,Npts,'whole');gdm=Grp_Delay,w=fgm(rad) % Compute Group Delay
Grp_Delay = fftshift(Grp_Delay);% 將序列中后半部分循環移動到前面
Freq = (W-pi)/(2*pi); % 頻率軸
figure(1), clf
subplot(2,1,1)
plot(n, Imp_Resp, '-ks', ...
n, ImpResp_times_Time, '-bs', 'markersize', 4)
legend('h(n)','n times h(n)');
ylabel('Amplitude'), xlabel('n'), grid on, zoom on
subplot(2,1,2)
plot(Freq, Grp_Delay,'-rs', 'markersize', 4)
ylabel('Group Delay (samples)')
xlabel('Freq x Fs (Fs = sample rate)')
grid on, zoom on
總結
以上是生活随笔為你收集整理的matlab群延时函数,群延迟函数(group delay function)群延迟滤波器 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马云前助理回应:马家厨房不做预制菜
- 下一篇: 大麦创新 IDMIX 推出赛博移动电源: