2015-01-27 2 views
0

Я пишу код, который принимает окна 1024 выборок каждый из синусоидальных волн, принимает БПФ каждого окна и возвращает максимальную частоту каждого окна. Я знаю, что все они будут одинаковыми для синусоиды, но это для тестирования. Мой код работает в основном, за исключением того, что результирующие частоты кажутся примерно на 10 процентов ниже, чем они должны быть. Например, синус 440 Гц приводит к максимальной амплитуде на частоте 430 в моем БПФ. Я не могу для жизни меня понять, что вызывает это. Какие-либо предложения?Выход окна FFT около 10% от Python

import math 
import numpy as np 
import matplotlib.pyplot as plt 
import pylab as py 
from scipy import fftpack 
from pylab import * 
import scipy.io.wavfile 

def PARTA(window): 

    sr = 44100 
    x = arange(0., 2*pi, 1./sr) 
    samples = sin(2*pi*440*x) 

    time_step = 1./sr 

    end = len(samples)/window 
    print end 
    '''Make a 2-D array of samples''' 
    windowed = [] 
    maxes = [] 
    for i in range(0, end): 
     windowed.append(samples[i*window:(i+1)*window]) 
    for j in range(0, end): 
     ps = np.abs(np.fft.fft(windowed[j]))**2 
     freqs = np.fft.fftfreq(windowed[j].size, time_step) 
     max_y = max(ps) # Find the maximum y value 
     max_x = freqs[ps.argmax()] # Find the x value corresponding to the maximum y value 
     maxes.append(max_x) 
    end2 = float(len(samples)/sr) 
    #print end2 
    interval = end2/end 
    #print interval 
    x = arange(0., end2, interval) 
    y = [] 
    for i in range(0, len(maxes)): 
     y.append(abs(maxes[i])) 
    return (x, y) 

x, y = PARTA(1024) 
plt.plot(x, y, 'ro') 
plt.show() 

ответ

0

Это просто, что ваш БПФ имеет очень грубое разрешение, так как он имеет только 1024 бункера. Каждый бит в вашем FFT имеет разрешение 44100/1024 = 43.1 Hz. Ваш пик 440 Гц будет иметь индекс индекса 10, который имеет соответствующую центральную частоту 10 * 44100/1024 = 430.66 Hz.

См. this question для более подробной информации о индексах БПФ и соответствующих частотах.

Смежные вопросы