利用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
AI 代码解读

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);
AI 代码解读

说明

  • 该代码定义了一个函数genFeature,用于提取时域和频域信号的特征。用户可以通过修改featureNamesCell来选择需要提取的特征。
  • 时域特征包括最大值、最小值、均值、峰峰值、整流平均值、方差、标准差等。
  • 频域特征包括重心频率、均方频率、均方根频率、频率方差、频率标准差等。
  • 该代码适用于信号分析和机器学习分类问题,可以方便地扩展和修改以满足不同的需求
  • 参考代码 利用matlab提取出频域和时域信号的29个特征
目录
打赏
0
14
14
0
78
分享
相关文章
MATLAB 实现轴承转轴信号仿真
轴承转轴信号仿真是一种重要的研究手段,用于分析轴承的健康状态、检测故障以及开发故障诊断算法。通过构建仿真信息并添加故障信号,可以生成用于轴承信号分析的测试数据。
地震波小波变换,matlab小波变换,时频域分析
地震波小波变换,matlab小波变换,时频域分析
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
152 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
BOC调制信号matlab性能仿真分析,对比功率谱,自相关性以及抗干扰性
本内容介绍了一种基于BOC(Binary Offset Carrier)调制的算法,使用Matlab2022a实现。完整程序运行效果无水印,核心代码配有详细中文注释及操作步骤视频。理论部分阐述了BOC调制在卫星导航中的应用优势:相比BPSK调制,BOC信号功率谱主瓣更窄、自相关函数主峰更尖锐,可优化旁瓣特性以减少干扰,提高频谱利用率和同步精度,适合复杂信道环境下的信号接收与处理。
基于FPGA的信号DM编解码实现,包含testbench和matlab对比仿真
本项目展示了DM编解码算法的实现与测试结果。FPGA测试结果显示为T1,Matlab仿真结果为T2。使用软件版本为Matlab 2022a和Vivado 2019.2。核心程序包含详细中文注释和操作视频。DM编解码通过比较信号样本差值进行编码,适用于音频等低频信号处理。硬件结构包括编码器(采样器、减法器、比较器)和解码器(解码器、积分器)。
一维信号的小波变换与重构算法matlab仿真
本程序使用MATLAB2022A实现一维信号的小波变换与重构,对正弦测试信号进行小波分解和重构,并计算重构信号与原信号的误差。核心步骤包括:绘制分解系数图像、上抽取与滤波重构、对比原始与重构信号及误差分析。小波变换通过多分辨率分析捕捉信号的局部特征,适用于非平稳信号处理,在信号去噪、压缩等领域有广泛应用。
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
本项目基于梯度流的扩散映射卡尔曼滤波算法(GFDMKF),用于信号预处理的MATLAB仿真。通过设置不同噪声大小,测试滤波效果。核心代码实现数据加载、含噪信号生成、扩散映射构建及DMK滤波器应用,并展示含噪与无噪信号及滤波结果的对比图。GFDMKF结合非线性流形学习与经典卡尔曼滤波,提高对非线性高维信号的滤波和跟踪性能。 **主要步骤:** 1. 加载数据并生成含噪测量值。 2. 使用扩散映射捕捉低维流形结构。 3. 应用DMK滤波器进行状态估计。 4. 绘制不同SNR下的轨迹示例。
基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
本程序基于Lipschitz李式指数进行随机信号特征识别和故障检测。使用MATLAB2013B版本运行,核心功能包括计算Lipschitz指数、绘制指数曲线、检测故障信号并标记异常区域。Lipschitz指数能够反映信号的局部动态行为,适用于机械振动分析等领域的故障诊断。
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问