2016-04-14 33 views
0

私はfft()を計算し、周波数依存の感度であるM(f)で除算した時間変化信号(基本周波数と高調波数)を持っています。私はその後、信号を時間的に変化し得るが、ためにifft()を使用して時間領域に戻って変換したいifft()MATLAB:ifftを使用して元の信号を抽出する

p(t) = ifft(fft(v(t)./M(f)) 

ifft()は、私がここで何を考えてやっていないです。:すなわちを動作するようには思えないのですか?

% v(t) 

t=0:0.1:10; 
a=sin(t); 

subplot(1,5,1); plot(t,a); 
title('1. time domain'); 
xlabel('t [s]') 
ylabel('p.d. [v]') 
hold on; 

% fft(v(t)) 

T = t(2);      % Sampling period 
Fs=1/T; 
L = length(t);     % Length of signal 
Y = fft(a); 
P2 = abs(Y/L); 
P1 = P2(1:L/2+1); 
P1(2:end-1) = 2*P1(2:end-1); 
f = Fs*(0:(L/2))/L; 

subplot(1,5,2); plot(f,P1); 
title('2. frequency domain (fft(vt))') 
xlabel('f [Hz]') 
ylabel('magnitude') 

%frequency responce (sensitivity), M(f) 

resp=ones(1,length(f)); %1=1 

subplot(1,5,3); plot(f,resp); 
title('3. Simulated sensitivity (M(f))') 
xlabel('f [Hz]') 
ylabel('v/p') 

% fft(v(t))./M(f) 

fftResp=P1./resp; 

subplot(1,5,4); plot(f,fftResp); 
title('4. fft(v(t))./M(f)') 
xlabel('f [Hz]') 
ylabel('fft(v(t))/M(f)') 

%Inverse fft, p(t) = ifft(fft(v(t)./M(f))) 

pt = real(ifft(fftResp)); 

subplot(1,5,5); plot(pt); 
title('5. time domain (ifft)') 
xlabel('t [s]') 
ylabel('p.d. [p]') 

結果:M(F)でhttps://www.dropbox.com/s/18tqeyqey2pc5te/SOfigure.png?dl=0

=

****私はこれを理解しようとするには、次のコードを書かれている***

のフォローアップすべての周波数で1つ前の時間領域の信号(図1)と等しくなるように最終的な結果が期待されますが(図1)、それはありませんか? 2番目のFFT(図3)は最初のもの(図2)に相当します。

+0

V(t)は./ M(f)は - それは – GameOfThrows

+0

申し訳ありませんが、私はすでにそれをやっていた行う必要があります。他にも問題があります。私は時々変化する信号を期待していますが、これを入手してください:https://www.dropbox.com/s/18tqeyqey2pc5te/SOfigure.png?dl=0 – 2one

+0

問題を再現できない場合、あなたがしたことを知ることは本当に難しいです。あなたがそれをプロットしているのと同じですか? 'ifft(fft(vector))'はあなたに正しい解を与えるべきです – GameOfThrows

答えて

1

あなたのエラーがabsrealのご理解から茎、彼らは同じではありません。エラーがこの行にあります。ここ

P2 = abs(Y/L); 

は、Yは、複雑なfft結果であり、Lはスカラーである、あなたはrealの代わりabsを使用する必要があります。

P2 = real(Y/L); 

この結果:

+0

ああ。これは、較正する必要がある時間/振幅軸とは別に正しいように見える。また、私は片側振幅スペクトルをM(f)で除算する必要があります。 – 2one

+0

周波数ドメインから時間ドメインに変換するときには、常にいくつかのエラーが発生しますが、このエラーは非常に小さいはずです。この回答が役に立ったら、それを正しい答えとして受け入れてください。 – GameOfThrows

0

多分あなたは./演算子を使うべきです。それはベクトルの対応するすべての項目を分ける:

p(t) = ifft(fft(v(t)./M(f))) 

それは動作するはずです。 いつかifftは出力として小さな虚数部分を持つ複素信号を計算します。また、このお試しください:

p(t) = real(ifft(fft(v(t)./M(f)))) 
関連する問題