2012-06-11 12 views
5

की यह आंशिक रूप से मैटलैब fft-प्रलेखन से लिया जाता है:fft/IFFT: नमूना आवृत्ति और लंबाई सिग्नल

Fs = 30;     % Sampling frequency 
T = 1/Fs;     % Sample time 
L = 130;     % Length of signal 
t = (0:L-1)*T;    % Time vector 

x = sin(2*pi*1*t);   % 1 Hz sinus 

plot(real(ifft(abs(fft(x))))); % fft then ifft 

% Fs = 30, L = 60/90/120 ... : ok 
% Fs = 20, L = 60/80/100 ... : ok 
% Fs = 30, L = 50/70/80 ... : not ok 

मुझे ऐसा लगता है कि जब भी संकेत की लंबाई नमूना आवृत्ति की एक बहु है, sinusoid सही ढंग से पुनर्निर्मित किया जाता है (कुछ बदलाव के अलावा), उदाहरण के लिए यहाँ Fs = 30, L = 60:

enter image description here

हालांकि, अगर उदाहरण Fs = 30, L = 80 (नहीं एक से अधिक) के लिए, परिणाम अजीब लग रहा है:

enter image description here

इस व्यवहार सही है? यह क्यों हो रहा है और मैं इससे कैसे बच सकता हूं? बस सिग्नल के कुछ हिस्से को फेंक दें जैसे कि लंबाई नमूना आवृत्ति "फिट" हो जाती है?

उत्तर

7

जब आप ifft में abs (fft()) का उपयोग करते हैं, तो आप केवल सिग्नल के आयाम का उपयोग कर रहे हैं और चरण की जानकारी छोड़ रहे हैं, जिसकी आवश्यकता है। कि यह हल करती है

plot(real(ifft(fft(x)))); % fft then ifft 
+0

धन्यवाद,:

पूरे संकेत (हटाया पेट) का प्रयोग करें। फिर भी, मुझे समझ में नहीं आता कि चरण की जानकारी क्यों जरूरी है। क्या आप इसे थोड़ा और विस्तारित कर सकते हैं? कुछ मामलों में यह सही तरीके से (शिफ्ट के अलावा) क्यों काम करता है? – Tobold

+3

एफएफटी (या डीएफटी) परिभाषा की जांच करें। एफएफटी (एक्स) के परिणामस्वरूप आवृत्तियों (एफएस/2) * (0 ... (एन/2) +1)/(एन/2 + 1) हैं। अपने 1 हर्ट्ज साइनस तक पहुंचने के लिए आपको ऐसा लगता है कि (एफएस/2) * के/(एन/2 + 1) = 1. जब के पूर्णांक (गोल संख्या) होता है, तो प्रतिनिधित्व करने के लिए कोई चरण (देरी) की आवश्यकता नहीं होती है 1 हर्ट्ज, और ऐसा तब होता है जब एन/एफ (या आपके मामले में एल/एफ) एक पूर्णांक होता है। जब ऐसा नहीं होता है, तो आपके एफएफटी आउटपुट में कोई 1 हर्ट्ज नहीं होता है, और एल्गोरिदम एक मान के में 1 हर्ट्ज का प्रतिनिधित्व करता है जो 1 हर्ट्ज के करीब है और एक चरण मान है जो इसे 1 हर्ट्ज तक दे देता है। मुझे उम्मीद है कि मेरी व्याख्या कुछ स्पष्ट है। :) – Ran

+0

धन्यवाद! अब यह स्पष्ट है :) – Tobold