MATLAB中FFT的整理

作为一个资深的健忘症患者,需要把每次用都忘记的FFT问题进行整理。
FFT可将信号从时域转换到频域。
首先是一些简单常识:

采样周期:两次采样之间的时间间隔。
采样频率:1/采样周期。每秒采样的点数。(注意:采样频率的选择应为信号频率的两倍以上)

时域采样将会造成频域的周期化,即频域的周期为时域的采样频率fs。
因此在画fft后的频域图时要注意横坐标每一小格的频率为fs/(N-1)。其中N为采样点数(包括前后两个端点)。

【此处的N可以自行设置,其决定了频率采样的点数,fs/N为频率域的分辨率。作fft的代码为:fft(x,N)或fft(x)。若为后者没有输入N的值,系统默认为信号时域的采样点数。】

以一个含有10Hz和40Hz频率分量的信号为例:

clc
clear all
close all
tz = 0.01;%采样周期=0.01s
fs = 1/tz;%采样频率=100Hz
t1 = 0.5; %起始时间
t2= 5;%结束时间
tt = t2 - t1;%时间
N= tt/tz + 1;%采样的点数(算上前后两个端点)
t = t1:tz:t2;
y = sin(2*pi*10*t)+2*sin(2*pi*40*t);%含有频率为10Hz和40Hz分量的信号
y_f = fft(y);%作fft
%-------------画原始信号时域图--------------
subplot(3,1,1);%3行一列第一个图
plot(t,y); 
title('原始信号');
%-------------作fft后频域图----------------
fx = 0:fs/(N-1):fs;%横坐标频率
subplot(3,1,2);%3行一列第二个图
plot(fx,abs(y_f)); 
title('fft transform');
%-------------fftshift频域图---------------
subplot(3,1,3);%3行一列第三个图
plot(fx-fs/2,abs(fftshift(y_f)));
title('shift fft transform');

运行得到的结果为:

在这里插入图片描述
FFT的处理使得在60Hz和90Hz均出现了频率分量,使用fftshift可将0频率分量移到坐标中心,正确处理了坐标。

纵坐标:
若要获得真实的振幅值,则应对得到的abs(fft(x))乘以2除以N
即将代码plot(fx,abs(y_f)); 更改为plot(fx,2*abs(y_f)/N);
运行得结果:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值