मैं एलईडी के 8 स्ट्रिप्स के साथ घर निर्मित स्पेक्ट्रम विश्लेषक बनाने की कोशिश कर रहा हूं।स्पेक्ट्रम विश्लेषक के लिए एफएफटी डेटा का उपयोग कैसे करें
जिस भाग के साथ मैं संघर्ष कर रहा हूं वह एफएफटी कर रहा है और परिणामों का उपयोग कैसे कर रहा है।
import opc
import time
import pyaudio
import wave
import sys
import numpy
import math
CHUNK = 1024
# Gets the pitch from the audio
def pitch(signal):
# NOT SURE IF ANY OF THIS IS CORRECT
signal = numpy.fromstring(signal, 'Int16');
print "signal = ", signal
testing = numpy.fft.fft(signal)
print "testing = ", testing
wf = wave.open(sys.argv[1], 'rb')
RATE = wf.getframerate()
p = pyaudio.PyAudio() # Instantiate PyAudio
# Open Stream
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# Read data
data = wf.readframes(CHUNK)
# Play Stream
while data != '':
stream.write(data)
data = wf.readframes(CHUNK)
frequency = pitch(data)
print "%f frequency" %frequency
मैं क्या pitch
विधि में क्या करना के साथ संघर्ष कर रहा हूँ:
अभी तक यह है कि मैं क्या है। मुझे पता है कि मुझे पास किए गए डेटा पर एफएफटी करने की ज़रूरत है, लेकिन वास्तव में यह सुनिश्चित नहीं है कि इसे कैसे किया जाए।
भी this फ़ंक्शन का उपयोग करना चाहिए?
आप किस बारे में अनिश्चित हैं? दो कार्यों के लिए दस्तावेज़ों को देखो। क्या आपने numpy.fft.fftfreq के लिए दस्तावेज़ पृष्ठ पर उदाहरण देखा था? http://www.dspguide.com/pdfbook.htm एक अच्छा संसाधन है। – wwii
इस पृष्ठ पर उदाहरण लंबाई 8 की एक श्रृंखला दिखाता है। उन्हें 8 की लंबाई कैसे मिली? मेरा हिस्सा आकार 1024 और 2 चैनल है इसलिए मेरी सरणी लंबाई 2048 है। Https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.fftpack.fftfreq.html#scipy.fftpack.fftfreq – Catfish
मैं दो चैनलों को अलग से इलाज करूंगा। 'np.fft.fft()' जटिल मानों की एक सरणी को इसके इनपुट के समान लंबाई लौटाएगा - प्रत्येक मान एक आवृत्ति का प्रतिनिधित्व करता है, जटिल संख्या का पूर्ण मूल्य उस आवृत्ति की परिमाण है, मान का जटिल घटक है इसकी चरण शिफ्ट। 'np.fft.fftfreq()' वास्तविक आवृत्तियों के साथ एक सरणी देता है जो चौकोर परिवर्तन से मूल्य लौटाता है। यदि आप स्पेक्ट्रम 'np.absolute (np.fft.fft (सिग्नल)) प्लॉट करना चाहते हैं तो' ordinate (y मान) और 'np.fft.fftfreq (...)' abscissa (x) होगा । – wwii