我想知道信号中是否存在某些频率,我想用以下样式创建一个函数:
def freq_exists(signal, freq):
if freq in signal:
return True
return False
我正在这样产生1hz的波:
def create_sin_wave(freq):
sample_rate = 8000 # sampling rate Hz
duration = 0.0025 # in seconds
f = freq # sine frequency Hz
samples = (np.sin(2*np.pi*np.arange(sample_rate*duration)*f/sample_rate)).astype(np.float32)
return samples
signal = create_sin_wave(1) # this will return sine wave of 1hz freq.
现在我想用FFT建模并清除噪声,这样我就知道信号上是否存在1HZ:
fourier_transform = numpy.fft.fft(signal) # get the Fourier transform of the signal
magnitude_of_fourier_transform = np.abs(fourier_transform ) # get the magnitude
现在我想在结果上添加滤波器(FIR),以便可以发出布尔答案,即信号中是否存在频率X。
我看到了函数scipy.signal.firwin
和scipy.signal.lfilter
,但是我不清楚该函数正在输入哪些参数以及如何生成将返回的布尔泛型函数(如freq_exists骨架)在任何X频率和任何信号上为是/否。
有人可以在此添加示例吗? (我看到了官方的scipy示例,但对我来说还不清楚,我正在寻找一个关于此functins的简单示例/任何更合适的实现示例-目的是检查任意信号中是否存在特定频率)