文章目录
一、FFT函数
1.调用格式:
X=fft(x,N)
(1)当x长度大于N时,以x序列的长度做FFT
(2)当x长度小于N时,在x后补零至N长再做FFT
(3)当没有设置N时,以x序列的长度做FFT
二、IFFT函数
1.调用格式
x=ifft(X)
三、计算初始相位角与初始幅度
1.理论基础
当f0与FFT后频谱上的某根谱线相重合时,可求出对应的信号赋值和初始相角。但如果f0在两条谱线之间,就不能用这个方法来计算,这就是栅栏效应。
2.调用格式
(1)计算初始相位角
theta=abs(X(k))
其中X(k)为第k点的FFT值
(2)计算初始幅度
A=2*(abs(X(k)))/N
其中乘2是因为变换为单边谱,N为FFT点数,求出来的A为归一化幅度值。当频率在两条FFT谱线之间时,测量的幅度值有一定的误差。
3.范例
clear all; clc; close all;
fs=1000; % 采样频率
N=1000; % 信号长度
t=(0:N-1)/fs; % 设置时间序列
f1=50; f2=65.75; % 两信号频率
x=cos(2*pi*f1*t)+cos(2*pi*f2*t); % 设置信号
X=fft(x); % FFT
Y=abs(X)*2/1000; % 计算幅值
freq=fs*(0:N/2)/1000; % 设置频率刻度
[A1, k1]=max(Y(45:65)); % 寻求第1个信号的幅值
k1=k1+44; % 修正索引号
[A2, k2]=max(Y(60:70)); % 寻求第1个信号的幅值
k2=k2+59; % 修正索引号
Theta1=angle(X(k1));
Theta2=angle(X(k2));
% 显示频率、幅值和初始相角
fprintf('f1=%5.2f A1=%5.4f Theta1=%5.4f\n',freq(k1),A1,Theta1);
fprintf('f2=%5.2f A2=%5.4f Theta2=%5.4f\n',freq(k2),A2,Theta2);
% 作图
subplot 211; plot(freq,Y(1:N/2+1),'k'); xlim([0 150]);
xlabel('频率/Hz'); ylabel('幅值'); title('频谱图');
subplot 223; stem(freq,Y(1:N/2+1),'k'); xlim([40 60]);
xlabel('频率/Hz'); ylabel('幅值'); title('50Hz分量');
subplot 224; stem(freq,Y(1:N/2+1),'k'); xlim([55 75]);
xlabel('频率/Hz'); ylabel(