【发布时间】:2021-07-24 03:11:11
【问题描述】:
我正在尝试使用 fft 来消除信号中的噪声。在这样做的同时,我得到了像 thisfreq_domain 这样的频域:
因此,当对信号的峰值频率应用黄油通滤波器时,会像这个原始图像一样过度平滑:
应用butter pass filter后的图像:
所以我被困在这个问题上,想找出减少信号过度平滑的解决方案
for i in range(data_first_interval.shape[0]):
ppgwave=data_first_interval.loc[i]
ppg_fit=fftpack.fft(np.array(ppgwave))
ppgarr=np.array(ppgwave)
amp=2 / time_vec.size*np.abs(ppg_fit)
sample_freq=fftpack.fftfreq(2100,0.001)
signal_amplitude = pd.Series(amp).nlargest(2).round(0).astype(int).tolist()
magnitudes = abs(ppg_fit[np.where(sample_freq >= 0)])
#Get index of top 2 frequencies\
peak_frequency = np.sort((np.argpartition(magnitudes, -2)[-2:])/2.1)
cutoff = peak_frequency[1]
y = butter_lowpass_filter(ppgarr, cutoff, fs, order)
data_first_interval.loc[i]=y
我的黄油低通滤波器定义如下
fs = 1000.0
order = 2
def butter_lowpass_filter(data, cutoff, fs, order):
print("Cutoff freq " + str(cutoff))
nyq = 0.5 * fs # Nyquist Frequency
normal_cutoff = cutoff / nyq
# Get the filter coefficients
b, a = butter(order, normal_cutoff, btype='low', analog=False)
y = filtfilt(b, a,data)
return y
谁能帮我看看哪里出错了
【问题讨论】:
-
我投票结束这个问题,因为它与help center 中定义的编程无关,而是关于信号处理理论/方法。
标签: python signal-processing fft noise-reduction