问题描述
- python:对一个波形做傅里叶变换,能得到整个频谱,怎么提取其中的频率分量呢?
-
import wave
import struct
import numpy as npif name == '__main__':
data_size = 40000
fname = "test.wav"
frate = 11025.0
wav_file = wave.open(fname, 'r')
data = wav_file.readframes(data_size)
wav_file.close()
data = struct.unpack('{n}h'.format(n=data_size), data)
data = np.array(data)w = np.fft.fft(data) freqs = np.fft.fftfreq(len(w)) print(freqs.min(), freqs.max()) # (-0.5, 0.499975) # Find the peak in the coefficients idx = np.argmax(np.abs(w)) freq = freqs[idx] freq_in_hertz = abs(freq * frate) print(freq_in_hertz) # 439.8975
这个是对于单个data_size,frate已知的情况,真实情况是未知,且有多个频率的信号。求解。。。
解决方案
对于单个频率的波形,取频谱的峰值,np.argmax()可以取到下标值,根据freq=下标*N/fs,获得频率值, 对于含有多个频率的波形,我是做一个区分,判断频谱中
振幅大于某个数,就为信号,小于某个数就为噪声。这样不准确,最好用信噪比判断,然后同样获取下标,获得频率值,相应还能得到幅度。
解决方案二:
看到傅立叶我就晕了。楼主帮顶一个!
解决方案三:
你这个是已知频率和幅度数组,通过傅里叶变换得到频谱的程序吗?
解决方案四:
我们需要一个已知频率数组和幅度数组,用STM32编程实现用示波器显示频谱,但是要自己写算法的程序,不知道你能帮我的忙?感激不尽
时间: 2024-10-22 07:43:50