在 Python 中表示低通滤波器时的直线
Straight Line when representing Lowpass filter in Python
我尝试使用 Hammond Window 实现低通滤波器。截止频率是 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()
我附上了你的pyplot应该是什么样子:
这是我的情节:
为什么最后一张图中的红线没有穿过剧情点?任何想法为什么?谢谢!
plt.stem
draws dots with vertical lines connected via a baseline, as shown in your second plot. To draw dots and connected line segments, there is plt.plot
有很多选项。
请注意,通常 pyplot
被导入为 plt
。这样,人们可以快速看到绘图相关代码发生在哪里,从而更容易理解和维护。
同样,numpy
被导入为 np
。 Numpy 函数可以处理完整的数组,类似于处理单个变量 ("broadcasting"),这仅在所有函数和数组都使用 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()
我尝试使用 Hammond Window 实现低通滤波器。截止频率是 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()
我附上了你的pyplot应该是什么样子:
这是我的情节:
为什么最后一张图中的红线没有穿过剧情点?任何想法为什么?谢谢!
plt.stem
draws dots with vertical lines connected via a baseline, as shown in your second plot. To draw dots and connected line segments, there is plt.plot
有很多选项。
请注意,通常 pyplot
被导入为 plt
。这样,人们可以快速看到绘图相关代码发生在哪里,从而更容易理解和维护。
同样,numpy
被导入为 np
。 Numpy 函数可以处理完整的数组,类似于处理单个变量 ("broadcasting"),这仅在所有函数和数组都使用 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()