我需要在Python中实现一个低通滤波器,但我只能使用numpy模块(不是scipy)。我尝试在信号上使用
编辑后,更改
我的Lowpass函数应该接受以下参数:
过滤后的信号应该被返回。
我的当前函数。
np.fft.fft()
,然后将所有高于截止频率的频率设置为0,然后使用np.fft.ifft()
。然而这并没有起作用,我也不确定如何应用滤波器。编辑后,更改
np.abs()
为np.real()
,结果几乎正确了。但在频谱图中,振幅比原始和过滤参考值要小(差6dB)。所以看起来它还没有完全正确。有什么方法可以解决这个问题吗?我的Lowpass函数应该接受以下参数:
signal: audio signal to be filtered
cutoff_freq: cout off frequency in Hz above which to cut off frequencies
sampling_rate: sampling rate in samples/second
过滤后的信号应该被返回。
我的当前函数。
def low_pass_filter(adata: np.ndarray, bandlimit: int = 1000, sampling_rate: int = 44100) -> np.ndarray:
# translate bandlimit from Hz to dataindex according to sampling rate and data size
bandlimit_index = int(bandlimit * adata.size / sampling_rate)
fsig = np.fft.fft(adata)
for i in range(bandlimit_index + 1, len(fsig)):
fsig[i] = 0
adata_filtered = np.fft.ifft(fsig)
return np.real(adata_filtered)