Notch filter parts 5 and 6
This commit is contained in:
parent
98168e00bd
commit
8d16a9b73e
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
8003
6th-Semester-Spring-2024/DSP/Labs/NotchFilter/dev_a.dat
Normal file
8003
6th-Semester-Spring-2024/DSP/Labs/NotchFilter/dev_a.dat
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,84 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import scipy.signal
|
||||
from matplotlib import patches
|
||||
from matplotlib.figure import Figure
|
||||
from matplotlib import rcParams
|
||||
|
||||
def zplane(b,a,filename=None):
|
||||
"""Plot the complex z-plane given a transfer function.
|
||||
"""
|
||||
|
||||
# get a figure/plot
|
||||
ax = plt.subplot(111)
|
||||
|
||||
# create the unit circle
|
||||
uc = patches.Circle((0,0), radius=1, fill=False,
|
||||
color='black', ls='dashed')
|
||||
ax.add_patch(uc)
|
||||
|
||||
# The coefficients are less than 1, normalize the coeficients
|
||||
if np.max(b) > 1:
|
||||
kn = np.max(b)
|
||||
b = b/float(kn)
|
||||
else:
|
||||
kn = 1
|
||||
|
||||
if np.max(a) > 1:
|
||||
kd = np.max(a)
|
||||
a = a/float(kd)
|
||||
else:
|
||||
kd = 1
|
||||
|
||||
# Get the poles and zeros
|
||||
p = np.roots(a)
|
||||
z = np.roots(b)
|
||||
k = kn/float(kd)
|
||||
|
||||
# Plot the zeros and set marker properties
|
||||
t1 = plt.plot(z.real, z.imag, 'o', ms=10, label="zero")
|
||||
plt.setp(t1, markersize=10.0, color='tab:blue', fillstyle='none')
|
||||
|
||||
# Plot the poles and set marker properties
|
||||
t2 = plt.plot(p.real, p.imag, 'x', ms=10, label="pole")
|
||||
plt.setp(t2, markersize=10.0, color='tab:blue')
|
||||
|
||||
ax.spines['left'].set_position('center')
|
||||
ax.spines['bottom'].set_position('center')
|
||||
ax.spines['right'].set_visible(False)
|
||||
ax.spines['top'].set_visible(False)
|
||||
|
||||
# set the ticks
|
||||
r = 1.5; plt.axis('scaled'); plt.axis([-r, r, -r, r])
|
||||
ticks = [-1, -.5, .5, 1]; plt.xticks(ticks); plt.yticks(ticks)
|
||||
return z, p, k
|
||||
|
||||
|
||||
f_s = 2 # Sampling frequency of 2[Hz]
|
||||
f_0 = 0.25 # Notch frequency at 0.25[Hz]
|
||||
r = 0.99 # Poles at radius 0.99
|
||||
|
||||
b_0 = 1
|
||||
b_1 = -2*np.cos(2*np.pi*f_0/f_s)
|
||||
b_2 = 1
|
||||
b = [b_2, b_1, b_0]
|
||||
|
||||
a_0 = 1
|
||||
a_1 = -2*r*np.cos(2*np.pi*f_0/f_s)
|
||||
a_2 = r**2
|
||||
a = [a_2, a_1, a_0]
|
||||
|
||||
omega, h scipy.signal.freqz(b,a, fs=f_s)
|
||||
|
||||
h_f = np.abs(h)
|
||||
|
||||
plt.figure(figsize=(16,9))
|
||||
plt.plot(omega*f_s / (2*np.pi), h_f)
|
||||
plt.title("Magnitude Response")
|
||||
plt.xlabel("Frequency in Hz")
|
||||
plt.savefig("IIR_099r_2fs_025f0_freq.png")
|
||||
|
||||
plt.figure(figsize=(16,9))
|
||||
zplane(b,a)
|
||||
plt.legend()
|
||||
plt.savefig("IIR_099r_2fs_025f0_pz.png")
|
@ -0,0 +1,77 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import scipy.signal
|
||||
from matplotlib import patches
|
||||
from matplotlib.figure import Figure
|
||||
from matplotlib import rcParams
|
||||
|
||||
def zplane(b,a,filename=None):
|
||||
"""Plot the complex z-plane given a transfer function.
|
||||
"""
|
||||
|
||||
# get a figure/plot
|
||||
ax = plt.subplot(111)
|
||||
|
||||
# create the unit circle
|
||||
uc = patches.Circle((0,0), radius=1, fill=False,
|
||||
color='black', ls='dashed')
|
||||
ax.add_patch(uc)
|
||||
|
||||
# The coefficients are less than 1, normalize the coeficients
|
||||
if np.max(b) > 1:
|
||||
kn = np.max(b)
|
||||
b = b/float(kn)
|
||||
else:
|
||||
kn = 1
|
||||
|
||||
if np.max(a) > 1:
|
||||
kd = np.max(a)
|
||||
a = a/float(kd)
|
||||
else:
|
||||
kd = 1
|
||||
|
||||
# Get the poles and zeros
|
||||
p = np.roots(a)
|
||||
z = np.roots(b)
|
||||
k = kn/float(kd)
|
||||
|
||||
# Plot the zeros and set marker properties
|
||||
t1 = plt.plot(z.real, z.imag, 'o', ms=10, label="zero")
|
||||
plt.setp(t1, markersize=10.0, color='tab:blue', fillstyle='none')
|
||||
|
||||
# Plot the poles and set marker properties
|
||||
t2 = plt.plot(p.real, p.imag, 'x', ms=10, label="pole")
|
||||
plt.setp(t2, markersize=10.0, color='tab:blue')
|
||||
|
||||
ax.spines['left'].set_position('center')
|
||||
ax.spines['bottom'].set_position('center')
|
||||
ax.spines['right'].set_visible(False)
|
||||
ax.spines['top'].set_visible(False)
|
||||
|
||||
# set the ticks
|
||||
r = 1.5; plt.axis('scaled'); plt.axis([-r, r, -r, r])
|
||||
ticks = [-1, -.5, .5, 1]; plt.xticks(ticks); plt.yticks(ticks)
|
||||
return z, p, k
|
||||
|
||||
|
||||
f_s = 2 # Sampling frequency of 2[Hz]
|
||||
f_0 = 0.25 # Notch frequency at 0.25[Hz]
|
||||
r = 0.99 # Poles at radius 0.99
|
||||
|
||||
b_0 = 1
|
||||
b_1 = -2*np.cos(2*np.pi*f_0/f_s)
|
||||
b_2 = 1
|
||||
b = [b_2, b_1, b_0]
|
||||
|
||||
a_0 = 2 - 2*np.cos(2*np.pi*f_0/f_s)
|
||||
a = [a_0]
|
||||
|
||||
omega, h = scipy.signal.freqz(b,a, fs=f_s)
|
||||
|
||||
h_f = np.abs(h)
|
||||
|
||||
plt.figure(figsize=(16,9))
|
||||
plt.plot(omega, h_f)
|
||||
plt.title("Magnitude Response")
|
||||
plt.xlabel("Frequency in Hz")
|
||||
plt.savefig("FIR_099r_2fs_025f0_freq.png")
|
BIN
6th-Semester-Spring-2024/DSP/Quizzes/answer_sheet_4.docx
Normal file
BIN
6th-Semester-Spring-2024/DSP/Quizzes/answer_sheet_4.docx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user