我尝试使用Hammond窗口实现低通滤波器。截止频率是0.3,滤波器的阶数是21。我的问题是我有一条直线,并且没有穿过表示的点。这是代码:
from pylab import *
import scipy.signal as signal
import matplotlib.pyplot as plt
#Plot step and impulse response
def impz(b,a=1):
l = len(b)
impulse = repeat(0.,l); impulse[0] =1.
x = arange(0,l)
response = signal.lfilter(b,a,impulse)
subplot(211)
stem(x, response)
ylabel('Amplitude')
xlabel(r'Index')
title(r'Impulse response')
n = 21
a = signal.firwin(n, cutoff = 0.3, window = "hamming")
#Impulse and step response
figure(2)
impz(a)
show()
为什么最后一张图片中的红线没有穿过绘图的点?有什么想法吗?谢谢!
plt.stem
绘制带有通过基线连接的垂直线的点,如第二个图所示。要绘制点和连接的线段,有plt.plot
很多选择。
请注意,通常pyplot
导入为plt
。这样,人们可以快速查看绘图相关代码的发生位置,从而更易于理解和维护。
同样,numpy
作为导入np
。numpy函数可以在完整的数组上工作,类似于使用单个变量(“广播”),仅当所有函数和数组都使用numpy时,该函数才能正常工作。前缀np
有助于直观地进行检查。
这是带有导入pyplot和numpy的标准方法的示例代码。并要求plt.plot
获得与所需图相似的图。重命名主代码中的变量,b
以使对该impz
函数的调用更易于遵循。
import matplotlib.pyplot as plt
import numpy as np
import scipy.signal as signal
# Plot step and impulse response
def impz(b, a=1):
l = len(b)
impulse = np.repeat(0., l)
impulse[0] = 1.
x = np.arange(0, l)
response = signal.lfilter(b, a, impulse)
plt.subplot(211)
# plt.stem(x, response)
plt.plot(x, response, color='blueviolet', marker='o', markerfacecolor='none', markeredgecolor='dodgerblue')
plt.ylabel('Amplitude')
plt.xlabel('Index')
plt.title('Impulse response')
n = 21
b = signal.firwin(n, cutoff=0.3, window="hamming")
# Impulse and step response
plt.figure(2)
impz(b)
plt.show()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句