у меня есть сигнал
Я попытался отфильтровать его в полосе [1,5] Гц
с помощью этого кода
def BPF(x,alpha=1,beta=5):
"""
Args:
:alpha - cuttoff frequency of start of pass band
:beta - cuttoff frequency of end of pass band
:x - 1D vector
:return: the filtered vector x
"""
y = fft(x) #fourier transform
middle = len(x)//2 #find the middle becuase fourier transform is symetric
freqs = y[:middle] #get the middle
windowL = np.zeros(middle,dtype=float)#low_freq
windowB = np.zeros(middle,dtype=float)#band_freq
for i in range(middle):
#check with wondow fits
if abs(freqs[i])<alpha:
windowL[i] = 1
elif abs(freqs[i])>beta:
pass
else:
windowB[i]=1
#get the proper frequencies for each group and zero if not in the group
#create the second half by the fact of the symetry we know
y_low = ifft(np.concatenate((freqs*windowL,np.flip(freqs*windowL))),axis=0).real
y_band = ifft(np.concatenate((freqs*windowB,np.flip(freqs*windowB))),axis=0).real
plt.figure()
plt.subplot(211)
plt.title('low frequencies')
plt.plot(y_low)
plt.subplot(212)
plt.title('PPG')
plt.plot(y_band)
plt.subplots_adjust(hspace=1)
plt.grid()
plt.show()
return y_band
, но выходной сигнал находится между -0,1 и 0,1, но мой исходный сигнал был между 1 и 3, почему это происходит?
как решить?