Я пишу программу для получения 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)
Это выходные данные из моего кода сравниваются с данными программного обеспечения: