MATLAB中快速傅里叶变换fft的应用

目录

  • 傅里叶变换
  • 理解
  • fft应用

傅里叶变换

傅里叶变换是一种线性的积分变换, 它提供了一种可以将信号从时间幅值坐标变换到频率幅值坐标的方法,其具体的定义如下:

在这里插入图片描述
上式即为傅里叶变换的表达式。

理解

傅里叶变换将信号分解为若干个简谐信号叠加的形式,通过傅里叶变换画出频谱图之后就可以找到信号中包含的频率成分。

MATLAB中快速傅里叶变换fft的应用_第1张图片

fft应用

MATLAB中自带的fft()函数可以帮助我们完成傅里叶变换的计算过程,不过直接调用fft(),画图之后发现横纵坐标的值和我们想的不一样,我们对下面这样的一个信号做fft

Fs=1000; %采样率
N = 1; % 周期数
t=N; % 信号时长 s 
n=0:1/Fs:t-1/Fs; % 采样时间点,刚好采N 个周期
len = length(n); % 信号点数
y = sin(2*pi*20*n)+1.5*sin(2*pi*33*n)+0.6*sin(2*pi*50*n); % 采集到的离散信号
plot(n,y)
title('信号y')

画出上面表达式y的图像
MATLAB中快速傅里叶变换fft的应用_第2张图片

直接调用fft画出图是这样的

Y = fft(y);
Y = abs(Y);
plot(Y(1:len/2));
title('直接调用fft')

MATLAB中快速傅里叶变换fft的应用_第3张图片

从y的表达式可以看出,信号的包含3个频率成分,20Hz、33Hz、50Hz,其对应的幅值为1、1.5、0.6,但是从上面的图我们看不出这些信息,因此需要对变换之后的信号做一定的处理。

调用下面的程序

myfft(y,Fs);

function [f,Y] = myfft(data,Fs,is_plot)
if nargin < 3
    is_plot = true;
end
x=data;
N = length(x);
df=Fs/(N-1);%分辨率
f=(0:N-1)*df;%其中每点的频率
Y=fft(x(1:N))/N*2;%真实的幅值
if is_plot
    g = figure;
    figure(g);
    plot(f(1:N/2),abs(Y(1:N/2)));
    axis normal;
    title('fft频谱','Fontname','宋体');
    xlabel('频率(Hz)','Fontname','宋体'); 
    ylabel('幅值(m/s^2)','Fontname','宋体'); 
end
end

得到的图片如下,从这张图中我们就可以看出原始信号的频率和每个频率对应的幅值。
MATLAB中快速傅里叶变换fft的应用_第4张图片

你可能感兴趣的:(MATLAB,matlab,信号处理)