MATLAB之傅里叶变换,快速傅里叶变换FFT

傅里叶变换及傅里叶逆变换定义

能从时域的非周期连续信号转化到频域非周期连续信号。
在这里插入图片描述

窗函数/矩形脉冲信号的傅里叶变换

在这里插入图片描述
在这里插入图片描述
结论:

  1. 随着脉冲宽度τ的减小,主叶变得更宽,而且更多的能量被移到更高的频率。则反之。
  2. 当信号脉冲在时间上扩展时,它的变换在频率上压缩。则反之。

基于MATLAB的快速傅里叶变换FFT

通过蝶形算法衍生的FFT暂不推导,下面直接给出代码。


% 功能:简易的快速傅里叶变换FFT

% 编辑者:lily
% 日期:2019,4,14

clear;
clc;
close all;
% ======================= input signal ==========================
f1 = 30;
f2 = 80;
fai1 = pi/3;
fai2 = pi/4;
dFs = 2^9;
T =1;      % T = (N -1) * 1/dFs. 
t = 0:1/dFs:T;
N = length(t);
% x=3*cos(2*pi*f1*t+fai1)+2*sin(2*pi*f2*t+fai2)+5*randn(1,N);
% x=3*cos(2*pi*f1*t+fai1);
x = sin(2*pi*f1*t);
% ======================= fft ==================================
deltaF = 1/T;   %  deltaF = dFs/(N-1);%如果是表格或mat文件,推荐用这一种
vecf = (0:N-1)*deltaF;
% f = vecf
f = linspace(0,dFs,N); % linspace(x1,x2,n) % 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。

tic;
xk = fft(x)/N;%/length(x)表示归一化
toc;
% =========================== figure ====================================
figure;
subplot(3,1,1);plot(t,x);title('信号')
subplot(3,1,2);plot(vecf,2*abs(xk));title('快速傅里叶变换')
subplot(3,1,2);plot(f,2*abs(xk));title('快速傅里叶变换')%两种取频率方法都可以
subplot(3,1,3);plot(vecf,angle(xk));title('相位图')


猜你喜欢

转载自blog.csdn.net/Heart_Sea/article/details/89302759