Dynoware力信号导出到matlab处理(时域复现+频域分析)

测力仪软件Dynoware里面可以对力信号进行零漂补偿、求平均值、滤波等操作,但想要查看信号的频域,进行频域分析,还得将数据导出到matlab中处理。
首先,选择Dynoware中的Export Data按钮,将力信号数据输出为txt文档data.txt,其中输出的时间段可自选,输出的数据量N=采样频率×时间’。
然后,将data.txt放入matlab文件夹,在matlab中使用导入数据功能,选择data.txt文件,由于该数据文件中会导出一些无用信息,故框选正确的数据量以数值矩阵的格式进行导入。
Dynoware力信号导出到matlab处理(时域复现+频域分析)_第1张图片
导入成功后会在matlab变量框中出现一个未命名的变量,大小为N×1,将其重命名为data,并保存为mat格式。
然后就可以用load函数(load (‘data.mat’))加载该data变量到m文件中啦。

快速傅里叶变换FFT

FFT (Fast Fourier Transform)是离散傅立叶变换的快速算法,可以将一个信号从时域变换到频域。
调用格式:y = fft(x,N);
式中,N为采样点数,x是序列(离散的频域信号),y是序列的快速傅里叶变换。x可以是一向量或矩阵,若x为向量,则y是x的FFT,并且与x具有相同的长度。若x为一矩阵,则y是对矩阵的每一列向量进行FFT。
FFT的几点说明:

  1. 函数fft返回值的数据结构具有对称性
    根据采样定理,fft能分辨的最高频率为采样频率的一半(即Nyquist频率),函数fft返回值是以Nyqusit频率为轴对称的,Y的前一半与后一半是复数共轭关系。

  2. 幅值
    FFT得到的第一点频率为0,即为直流分量,其幅值为实际直流分量的N倍,可以理解为是对所有点幅值的求和。因此,只要将0频的值除以N就可以得到数据的平均值。而X后面的为复数,其幅值为实际的N/2倍。
    作FFT分析时,幅值大小与输入点数有关,要得到真实的幅值大小,只要将变换后的结果乘以2除以N即可(但此时零频,即直流分量的幅值为实际值的2倍)。对此的解释是:Y除以N得到双边谱,再乘以2得到单边谱(零频在双边谱中本没有被一分为二,而转化为单边谱过程中所有幅值均乘以2,所以零频被放大了)。

  3. 基频
    ​若分析数据时长为T,则分析结果的基频就是f0=1/T,分析结果的频率序列为[0:N-1]*f0

  4. 执行N点FFT
    在调用格式2中,函数执行N点FFT。若y为向量且长度小于N,则函数将y补零至长度N,若向量y的长度大于N,则函数截断y使之长度为N。

注意:
使用N点FFT时,若N大于向量y的长度,将给频谱分析结果带来变化,应该特别注意,即补零要谨慎。

clear all %清空变量
% 构建原信号
L=2000*30+1;% 信号长度
Fs=2000;%采样频率
dt=1/Fs; % 采样间隔
load ('s1_2.mat');%导入数据
t=[0:1/2000:30]';%时间序列
subplot(2,1,1);
plot (t,s1_2),xlabel('时间/s'),title('原始信号')% 绘出原始信号
% FFT分析
N=L;%采样点数
xk=fft(s1_2,N)/N;% 为共轭复数,具有对称性
f0=1/(dt*N);  % 基频,可以分辨的最小频率(间隔),这是由采样时间决定的,即采样时间的倒数
f=[0:ceil((N-1)/2)]*f0;   % 频率序列
A=abs(xk);  % 幅值序列
subplot(2,1,2);
stem(f,2*A(1:ceil((N-1)/2)+1)),xlabel('频率/Hz'),title('FFT频谱')  % 绘制频谱

你可能感兴趣的:(其他)