基于MATLAB的FFT分析

1、目的:熟悉MATLAB的FFT函数

2、基于MATLAB的FFT函数需要了解的知识点

  • 频谱关于中间位置对称,只需要观察  0:1:N/2(这N/2+1个点)(时域采集N个点,频域只需要观察N/2+1个点)
  • MATLAB中FFT的频谱,应该看幅值
  • X轴频率点的设置:采样频率为Fs,频谱图显示的最高频率为Fs/2(采样定理):X轴频率点:(0:1:N/2)*Fs/N
  • 复数幅值修正

3、需要说明的两个问题

  • 画出的频谱图的频率分辨率为Fs/N
  • 采样频率Fs大于信号最大频率的的2倍

4、自己的心得

  • 由于采样定理可知,当不满足采样定理的时候将出现混叠现象,所以FFT处理时默认Fs/2为最高信号频率
  • 假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。

5、待解决的问题

  • 从数学层面理解FFT变换后的幅值的大小问题(心得第二点)

6、MATLAB代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------------------------------------------------------------------------------%
%************************************** FFT *****************************************%
%------------------------------------------------------------------------------------%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   Date:XXXX.X.XXX
%   Author:flypassion
%   Version:1.0
clear all
close all
clc
%% Parameter Interface
SampleFre = 1000;            %采样频率
SignalLen = 20000;           %数据长度
%% Main
%--------------------------------------------------------------------------------------
t = (0:SignalLen-1)/SampleFre;                      %时间
SignalData = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);  %采样频率>2倍信号最大频率
NoiseData = 2*randn(size(t));
SignalAddNoiseData = SignalData + NoiseData;
plot(1000*t(1:50),SignalAddNoiseData(1:50))
title('信号添加随机噪声')
xlabel('t(毫秒)')
%--------------------------------------------------------------------------------------
FFTData = fft(SignalAddNoiseData);
FFTAmplitude0 = abs(FFTData)/SignalLen;                 %频谱关于SignalLen/2对称
FFTAmplitude1 = FFTAmplitude0(1:SignalLen/2); 
FFTAmplitude0(2:end) = 2*FFTAmplitude0(2:end);          %复数域的幅值需要进行变换才能与时域的幅值对应
FFTAmplitude1(2:end) = 2*FFTAmplitude1(2:end);
Frequence0 = SampleFre*(0:(SignalLen-1))/SignalLen;
Frequence1 = SampleFre*((0:(SignalLen/2)-1))/SignalLen;
subplot(2,1,1)
plot(Frequence0,FFTAmplitude0)
title('双边频谱')
xlabel('f(Hz)')
ylabel('FFTAmplitude')
subplot(2,1,2)
plot(Frequence1,FFTAmplitude1)
title('单边频谱')
xlabel('f(Hz)')
ylabel('FFTAmplitude')
实验图片

7、参考链接

  • 45
    点赞
  • 342
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值