Лучший способ БПФ - Макс. Значение FFT - Python - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь создать прибор для измерения SPL с малиной, написанной на Python. Я записываю звук, а затем делаю БПФ, но у меня нет правильного значения в логарифме.

    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, который я использую. У меня есть 2 вопроса:

  1. FFT_side - это значение float64, каков максимальный диапазон?

Мой процессор - armv7l 32bit. Я обнаружил в интернете, что это максимальный диапазон 1.7976931348623157e + 308, это правильно?

Как получить график дБ, не зная, какое напряжение на микрофоне? Я думал сделать value_read / max_float64, но это не работает вообще.
...