def plotPhaseResponse(self, freqs=None, scale='radians',
showCorners=True,
label='Frequency Response',
ax=None, **kwargs):
"""Plot the frequency response of the filter.
"""
if ax is None:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
freqs, responses = self.frequencyResponse(freqs=freqs)
freqs = freqs * self.sampRate * 0.5 / np.pi
responseAngles = np.unwrap(np.angle(responses))
scale = scale.lower()
if scale == 'radians':
ax.set_ylabel('Phase (Radians)')
elif scale == 'cycles':
ax.set_ylabel('Phase (Cycles)')
responseAngles /= 2.0*np.pi
elif scale == 'degrees':
ax.set_ylabel('Phase (Degrees)')
responseAngles = responseAngles*180.0 / np.pi
else:
raise Exception('Invalid scale: ' + str(scale) + '.')
lines = ax.plot(freqs, responseAngles,
label=label, **kwargs)
result = {'ax': ax, 'lines': lines}
if showCorners:
cornerLines = ax.vlines((self.lowFreq,self.highFreq),
np.min(responseAngles), np.max(responseAngles),
color='violet', linestyle='--', label='Corners')
result['cornerLines'] = cornerLines
ax.set_xlabel('Frequency (Hz)')
return result
评论列表
文章目录