如何获得每个频段的平均fft值?

时间:2019-06-04 21:54:05

标签: python-3.x fft

大家好,我正在尝试获取我的7个频段的平均fft值 到目前为止,这是代码。它具有日志功能。 问题是我想要每个频段的平均fft值 我怎样才能做到这一点? 有人要求获取较低的索引,但我无法弄清楚 现在对我来说,戒烟变得越来越复杂。 这是代码>>

import pyaudio
import numpy as np
import math
np.set_printoptions(suppress=True) # don't use scientific notation

CHUNK = 2048 # number of data points to read at a time
RATE = 44100 # time resolution of the recording device (Hz)


p=pyaudio.PyAudio() # start the PyAudio class
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
              frames_per_buffer=CHUNK) #uses default input device

#maxValue            = 2**16
# 7 Freq Bands

NUM_BAND = 7
lower = 0
d = math.log10(CHUNK/2-1)/NUM_BAND


for i in range(1): #to it a few times just to see
    try:
        data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
        fft = abs(np.fft.fft(data).real)
        fft = fft[:int(len(fft)/2)] # keep only first half

        freq = np.fft.fftfreq(CHUNK,1.0/RATE)
        freq = freq[:int(len(freq)/2)] # keep only first half


        band_lower = []
        for i in range(NUM_BAND):
            higher = round(math.pow(10,(i+1)*d))
            print("Band %d from freq[%d]=%f to freq[%d]=%f"%(i, lower, 
            freq[lower], higher, freq[higher]))
            lower = higher+1

    except KeyboardInterrupt:
        stream.stop_stream()
        stream.close()
        p.terminate()

这是打印输出

Band 0 from freq[0]=0.000000 to freq[3]=64.599609
Band 1 from freq[4]=86.132812 to freq[7]=150.732422
Band 2 from freq[8]=172.265625 to freq[19]=409.130859
Band 3 from freq[20]=430.664062 to freq[52]=1119.726562
Band 4 from freq[53]=1141.259766 to freq[141]=3036.181641
Band 5 from freq[142]=3057.714844 to freq[380]=8182.617188
Band 6 from freq[381]=8204.150391 to freq[1023]=22028.466797

1 个答案:

答案 0 :(得分:0)

您可以使用np.average计算平均值:

startend是你的乐队。

import numpy as np 

a = np.array([[1, 2, 3], [4, 5, 6], [3,4,5]])

print(np.average(a[start:end], axis=0))