学习笔记(3)基于matlab的imu二维数据特征提取,目前实现了时域特征和频域特征的动态提取

function feature_tim = extract_timfeature(sample_data)
%时域特征提取
%版本:22/03/21   copyright:Mr吴
% 输入参数: 
%   sample_data:样本 (w,f)w取决于滑窗宽度,f取决于数据维数
% 输出参数:
%  feature_tim:时域特征
%%  三轴时域信息提取
max_data = max(sample_data);   %最大值
min_data = min(sample_data);   %最小值
% median_data = median(sample_data);    %中位数
mean_data = mean(sample_data);     %平均值
pk_data = max_data - min_data;     %峰差
avg_data = mean(abs(sample_data));     %整流平均值_绝对值的平均值
var_data = var(sample_data);      %方差
sd_data = std(sample_data);    %标准差
% ku_data = kurtosis(sample_data);      %峭度
% sk_data = skewness(sample_data);      %偏度
rm_data = rms(sample_data);       %均方根
 
feature_tim(1,:)=max_data;
feature_tim(2,:)=min_data;
feature_tim(3,:)=mean_data;

%% 可单轴输出或三轴特征再融合
%% X轴时域  可单轴输出或三轴特征再融合
% x_max = max_data(1);
% x_min = min_data(1);
% x_median = median_data(1);
% x_mean = mean_data(1);
% x_pk = pk_data(1);
% x_avg = avg_data(1);
% x_var = var_data(1);
% x_sd = sd_data(1);
% x_ku = ku_data(1);
% x_sk = sk_data(1);
% x_rm = rm_data(1);
% x_S = x_rm / x_avg;    %均方根因子
% x_C = x_pk / x_rm;     %峰值因子
% x_I = x_pk / x_avg;    %脉冲因子
% x_xr = mean(sqrt(abs(sample_data(1))))^2;
% x_L =  x_pk/ x_xr;     %裕度因子
function feature_fre = extract_frefeature(sample_data,fs)
%频域特征提取
%版本:22/03/21   copyright:Mr吴
% 输入参数: 
%   sample_data:样本 (w,f)w取决于滑窗宽度,f取决于数据维数
%   fs:数据点数,将用于fft,需要是2的n次方,(256、512、1024)
% 输出参数:
%   feature_fre:频域特征
%%  三轴数据FFT
fft_data= fft(sample_data,fs);  
N = length(fft_data);      %fft采样点数
fft_data=fft_data(1:128,:);
fft_amp = abs(fft_data);   %振幅(幅频特性)
% subplot(2,1,1);
% plot(fft_amp);
% % stem(fft_amp(1:128,:));
% title('频域波形');
% fft_phase = angle(fft_data);   %相频特性
% subplot(2,1,2);
% plot(fft_phase);
% title('相频特性图')
amp_max = max(fft_amp);     %振幅最大值
amp_min = min(fft_amp);     %振幅最小值
amp_median = median(fft_amp);   %振幅中位数
amp_mean = mean(fft_amp);       %振幅平均值
amp_pk = amp_max - amp_min;     %振幅峰差
amp_mph = amp_pk * 0.6;           %振幅峰值阈值,阈值为75%的振幅峰差
%[amp_pkfs,amp_pks] = findpeaks(fft_amp,'minpeakheight',amp_mph);%振峰捕获函数
%amp_pkfs = amp_pkfs / N * fs/2;
amp_pks=[;] ; %振幅峰值
amp_pkfs=[;]; %振幅峰值对应的频率

for j=1:3
    k=1;
    for i = 1:(N/2)
        if amp_mph < fft_amp(i,j)           
            amp_pks(k,j) = fft_amp(i);
            amp_pkfs(k,j)= i / N * fs / 2;
            k=k+1;
        end
    end
end

avg_fs = 1:128;
avg_fs =avg_fs';
avg_fft = 2 * fft_amp / N;

amp_fc=zeros(1,3);
amp_msf=zeros(1,3);
amp_rmsf=zeros(1,3);
amp_vf=zeros(1,3);
amp_rvf=zeros(1,3);
for i=1:3
    amp_fc(i) = sum(avg_fs .* avg_fft(:,i)) / sum(avg_fft(:,i) );    %重心频率
    amp_msf(i) = sum(avg_fs.^2 .* avg_fft(:,i)) / sum(avg_fft(:,i));    %均方频率
    amp_rmsf(i) = sqrt(amp_msf(i));   %均方根频率
    amp_vf(i) = sum((avg_fs - amp_fc(i)).^2 .* avg_fft(:,i)) / sum(avg_fft(:,i));  %频率方差
    amp_rvf(i) = sqrt(amp_vf(i));     %频率标准差
end
%% 查看变量
if 0
    amp_fc
    amp_msf
    amp_rmsf
    amp_vf
    amp_rvf
end
feature_fre(1,:)=amp_max;
feature_fre(2,:)=amp_mean;

可以根据自己的需要添加返回特征;

这两个函数的输入: 输入“学习笔记(2)”中滑窗采样的样本,维度:滑窗宽度×数据维数×1

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wql_njust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值