利用matlab提取出频域和时域信号的29个特征

简介: 利用matlab提取出频域和时域信号的29个特征

基于MATLAB的代码示例,用于提取时域和频域信号的29个特征。这些特征包括常见的时域统计特征和频域特征,适用于信号分析和机器学习分类问题。

MATLAB代码实现

1. 定义特征提取函数

function fea = genFeature(data, fs, featureNamesCell)
    % 时域信号特征提取
    % 输入:
    % data:待特征提取的时域信号
    % fs:采样频率,如果不提取频域特征,fs值可以设置为1
    % featureNamesCell:拟进行特征提取的特征名称,该变量为cell类型,其中包含的特征名称为字符串
    % 输出:
    % fea:数据data的特征值数组,其特征值顺序与featureNamesCell一一对应

    % 初始化特征数组
    fea = zeros(1, length(featureNamesCell));

    % 时域特征
    if any(strcmp(featureNamesCell, 'max'))
        fea(strcmp(featureNamesCell, 'max')) = max(data);
    end
    if any(strcmp(featureNamesCell, 'min'))
        fea(strcmp(featureNamesCell, 'min')) = min(data);
    end
    if any(strcmp(featureNamesCell, 'mean'))
        fea(strcmp(featureNamesCell, 'mean')) = mean(data);
    end
    if any(strcmp(featureNamesCell, 'peak'))
        fea(strcmp(featureNamesCell, 'peak')) = max(data) - min(data);
    end
    if any(strcmp(featureNamesCell, 'arv'))
        fea(strcmp(featureNamesCell, 'arv')) = mean(abs(data));
    end
    if any(strcmp(featureNamesCell, 'var'))
        fea(strcmp(featureNamesCell, 'var')) = var(data);
    end
    if any(strcmp(featureNamesCell, 'std'))
        fea(strcmp(featureNamesCell, 'std')) = std(data);
    end
    if any(strcmp(featureNamesCell, 'kurtosis'))
        fea(strcmp(featureNamesCell, 'kurtosis')) = kurtosis(data);
    end
    if any(strcmp(featureNamesCell, 'skewness'))
        fea(strcmp(featureNamesCell, 'skewness')) = skewness(data);
    end
    if any(strcmp(featureNamesCell, 'rms'))
        fea(strcmp(featureNamesCell, 'rms')) = sqrt(mean(data.^2));
    end
    if any(strcmp(featureNamesCell, 'waveformF'))
        fea(strcmp(featureNamesCell, 'waveformF')) = sqrt(mean(data.^2)) / mean(abs(data));
    end
    if any(strcmp(featureNamesCell, 'peakF'))
        fea(strcmp(featureNamesCell, 'peakF')) = max(abs(data)) / sqrt(mean(data.^2));
    end
    if any(strcmp(featureNamesCell, 'impulseF'))
        fea(strcmp(featureNamesCell, 'impulseF')) = max(abs(data)) / mean(abs(data));
    end
    if any(strcmp(featureNamesCell, 'clearanceF'))
        fea(strcmp(featureNamesCell, 'clearanceF')) = max(abs(data)) / sqrt(mean(sqrt(abs(data))));
    end

    % 频域特征
    if any(strcmp(featureNamesCell, 'FC'))
        [Pxx, f] = periodogram(data, [], [], fs);
        fea(strcmp(featureNamesCell, 'FC')) = sum(Pxx .* f) / sum(Pxx);
    end
    if any(strcmp(featureNamesCell, 'MSF'))
        [Pxx, f] = periodogram(data, [], [], fs);
        fea(strcmp(featureNamesCell, 'MSF')) = sum(Pxx .* (f.^2)) / sum(Pxx);
    end
    if any(strcmp(featureNamesCell, 'RMSF'))
        [Pxx, f] = periodogram(data, [], [], fs);
        fea(strcmp(featureNamesCell, 'RMSF')) = sqrt(sum(Pxx .* (f.^2)) / sum(Pxx));
    end
    if any(strcmp(featureNamesCell, 'VF'))
        [Pxx, f] = periodogram(data, [], [], fs);
        fea(strcmp(featureNamesCell, 'VF')) = sum(Pxx .* ((f - fea(strcmp(featureNamesCell, 'FC'))).^2)) / sum(Pxx);
    end
    if any(strcmp(featureNamesCell, 'RVF'))
        [Pxx, f] = periodogram(data, [], [], fs);
        fea(strcmp(featureNamesCell, 'RVF')) = sqrt(sum(Pxx .* ((f - fea(strcmp(featureNamesCell, 'FC'))).^2)) / sum(Pxx));
    end
end

2. 测试特征提取函数

% 生成测试信号
fs = 1000; % 采样频率
t = 0:1/fs:1-1/fs; % 时间向量
data = sin(2*pi*50*t) + 0.5*randn(size(t)); % 测试信号

% 定义要提取的特征名称
featureNamesCell = {'max', 'min', 'mean', 'peak', 'arv', 'var', 'std', ...
                    'kurtosis', 'skewness', 'rms', 'waveformF', 'peakF', ...
                    'impulseF', 'clearanceF', 'FC', 'MSF', 'RMSF', 'VF', 'RVF'};

% 调用特征提取函数
fea = genFeature(data, fs, featureNamesCell);

% 显示提取的特征
disp('Extracted Features:');
disp(fea);

说明

  • 该代码定义了一个函数genFeature,用于提取时域和频域信号的特征。用户可以通过修改featureNamesCell来选择需要提取的特征。
  • 时域特征包括最大值、最小值、均值、峰峰值、整流平均值、方差、标准差等。
  • 频域特征包括重心频率、均方频率、均方根频率、频率方差、频率标准差等。
  • 该代码适用于信号分析和机器学习分类问题,可以方便地扩展和修改以满足不同的需求
  • 参考代码 利用matlab提取出频域和时域信号的29个特征
相关文章
|
8月前
|
机器学习/深度学习 Dragonfly 人工智能
基于蜻蜓算法优化支持向量机(DA-SVM)的数据多特征分类预测研究(Matlab代码实现)
基于蜻蜓算法优化支持向量机(DA-SVM)的数据多特征分类预测研究(Matlab代码实现)
181 1
|
7月前
|
机器学习/深度学习 数据采集 算法
【信号识别】识别半监督粗糙模糊拉普拉斯特征图(Matlab代码实现)
【信号识别】识别半监督粗糙模糊拉普拉斯特征图(Matlab代码实现)
115 0
|
10月前
|
数据安全/隐私保护 索引
基于EEMD变换的ECG心电信号去噪和心率估计matlab仿真
本课题基于EEMD变换对ECG心电信号进行去噪处理,并通过MATLAB仿真实现心率估计。研究分析了不同噪声强度下心率估计的准确性,验证方法的可靠性。核心程序采用巴特沃斯滤波器对重构信号滤波,结合希尔伯特变换提取R波峰值以计算心率。系统原理利用EEMD分解有效分离信号与噪声,提升特征提取精度,为临床诊断提供技术支持。仿真结果表明,该方法在低信噪比条件下仍能保持较高的心率估计准确度。
|
7月前
|
安全 算法 自动驾驶
使用SSTL规范控制信号化交叉口研究(Matlab代码实现)
使用SSTL规范控制信号化交叉口研究(Matlab代码实现)
|
6月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
7月前
|
机器学习/深度学习 算法 语音技术
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
247 4
|
7月前
|
机器学习/深度学习 数据采集 边缘计算
相关向量机和特征选取技术在短期负荷预测中的应用(Matlab代码实现)
相关向量机和特征选取技术在短期负荷预测中的应用(Matlab代码实现)
152 4
|
7月前
|
算法 Python
【国防科大硕士论文】V调频信号脉冲压缩+V-FM ISAR成像研究(Matlab代码实现)
【国防科大硕士论文】V调频信号脉冲压缩+V-FM ISAR成像研究(Matlab代码实现)
140 1
|
8月前
|
编解码 资源调度 算法
【信号处理】时序数据中的稀疏辅助信号去噪和模式识别(Matlab代码实现)
【信号处理】时序数据中的稀疏辅助信号去噪和模式识别(Matlab代码实现)
161 1
|
7月前
|
数据格式
表面肌电信号(sEMG)完整处理流程 MATLAB
表面肌电信号(sEMG)完整处理流程 MATLAB

热门文章

最新文章

下一篇
开通oss服务