代码片记录-使用matlab对信号进行幅值求取

参考链接

1、基于MATLAB的FFT频谱内频率和幅度的校正算法
2、基于MATLAB的FFT频谱内频率和幅度的校正算法
3、Matlab 计算 FFT 的方法及幅值问题

程序记录

%% 开始
close all; %先关闭所有图片
clear all;
%% 采样数据初始化
Fs=125000000; %采样频率(Hz)
N=4096; %采样点数
t=[0:1/Fs:N/Fs]; %采样时刻,表示采了多少个数据点


%% adc数据获取
sin_wave=eye(1,4097);
sheetname='sheet1';
filename='LIA采集到的adc数据用于matlab仿真fft.csv';
% Data=readtable(filename,'Sheet',sheetname);
data=xlsread(filename,'LIA采集到的adc数据用于matlab仿真fft','F2:F4097');
sine_wave(2:4097)=data';
%% 显示原始信号
plot(t,sine_wave);
title('原始信号');
figure;
%% 加窗处理,可以当前效果不明显
% H=hann(4097);  %加窗
% H=kaiser(4097);
% fi=H'.*sine_wave;

%% fft计算
Y = fft(sine_wave,N); %做FFT变换,对N个采样点做傅里叶变换,还是复数的
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %显示原始的FFT模值结果
title('FFT 模值');
figure;

%% 幅值计算
Ayy=Ayy/(N/2); %换算成实际的幅度,除了直流分量外,其它的点都是和采样点数有关
Ayy(1)=Ayy(1)/2;%直流分量的再出一个2
F=([1:N]-1)*Fs/N; %换算成实际的频率值,换算成实际频率值, 每一个采样点对应一个频率值,总的采样点数对应的是采样频率

%% 结果显示
plot(F(1:N/2),Ayy(1:N/2)); %显示换算后的FFT模值结果
title('幅度-频率曲线图');


更多推荐