轉載(http://hi.baidu.com/zhaolinger_789/blog/category/%CA%FD%D7%D6%D0%C5%BA%C5%B4%A6%C0%ED)
假設一個信號,它含有2V的直流分量,頻率爲50Hz、相位爲-30度、幅度爲3V的交流信號,以及一個頻率爲75Hz、相位爲90度、幅度爲1.5V的交流信號。用數學表達式就是如下:S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180) 式中cos參數爲弧度,所以-30度和90度要分別換算成弧度。我們以256Hz的採樣率對這個信號進行採樣,總共採樣256點。MATLAB程序如下:
clc;
clear;
Adc=2; %直流分量幅度
A1=3; %頻率F1信號的幅度
A2=1.5; %頻率F2信號的幅度
F1=50; %信號1頻率(Hz)
F2=75; %信號2頻率(Hz)
Fs=256; %採樣頻率(Hz)
P1=-30; %信號1相位(度)
P2=90; %信號相位(度)
N=256; %採樣點數
t=[0:1/Fs:N/Fs]; %採樣時刻
%信號
S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180);
%顯示原始信號
subplot(411);plot(S);
title('原始信號');
Ayy=Ayy/(N/2); %換算成實際的幅度 Pyy=[1:N/2];
Y = fft(S,N); %做FFT變換
Ayy = (abs(Y)); %取模
subplot(412);stem(Ayy(1:N)); %顯示原始的FFT模值結果
title('FFT 模值');
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)*Fs/N; %換算成實際的頻率值,Fn=(n-1)*Fs/N
subplot(413);stem(F(1:N/2),Ayy(1:N/2)); %顯示換算後的FFT模值結果
title('幅度-頻率曲線圖');
for i=1:N/2
Pyy(i)=angle(Y(i)); %計算相位
Pyy(i)=Pyy(i)*180/pi; %換算爲角度
end;
subplot(414);stem(F(1:N/2),Pyy(1:N/2)); %顯示相位圖
title('相位-頻率曲線圖');
FFT結果:
Y(1)=512
Y(51)=3.3255e+002 -1.9200e+002i
Y(76)=3.4350e-012 +1.9200e+002i
FFT幅值結果:
abs(Y(1))=512
abs(Y(51))=384
abs(Y(76))=192
FFT相位結果:
angle(Y(1))=0
angle(Y(51))=-0.5236 rad=-30.000°
angle(Y(76))=1.5708 rad= 90.000°
另外:atan2(b,a)是求座標爲(a,b)點的角度值,範圍從-pi到pi。例如:
atan2(0,512)=0
atan2(-1.9200e+002,3.3255e+002 )=-0.5236 rad=-30.000°
求具體信號的幅值:
Adc= abs(Y(1))/N=512/256=2 %直流分量是僅除以N
A1= abs(Y(51))/N*2=384/256*2=3 %交流分量是除以N後還要乘以2
A2= abs(Y(76))/N*2=192/256*2=1.5