Professional Documents
Culture Documents
Code Linearphase Fir
Code Linearphase Fir
def rectangular(n):
return 1
def hamming(n):
N=len(n)-1
return 0.54 + 0.46*np.cos((2*pi*n)/N)
def hanning(n):
N=len(n)-1
return 0.5 - 0.5*np.cos((2*pi*n)/N)
def blackmann(n):
N=len(n)
return 0.42 + 0.5*np.cos((2*pi*n)/N) + 0.08*np.cos((4*pi*n)/N)
#Cutoff freq
wc=(2*pi*fc)/fs
#Alpha
if M%2==1:
alpha=(M-1)/2
else:
alpha=M/2-1
#Defining hn
n=np.arange(0,M)
if symm==True:
hn=(wc/pi)*np.sinc((n-alpha)*wc)
else:
hn=(wc/pi)*np.sinc((n-alpha)*wc)
for a in range(M//2+1,M):
hn[i]=-1*hn[i]
#Define window
if window=='rectangular':
wn=rectangular(n)
elif window=='hamming':
wn=hamming(n)
elif window=='hanning':
wn=hanning(n)
elif window=='blackmann':
wn=blackmann(n)
h1n=hn*wn
h1w=np.fft.fft(h1n)
return h1n,h1w
file:///C:/Users/Acer/Downloads/Untitled17.html 1/7
4/23/24, 10:42 AM Untitled17
In [3]: fsamp=400
fcut=100
M=61
N=M-1
n=[]
for i in range(M):
n.append((2*pi*i)/N-pi)
n=np.array(n)
outputf,outputw=FIR_filter(M,fcut,fsamp,'rectangular',True)
f1=plt.figure()
f2=plt.figure()
plt.title('Phase Response rectangular')
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Phase [radians]')
plt.grid()
plt.plot(n,np.angle(outputw))
file:///C:/Users/Acer/Downloads/Untitled17.html 2/7
4/23/24, 10:42 AM Untitled17
In [4]: outputf,outputw=FIR_filter(M,fcut,fsamp,'hamming',True)
f1=plt.figure()
plt.title('Magnitude Response hamming')
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Magnitude [dB]')
plt.grid()
plt.plot(n,20*np.log10(np.abs(outputw)))
f2=plt.figure()
plt.title('Phase Response hamming')
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Phase [radians]')
plt.grid()
plt.plot(n,np.angle(outputw))
file:///C:/Users/Acer/Downloads/Untitled17.html 3/7
4/23/24, 10:42 AM Untitled17
In [5]: outputf,outputw=FIR_filter(M,fcut,fsamp,'hanning',True)
f1=plt.figure()
plt.title('Magnitude Response hanning')
plt.xlabel('Frequency [rad/sample]')
file:///C:/Users/Acer/Downloads/Untitled17.html 4/7
4/23/24, 10:42 AM Untitled17
plt.ylabel('Magnitude [dB]')
plt.grid()
plt.plot(n,20*np.log10(np.abs(outputw)))
f2=plt.figure()
plt.title('Phase Response hanning')
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Phase [radians]')
plt.grid()
plt.plot(n,np.angle(outputw))
file:///C:/Users/Acer/Downloads/Untitled17.html 5/7
4/23/24, 10:42 AM Untitled17
In [6]: outputf,outputw=FIR_filter(M,fcut,fsamp,'blackmann',True)
f1=plt.figure()
plt.title('Magnitude Response blackmann')
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Magnitude [dB]')
plt.grid()
plt.plot(n,20*np.log10(np.abs(outputw)))
f2=plt.figure()
plt.title('Phase Response blackmann')
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Phase [radians]')
plt.grid()
plt.plot(n,np.angle(outputw))
file:///C:/Users/Acer/Downloads/Untitled17.html 6/7
4/23/24, 10:42 AM Untitled17
file:///C:/Users/Acer/Downloads/Untitled17.html 7/7