Matlab實現FFT變換

下面的例子,先進行fourier transform,即雙邊譜

 程序代碼

fs=100;%設定採樣頻率
N=128;
n=0:N-1;
t=n/fs;
f0=10;%
設定正弦信號頻率
%
生成正弦信號
x=sin(2*pi*f0*t);
figure(1);
subplot(231);
plot(t,x);%
作正弦信號的時域波形
xlabel('t');
ylabel('y');
title('
正弦信號y=2*pi*10t時域波形');
grid;
%
進行FFT變換並做頻譜圖

y=fft(x,N);%
進行fft變換
mag=abs(y);%
求幅值
f=(0:length(y)-1)'*fs/length(y);%
進行對應的頻率轉換
figure(1);
subplot(232);
plot(f,mag);%
做頻譜圖
axis([0,100,0,80]);
xlabel('
頻率(Hz)');
ylabel('
幅值
');
title('
正弦信號y=2*pi*10t幅頻譜圖
N=128');
grid;
%
求均方根譜

sq=abs(y);
figure(1);
subplot(233);
plot(f,sq);
xlabel('
頻率(Hz)');
ylabel('
均方根譜
');
title('
正弦信號y=2*pi*10t均方根譜
');
grid;
%
求功率譜

power=sq.^2;
figure(1);
subplot(234);
plot(f,power);
xlabel('
頻率(Hz)');
ylabel('
功率譜
');
title('
正弦信號y=2*pi*10t功率譜
');
grid;
%
求對數譜

ln=log(sq);
figure(1);
subplot(235);
plot(f,ln);
xlabel('
頻率(Hz)');
ylabel('
對數譜
');
title('
正弦信號y=2*pi*10t對數譜
');
grid;
%
IFFT恢復原始信號

xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(1);
subplot(236);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('
通過IFFT轉換的正弦信號波形');
grid;

 

下面進行單邊譜計算:
 
程序代碼

fs=100;%設定採樣頻率
N=128;
n=0:N-1;
t=n/fs;
f0=10;%
設定正弦信號頻率
%
生成正弦信號
x=sin(2*pi*f0*t);
figure(1);
subplot(231);
plot(t,x);%
作正弦信號的時域波形
xlabel('t');
ylabel('y');
title('
正弦信號y=2*pi*10t時域波形');
grid;
%
進行FFT變換並做頻譜圖

y=fft(x,N);%
進行fft變換
mag=abs(y);%
求幅值
m=length(y);
f=(0:m/2-1)'*fs/m;%
進行對應的頻率轉換
figure(1);
subplot(232);
plot(f,mag(1:m/2));%
做頻譜圖
axis([0,100,0,80]);
xlabel('
頻率(Hz)');
ylabel('
幅值
');
title('
正弦信號y=2*pi*10t幅頻譜圖
N=128');
grid;
%
求均方根譜

sq=abs(y);
figure(1);
subplot(233);
plot(f,sq(1:m/2));
xlabel('
頻率(Hz)');
ylabel('
均方根譜
');
title('
正弦信號y=2*pi*10t均方根譜
');
grid;
%
求功率譜

power=sq.^2;
figure(1);
subplot(234);
plot(f,power(1:m/2));
xlabel('
頻率(Hz)');
ylabel('
功率譜
');
title('
正弦信號y=2*pi*10t功率譜
');
grid;
%
求對數譜

ln=log(sq);
figure(1);
subplot(235);
plot(f,ln(1:m/2));
xlabel('
頻率(Hz)');
ylabel('
對數譜
');
title('
正弦信號y=2*pi*10t對數譜
');
grid;
%
IFFT恢復原始信號

xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(1);
subplot(236);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('
通過IFFT轉換的正弦信號波形');
grid;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章