matlab里的fft应用以及常用信号处理问题
matlab里的fft应用以及常用信号处理问题
1。什么是fft
FFT(Fast Fourier Transformation)就是快速傅里叶变换的意思。输入的是离散数据,输出的也是离散频率。
在matlab中具体常用的使用方法为X=fft(x)或X=fft(x,Ns)。
其中X输出是一组复数,abs值代表复数的幅值,angle值代表复数的相位,这一点以后会用到。
2。频率-幅值曲线图
用一个简单的函数去做频率-幅值曲线图,采用1hz和10hz的信号,加上一点噪声,构成输入信号。
t=1:0.01:10;
x=2*sin(2*pi*t)+1*sin(10*2*pi*t)+0.8*(rand(1,length(t))-0.5)+1;
figure(1)
plot(t,x)
Ns=length(t);%信号分析长度
fs=1/(t(2)-t(1));%信号采样频率
[freq,X_real,X_angle]=myfft(x,Ns,fs);%计算频率-幅值参数
figure(2)
plot(freq,X_real);%绘制频率-幅值曲线
function [freq,X_real,X_angle]=myfft(x,Ns,fs)
x=detrend(x);%消除曲线趋势(0次趋势和1次趋势)
X=fft(x,Ns);%fft
%计算频率索引号
n2=1:Ns/2+1;%加不加一无所谓,Ns为偶数
%计算真实幅值
X_real=abs(X(n2))*2/Ns;%除以N还是NS?(有效长度,小于等于N)
%计算分量相位
X_angle=angle(X(n2));
%设置频域刻度
freq = (0:Ns/2)*fs/Ns;
end
输入时间-幅值图
输出频率-幅值图
其中有几个参数必须要说明&#x