2012-12-26 251 views
1

我已經創建了一個3個三個不同的頻率信號,並濾除了我不想要的信號。但是當我在matlab中使用ifft時,它會顯示一個錯誤的圖形。如何將我的頻域頻譜轉換回我的3秒時域圖?下面我的代碼如下:如何將頻域轉換爲時域

clc 
clear all 
Fs = 8192; 
T = 1/Fs;            
%create tones with different frequency 
t=0:T:1; 
t2=1:T:2; 
t3=2:T:3; 

y1 = sin(2*pi*220*t); 
y2 = sin(2*pi*300*t2); 
y3 = sin(2*pi*440*t3);       

at=y1+y2+y3; 


figure; 
plot(t,y1,t2,y2,t3,y3),title('Tones with noise'); 

[b,a]=butter(2,[2*290/Fs,2*350/Fs],'stop'); 
e=filter(b,a,at); 
et=(ifft(abs(e))); 
figure, 
plot(et) 
+0

你消滅的相位信息,當你做'ABS(FFS(..' – bla

+0

嗯...我做沒有得到你的意思 – Ambbie

+0

我看到你編輯的問題,並把它拿出來... – bla

回答

1

因爲它是現在,et是在頻域,因爲FFT的。你不需要fft。只需plot(e),您將得到時域濾波波形。你可以檢查頻率過濾器的性能。通過FFT域雖然只是

plot(abs(fftshift(fft(fftshift(e))))); 
xlim([4000 5000]) 

編輯:

,因爲它是對這個問題發表了自己的代碼有如下錯誤:at中有(或8192元)的信息正好1秒。如果你plot(at)你會看到頻率的總和好,但它們都在同一時間happen。這是如何解決它:

clear all 
Fs = 8192; % or multiply by 3 if needed 
T = 1/Fs;            
%create tones with different frequency 
t=0:T:3; 

y1 = sin(2*pi*220*t).*(t<1); 
y2 = sin(2*pi*300*t).*(t<2 & t>=1); 
y3 = sin(2*pi*440*t).*(t>=2);       

at=y1+y2+y3; 

[b,a]=butter(2,[2*290/Fs,2*350/Fs],'stop'); 
e=filter(b,a,at); 
figure, 
plot(t,e) 

enter image description here

dt=t(2)-t(1); 
N=length(at); 
df=1/(N*dt);  % the frequency resolution (df=1/max_T) 
if mod(N,2)==0 
    f_vector= df*((1:N)-1-N/2);  % frequency vector for EVEN length vectors: f =[-f_max,-f_max+df,...,0,...,f_max-df] 
else 
    f_vector= df*((1:N)-0.5-N/2); % frequency vector for ODD length vectors f =[-f_max,-f_max+fw,...,0,...,f_max] 
end 
freq_vec=f_vector; 
fft_vec=fftshift(fft(e)); 

plot(freq_vec,abs(fft_vec)) 
xlim([0 1000]) 

enter image description here

+0

,但如何ifft回到時間從0秒到3秒,因爲我以前創建我的問題是過濾300Hz..so ..我想顯示我的信號沒有300Hz的時間域..你知道如何做到這一點? – Ambbie

+0

如果我想完全過濾我的300 HZ?可能嗎? – Ambbie

+0

當然可以,但我是否回答你的問題? – bla