1/3 октавы с использованием python scipy.butter, выходные значения неверны - PullRequest
0 голосов
/ 26 марта 2020

Я пишу программу для получения 1/3 октавного фильтра аудио-wav-файла с использованием python scipy.butter, но отфильтрованные значения отличаются от программного обеспечения, которое я использовал для обработки аудиофайлов. Какой шаг неверен в моем коде?

datapath = r"D:\yayar\THESIS\LORA\MARCO\data\SCW1924_20200323_042300.wav" 
    audioInfo = sf.info(datapath)
    samplerate = audioInfo.samplerate  #64000
    frames = audioInfo.frames          #3776000
    counter = 1
    dB_data = []
    for start_frames in range(1, 3712002, samplerate):  #1~3712001, 64000
        end_frames = start_frames + samplerate          #63999
        print("The " + str(counter) + "s data!")
        pysData, pysSr = sf.read(datapath, start = start_frames, stop = end_frames, dtype = 'int32')
        pysData = pysData/(2**23 - 1)/256

    nyquistRate = samplerate/2.0
    centerFeq = np.array([20, 25, 31.5, 40, 50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800,
                        1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, 6300, 8000, 10000, 12500, 16000, 20000])
    factor = np.power(2, 1/6)
    lowerFeq=centerFeq/factor
    upperFeq=centerFeq*factor
    rmsData = []
    presureStan = 10**(-6)  
    for lower,upper in zip(lowerFeq, upperFeq):
        sos = signal.butter(4, Wn=np.array([lower, upper])/nyquistRate, btype='bandpass', analog=False, output='sos') 
        filteredData = signal.sosfilt(sos, pysData)

        value = (np.sqrt(np.sum(filteredData**2)/64000))/presureStan
        rmsData.append(value)
    dbData = 20*np.log10(rmsData)

Это выходные данные из моего кода сравниваются с данными программного обеспечения:

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...