FFT的最佳方法-最大值FFT-Python

FFT的最佳方法-最大值FFT-Python,python,floating-point,fft,raspberry-pi3,decibel,Python,Floating Point,Fft,Raspberry Pi3,Decibel,我正试图用Python编写的raspberry构建一个SPL测量设备。 我录下一个声音,然后做FFT,但我没有正确的对数值 fs_rate, signal = wavfile.read(filename) l_audio = len(signal.shape) if l_audio == 2: signal = signal.sum(axis=1) / 2 N = signal.shape[0] secs = (N / float(fs_r

我正试图用Python编写的raspberry构建一个SPL测量设备。 我录下一个声音,然后做FFT,但我没有正确的对数值

    fs_rate, signal = wavfile.read(filename)
    l_audio = len(signal.shape)
    if l_audio == 2:
        signal = signal.sum(axis=1) / 2
    N = signal.shape[0]
    secs = (N / float(fs_rate))
    Ts = 1.0/fs_rate # sampling interval in time
    t = scipy.arange(0, secs, Ts) # time vector as scipy arange field / numpy.ndarray
    FFT = abs(scipy.fft(signal))
    FFT_side = FFT[range(N//2)] # one side FFT range
    freqs = scipy.fftpack.fftfreq(signal.size, t[1]-t[0])
    fft_freqs = np.array(freqs)
    freqs_side = freqs[range(N//2)] # one side frequency range
    fft_freqs_side = np.array(freqs_side)
    fft_log = 94 + np.log10((FFT_side/(1.79*10**308)))       
    print("Type: %s" % (FFT_side.dtype))
上面你可以看到我使用的FFT代码。 我有两个问题:

  • FFT_侧为浮点64值,最大范围是多少 我的处理器是armv7l 32位。我在网上发现这是最大范围1.7976931348623157e+308,对吗

  • 在不知道麦克风两端的电压是多少的情况下,如何获得dB图? 我想做value\u read/max\u float64,但这根本不起作用

  • 要测量SPL,需要校准的参考信号。dB值是相对于某些参考值(例如满标度输入或某些其他标称参考)的任意比率。是相对于参考SPL(20µPa)的比率,这就是您需要校准参考的原因。(优点:如果你想正确校准,你还需要在一个频率范围内进行校准,因为你的麦克风频率响应不会是平坦的。)我理解这个理论,但我不理解如何校准参考信号。我要做的是在最大值下建立一个1kHz正弦,并将其与测量值相关联。例如:fft_log=94+20*log(测量信号/参考信号)。这是正确的吗?为了精确校准,您通常会使用校准过的声源-这是一种硬件设备,可在特定频率和SPL下生成音频音调。或者,你可以借用或租用一个SPL仪表,并根据该仪表校准你的应用程序。