की यह आंशिक रूप से मैटलैब 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
:
हालांकि, अगर उदाहरण Fs = 30, L = 80
(नहीं एक से अधिक) के लिए, परिणाम अजीब लग रहा है:
इस व्यवहार सही है? यह क्यों हो रहा है और मैं इससे कैसे बच सकता हूं? बस सिग्नल के कुछ हिस्से को फेंक दें जैसे कि लंबाई नमूना आवृत्ति "फिट" हो जाती है?
धन्यवाद,:
पूरे संकेत (हटाया पेट) का प्रयोग करें। फिर भी, मुझे समझ में नहीं आता कि चरण की जानकारी क्यों जरूरी है। क्या आप इसे थोड़ा और विस्तारित कर सकते हैं? कुछ मामलों में यह सही तरीके से (शिफ्ट के अलावा) क्यों काम करता है? – Tobold
एफएफटी (या डीएफटी) परिभाषा की जांच करें। एफएफटी (एक्स) के परिणामस्वरूप आवृत्तियों (एफएस/2) * (0 ... (एन/2) +1)/(एन/2 + 1) हैं। अपने 1 हर्ट्ज साइनस तक पहुंचने के लिए आपको ऐसा लगता है कि (एफएस/2) * के/(एन/2 + 1) = 1. जब के पूर्णांक (गोल संख्या) होता है, तो प्रतिनिधित्व करने के लिए कोई चरण (देरी) की आवश्यकता नहीं होती है 1 हर्ट्ज, और ऐसा तब होता है जब एन/एफ (या आपके मामले में एल/एफ) एक पूर्णांक होता है। जब ऐसा नहीं होता है, तो आपके एफएफटी आउटपुट में कोई 1 हर्ट्ज नहीं होता है, और एल्गोरिदम एक मान के में 1 हर्ट्ज का प्रतिनिधित्व करता है जो 1 हर्ट्ज के करीब है और एक चरण मान है जो इसे 1 हर्ट्ज तक दे देता है। मुझे उम्मीद है कि मेरी व्याख्या कुछ स्पष्ट है। :) – Ran
धन्यवाद! अब यह स्पष्ट है :) – Tobold