2012-07-03 12 views
6

मुझे आश्चर्य है कि क्या मैं MATLAB में फूरियर ट्रांसफ़ॉर्मेशन का सही तरीके से उपयोग कर रहा हूं। मैं एक गीत में आवृत्तियों के लिए सभी औसत आयाम चाहते हैं। परीक्षण उद्देश्यों के लिए मैं a free mp3 download of Beethovens "For Elise" का उपयोग कर रहा हूं जिसे मैंने Audacity का उपयोग करके 8 केएचजेड मोनो वेव फ़ाइल में परिवर्तित किया।क्या मैं फूरियर रूपांतरण का सही तरीके से उपयोग कर रहा हूं?

clear all % be careful 

% load file 
% Für Elise Recording by Valentina Lisitsa 
% from http://www.forelise.com/recordings/valentina_lisitsa 
% Converted to 8 kHz mono using Audacity 
allSamples = wavread('fur_elise_valentina_lisitsa_8khz_mono.wav'); 


% apply windowing function 
w = hanning(length(allSamples)); 
allSamples = allSamples.*w; 


% FFT needs input of length 2^x 
NFFT = 2^nextpow2(length(allSamples)) 


% Apply FFT 
fftBuckets=fft(allSamples, NFFT); 
fftBuckets=fftBuckets(1:(NFFT/2+1)); % because of symetric/mirrored values 


% calculate single side amplitude spectrum, 
% normalize by dividing by NFFT to get the 
% popular way of displaying amplitudes 
% in a range of 0 to 1 
fftBuckets = (2*abs(fftBuckets))/NFFT; 

% plot it: max possible frequency is 4000, because sampling rate of input 
% is 8000 Hz 
x = linspace(1,4000,length(fftBuckets)); 
bar(x,fftBuckets); 

उत्पादन तो इस तरह दिखता है: enter image description here

  1. कर सकते हैं किसी कृपया मुझे बताओ अगर मेरे कोड सही है

    मेरे MATLAB कोड इस प्रकार है? मैं विशेष रूप से चोटी के बारे में सोच रहा हूं 0.

  2. सामान्यीकरण के लिए, क्या मुझे NFFT या length(allSamples) से विभाजित करना है?
  3. मेरे लिए यह वास्तव में बार चार्ट की तरह नहीं दिखता है, लेकिन मुझे लगता है कि यह कई मूल्यों के कारण है जो मैं साजिश कर रहा हूं?

किसी भी संकेत के लिए धन्यवाद!

+1

क्या आपने यह पृष्ठ देखा है: [सरल स्पेक्ट्रल विश्लेषण प्लॉट प्राप्त करने के लिए एफएफटी का उपयोग] [http://www.mathworks.com/support/tech-notes/1700/1702.html)। इसमें बहुत सारे स्पष्टीकरण के साथ एक उदाहरण है – Amro

उत्तर

6
  1. "सही" की आपकी परिभाषा पर निर्भर करता है। यह आपके द्वारा किए गए कार्यों को कर रहा है, मुझे लगता है, लेकिन शायद यह बहुत उपयोगी नहीं है। मैं इसके बजाय 2 डी spectrogram का उपयोग करने का सुझाव दूंगा, क्योंकि आपको आवृत्ति सामग्री पर समय-स्थानीयकृत जानकारी मिल जाएगी।

  2. एफएफटी आउटपुट को सामान्य करने का कोई भी सही तरीका नहीं है; विभिन्न विभिन्न सम्मेलन हैं (उदाहरण के लिए चर्चा here)। आपके कोड में टिप्पणी कहती है कि आप 0 से 1 की सीमा चाहते हैं; यदि आपके इनपुट मान श्रेणी -1 से 1 में हैं, तो डिब्बे की संख्या से विभाजित करने से यह प्राप्त होगा।

  3. ठीक है, बिल्कुल!

मैं भी एक लघुगणकीय पैमाने पर y- अक्ष की साजिश रचने (decibels में) के रूप में की सिफारिश करेंगे कि मोटे तौर पर कैसे मानव कान प्रबलता की व्याख्या है।

2

दो चीजें हैं जो मुझ पर बाहर कूद:

  1. मुझे यकीन है कि तुम क्यों डीसी (सूचकांक = 1) अपने साजिश में घटक शामिल कर रहे हैं नहीं कर रहा हूँ। कोई बड़ा सौदा नहीं है, लेकिन बेशक कि बिन में कोई आवृत्ति डेटा नहीं है
  2. मुझे लगता है कि length(allSamples) द्वारा विभाजित NFFT द्वारा विभाजित करने से अधिक सही होने की संभावना है। इसका कारण यह है कि यदि आप डीसी घटक इनपुट डेटा के माध्य के बराबर होना चाहते हैं, तो length(allSamples) द्वारा विभाजित करना सही काम है।

हालांकि, ओली ने कहा, आप वास्तव में यह नहीं कह सकते कि "सही" सामान्यीकरण तब तक नहीं है जब तक आपको पता न हो कि आप गणना करने की कोशिश कर रहे हैं। मैं पावर स्पेक्ट्रा का अनुमान लगाने के लिए एफएफटी का उपयोग करता हूं, इसलिए मुझे "डीएसी/आरटी-एचजे" जैसी इकाइयां चाहिए, जो कि "डीएसी/एचजे" जैसी कुछ चाहें तो अलग सामान्यीकरण की ओर अग्रसर होंगी।

आखिरकार एफएफटी (इकाइयों समेत) से बाहर निकलने के बारे में सोचने के लिए कोई विकल्प नहीं है, और सही सामान्यीकरण होना चाहिए (यदि आवश्यक हो तो एफएफटी की परिभाषा से शुरू)।

आपको यह भी पता होना चाहिए कि MATLAB के fft में 2 की शक्ति की सरणी लंबाई का उपयोग करने की कोई आवश्यकता नहीं है (हालांकि ऐसा करने से संभवतः एफएफटी तेजी से चल रहा है)। चूंकि शून्य-पैडिंग कुछ रिंगिंग पेश करेगी, आपको इस बारे में सोचना होगा कि यह आपके आवेदन के लिए सही काम है या नहीं।

अंत में, यदि कोई आवृत्ति/पावर स्पेक्ट्रम वास्तव में आप चाहते हैं, तो MATLAB periodogram, pwelch और अन्य जो उपयोगी हो सकता है जैसे कार्यों को प्रदान करता है।

संबंधित मुद्दे

 संबंधित मुद्दे