?? fir_filter_amp_delay.m
字號(hào):
%File: FIR_Filter_AMP_Delay.m
function [h,times]=FIR_Filter_AMP_Delay(H,fs,n,fscale,fshift,...
dscale)
%
% This function returns the impulse response of an FIR filter
% h=row vetor of impulse response values at t=times
% h is rotated to center the impulse response array at n/2*ts
% It is assumed that there is no 'constant delay' in the
% freq response given
% H is an array of frequency response
% Column 1:
ts=1/fs;df=fs/n;
%
Hfreq=H(:,1);
Hmag=H(:,2);
Hdelay=H(:,3);
nn=max(size(Hamg));
Hreal=10.^(Hmag/20);
Hfreq=(Hfreq-fshift)/fscale;
Hdelay=Hdelay/dscale;
%
%
index1=[0:1:(n/2)];
index2=[-(n/2)+1:1:-1];
index=[index1:index2];
frequencies=(index*df);
times=index*ts;
%
%
times=shift_ifft(times,n);
%
%
fmin=min(min(frequencies));
fmax=max(max(frequencies));
%
%
Hfreq1=Hfreq;
Hreal1=Hreal;
Hdelay1=Hdelay;
if fmin<Hfreq(1,1)
Hfreq1=[fmin;Hfreq];
Hreal1=[1e-10;Hreal];
Hdelay1=[Hdelay(1,1);Hdelay];
end
if fmax>Hfreq(nn,1)
Hfreq1=[Hfreq1;fmax];
Hreal1=[Hreal1;1e-10];
Hdelay1=[Hdelay1;Hdelay(nn,1)];
end
%
%
Hreal_interpolated=interp1(Hfreq1,Hreal1,frequencies);
Hdelay_interpolated=interp1(Hfreq1,Hdelay,frequencies);
%
%
sum=0.0;
Hphase(1)=0.0;
for k=2:(n/2)+2
sum=sum+(Hdelay_interpolated(k,1)/ts)*(2*pi/n);
Hphase(k,1)=sum;
end
sum=0.0;
for k=n:-1:(n/2)+2
sum=sum+(Hdelay_interpolated(k,1)/ts)*(2*pi/n);
Hphase(k,1)=sum;
end
Hcomplex=Hreal_interpolated.*exp(i*Hphase);
%
%
hh=ifft(Hcomplex);
h=(shift_ifft(hh,n));
%
%End of filter design and end of function file
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -