यहाँ matplotlib.specgram पैरामीटर दिए गए हैं
matplotlib.mlab.specgram(x,
NFFT=256,
Fs=2,
detrend=<function detrend_none at 0x1dd6410>,
window=<function window_hanning at 0x1e0b1b8>,
noverlap=128,
pad_to=None,
sides='default',
scale_by_freq=None)
प्रश्न विवरण में दिए गए मापदंडों को तुलनीय mpl.specgram मापदंडों में बदलने की आवश्यकता है। निम्नलिखित मानचित्रण का एक उदाहरण है:
View range: 0-8000Hz Fs=16000
Window length: 0.005s NFFT = int(Fs*0.005) = 80
noverlap = int(Fs*0.0025) = 40
Dynamic range: 70dB n/a
Time steps: 1000 n/a
Frequency steps: 250
Window shape: Gaussian default window is hanning change to gaussian
यदि आप 8ms का उपयोग करते हैं तो आपको 2 FFT (128) की शक्ति मिलेगी। उनकी वेबसाइट से प्रैट सेटिंग्स का विवरण निम्नलिखित है
व्यू रेंज (हर्ट्ज) : प्रदर्शित करने के लिए आवृत्तियों की सीमा। मानक 0 हर्ट्ज नीचे है और शीर्ष पर 5000 हर्ट्ज है। यदि यह अधिकतम आवृत्ति ध्वनि की न्यक्विस्ट आवृत्ति (जो कि इसकी नमूना आवृत्ति है) से अधिक है, तो स्पेक्ट्रोग्राम में कुछ मान शून्य होंगे, और उच्च आवृत्तियों को सफेद रंग में खींचा जाएगा। आप इसे देख सकते हैं यदि आप 44100 हर्ट्ज पर ध्वनि रिकॉर्ड करते हैं और 0 हर्ट्ज से 25000 हर्ट्ज तक व्यू रेंज सेट करते हैं।
विंडो की लंबाई : विश्लेषण विंडो की अवधि। यदि यह 0.005 सेकंड (मानक) है, तो प्रैट प्रत्येक फ्रेम के लिए ध्वनि के उस हिस्से का उपयोग करता है जो 0.0025 सेकंड से पहले और उस फ्रेम के केंद्र के बाद 0.0025 सेकंड के बीच स्थित है (गॉसियन खिड़कियों के लिए, प्रैट वास्तव में उससे थोड़ा अधिक उपयोग करता है)। खिड़की की लंबाई वर्णक्रमीय विश्लेषण की बैंडविड्थ को निर्धारित करती है, अर्थात शुद्ध साइन लहर के स्पेक्ट्रोग्राम में क्षैतिज रेखा की चौड़ाई (नीचे देखें)। गॉसियन विंडो के लिए, -3 डीबी बैंडविड्थ 2 * sqrt (6 * ln (2)) / () * विंडो की लंबाई), या 1.2982804 / विंडो की लंबाई है। एक broad-band' spectrogram (bandwidth 260 Hz), keep the standard window
length of 5 ms; to get a
संकीर्ण-बैंड 'स्पेक्ट्रोग्राम (बैंडविड्थ 43 हर्ट्ज) प्राप्त करने के लिए , इसे 30 एमएस (0.03 सेकंड) पर सेट करें। अन्य विंडो आकार थोड़ा भिन्न मान देते हैं।
डायनामिक रेंज (dB) : सभी मान जो डायनेमिक रेंज dB से अधिक हो (अधिकतम डायनामिक संपीड़न के बाद, उन्नत स्पेक्ट्रोग्राम सेटिंग देखें ...) को सफेद रंग में खींचा जाएगा। बीच में मानों में भूरे रंग के उपयुक्त रंग होते हैं। इस प्रकार, अगर स्पेक्ट्रोग्राम की सबसे ऊंची चोटी की ऊंचाई 30 डीबी / हर्ट्ज है, और गतिशील रेंज 50 डीबी (जो मानक मान है), तो -20 डीबी / हर्ट्ज से नीचे के मानों को सफेद रंग में खींचा जाएगा, और मानों के बीच -20 dB / Hz और 30 dB / Hz ग्रे के विभिन्न रंगों में खींचे जाएंगे।
प्रैट सेटिंग्स से लिंक करें
ओपी का सवाल प्रैट स्पैक्ट्रम और mpl (matplotlib) स्पैक्ट्रम के बीच के अंतर के विषय में हो सकता है। प्रैट में डायनामिक रेंज सेटिंग है जो कंट्रास्ट को प्रभावित करती है। Mpl फ़ंक्शन में समान सेटिंग / पैरामीटर नहीं है। Mpl.specgram बिजली के स्तर (स्पेक्ट्रोग्राम) के 2 डी सरणी को वापस लौटाता है और डायनामिक रेंज रिटर्न ऐरे पर लागू किया जा सकता है और फिर से प्लॉट किया जा सकता है।
नीचे दिए गए भूखंडों को बनाने के लिए एक कोड स्निपेट है। उदाहरण 20Hz-8000Hz से चिर के साथ ~ 1m15s भाषण है।
import numpy
import pylab
import wave
import array
pylab.close('all')
w1 = wave.open('example_no_noise.wav')
w2 = wave.open('example_noise.wav')
# hmmm, probably a better way to do this, scipy.io function?
x1 = numpy.array(array.array('h', w1.readframes(w1.getnframes())))
x2 = numpy.array(array.array('h', w2.readframes(w2.getnframes())))
x1 = x1 / (2.**(16-1)) # normalize
x2 = x2 / (2.**(16-1)) # normalize
Fs = 16000.
NFFT = int(Fs*0.005) # 5ms window
noverlap = int(Fs*0.0025)
pylab.figure(1)
pylab.specgram(x1, NFFT=NFFT, Fs=Fs, noverlap=noverlap,
cmap=pylab.get_cmap('Greys'))
pylab.title('Full 1m15s example min noise')
pylab.figure(2)
pylab.specgram(x2, NFFT=NFFT, Fs=Fs, noverlap=noverlap,
cmap=pylab.get_cmap('Greys'))
pylab.title('Full 1m15s example more noise')
pylab.figure(3); n=2100*176;
pylab.specgram(x2[n:n+256*256], NFFT=NFFT, Fs=Fs, noverlap=noverlap,
cmap=pylab.get_cmap('Greys'))
pylab.title('Full ~4s example min noise')
pylab.figure(4); pylab.plot(x1[n:n+256*256])