在Python中使用带通滤波器进行信号传输时遇到了一些麻烦。尝试过以下事情:
另外我已经在音频程序Cool Edit中完成了相同的过滤,并比较了上述两个测试的结果。
可以看出(我是新用户,所以我无法发布我的png图),FFT和scipy.signal的结果非常不同。与Cool编辑的结果相比,FFT接近,但不相同。代码如下:
# imports
from pylab import *
import os
import scipy.signal as signal
# load data
tr=loadtxt('tr6516.txt',skiprows=1)
sr = 500 # [samples/s]
nf = sr/2.0 # Nyquist frequence
W = 512 # Window widht for filtering
N=float(8192) # Fourier settings
Ns = len(tr[:,0]) # Total number of samples
# Create inpulse responce from the filter
fv=12.25
w =0.5
r =0.5*w
Hz=[0, fv-w-r, fv-w, fv+w, fv+w+r, nf]
ff=[0, 0, 1, 1, 0, 0]
b = signal.firwin2(W,Hz,ff,nfreqs=N+1,nyq=nf)
SigFilter = signal.lfilter(b, 1, tr[:,1])
# Fourier transform
X1 = fft(tr[:,1],n=int(N))
X1 = fftshift(X1)
F1 = arange(-N/2.0,N/2.0)/N*sr
# Filter data
ff=[0,1,1,0]
fv=12.25
w =0.5
r =0.5*w
Hz=[fv-w-r,fv-w,fv+w,fv+w+r]
k1=interp(-F1,Hz,ff)+interp(F1,Hz,ff)
X1_f=X1*k1
X1_f=ifftshift(X1_f)
x1_f=ifft(X1_f,n=int(N))
任何人都可以向我解释为什么会有这种差异吗? Cool编辑中的过滤使用与scipy.signal(hanning window,window width 512)相同的设置完成。或者我完全错了。
祝你好运, 安德斯
以上代码:
与Cool Edit相比:
答案 0 :(得分:0)
可以通过使用不同算法的库来解释小的差异,这些算法会稍微不同地累积错误。
例如,如果使用基数-2 FFT,分裂基FFT和普通DFT计算DFT,结果将略有不同。事实上,普通DFT的精度比FFT的所有体面实现都要差,因为它使用了更多的浮点运算,因此累积了更多的误差。
这可以解释您所看到的结果(但不完全相同)吗?