擅长:python、mysql、java
<p>Hello find the maximum computing the FFT for real-time analysis变得有点慢。</p>
<p>如果你不想用复杂的波形来寻找频率,你可以使用任何基于时域的方法,比如过零点法,这样性能会更好。</p>
<p>去年,我做了一个简单的函数,通过过零计算频率。</p>
<pre><code>#Eng Eder de Souza 01/12/2011
#ederwander
from matplotlib.mlab import find
import pyaudio
import numpy as np
import math
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 20
def Pitch(signal):
signal = np.fromstring(signal, 'Int16');
crossing = [math.copysign(1.0, s) for s in signal]
index = find(np.diff(crossing));
f0=round(len(index) *RATE /(2*np.prod(len(signal))))
return f0;
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
output = True,
frames_per_buffer = chunk)
for i in range(0, RATE / chunk * RECORD_SECONDS):
data = stream.read(chunk)
Frequency=Pitch(data)
print "%f Frequency" %Frequency
</code></pre>
<p>爱德华</p>