matlab时域频域信号特征提取资料整合

2023-11-05

1 前言

最近在做一个项目,需要将声纳信号中的特征都提取出来进行分析。资料查到头秃终于整合出来了些东西,记录一下。

由于不是专业人员,如果发现任何错误请不要大意的附在评论区,我会及时修改,谢谢!

2 思路

思路这段引用自知乎大佬aresmiki的回答,我觉得OK。

1、首先,在特征提取之前需楼主明确是怎样的信号,怎样的应用,怎样的场景,因为针对不同应用和场景选择的特征提取也不近相同。

2、信号特征的提取往往都是用最简单有效的参数表示信号中的信息,这是根本目的。

3、针对不同后端模型需要确定特征维度。

4、开始特征提取前,信号往往需要做一些预处理,如滤波、去均值、去异常等等。

特征提取有哪些方法:

1、拿到时间域一维信号,简单统计和运算可以得到的特征有:均值,方差,均方根,峰值因子,峭度系数,波形因子,裕度因子、脉冲因子

2、估计--分布参数一般服从某一类分布;

3、频域,特征频率,均方频率,重心频率,频率方差

4、小波方法提取的系数,小波滤波后的特征频率等等;

5、信号,谱熵,排列熵,小波熵,EMD熵,包络谱熵等;

6、谱峭度,快速谱峭度、小波谱峭度等;

7、基于数学工具和降维的特征,如PCA,矩阵特征向量,矩阵的秩,特征根,SVD-奇异值、ICA等等;

8、一些基于距离的度量、范数、马氏距离、分形参数,同胚流行等等;

9、任何能表征信号特征的自定义参数均可以,注意有意义有时是结合实际需求的。

3 预处理

matlab的波形预处理还是很人性化的,具体说来“Signal Analyzer”工具箱好像就够用了,至于其他的工具箱大家也可以看看。

这个工具箱在matlab顶上点选【APP】之后能找到,它的教程在官网上也很清楚了,传送门附上:点我传送

这个网站里关于“Signal Analyzer”工具箱的使用教程在【使用Signal Analyzer App】超链接下。其他超链接里的内容也可以逛逛,说不定对你有些启发。

下面的代码可以参考:

%%  初始化
clear
clc

%%  读取文件
[sonar,fs] = audioread('test.wav');    %采样频率

%%  滤波处理
sonar = sonar - mean(sonar);    %去直流分量
sonar = lowpass(sonar,0.5,'Steepness',0.85,'StopbandAttenuation',60);       %低通滤波
sonar = highpass(sonar,0.5,'Steepness',0.85,'StopbandAttenuation',60);      %高通滤波

4 时域特征提取

%%  数据特征提取
[nframes,nchannels] = size(sonar);  %采样点数与声道数
time = nframes / fs;   %采样时间 = 采样总点数 / 每秒采样点数

%%  双声道时域信息提取
max_data = max(sonar);   %最大值
min_data = min(sonar);   %最小值
median_data = median(sonar);    %中位数
mean_data = mean(sonar);     %平均值
pk_data = max_data - min_data;     %峰差
avg_data = mean(abs(sonar));     %整流平均值_绝对值的平均值
var_data = var(sonar);      %方差
sd_data = std(sonar);    %标准差
ku_data = kurtosis(sonar);      %峭度
sk_data = skewness(sonar);      %偏度
rm_data = rms(sonar);       %均方根

%%  左声道时域
l_max = max_data(1);
l_min = min_data(1);
l_median = median_data(1);
l_mean = mean_data(1);
l_pk = pk_data(1);
l_avg = avg_data(1);
l_var = var_data(1);
l_sd = sd_data(1);
l_ku = ku_data(1);
l_sk = sk_data(1);
l_rm = rm_data(1);
l_S = l_rm / l_avg;    %均方根因子
l_C = l_pk / l_rm;     %峰值因子
l_I = l_pk / l_avg;    %脉冲因子
l_xr = mean(sqrt(abs(sonar(1))))^2;
l_L =  l_pk/ l_xr;     %裕度因子

%%  右声道频域
r_max = max_data(2);
r_min = min_data(2);
r_median = median_data(2);
r_mean = mean_data(2);
r_pk = pk_data(2);
r_avg = avg_data(2);
r_var = var_data(2);
r_sd = sd_data(2);
r_ku = ku_data(2);
r_sk = sk_data(2);
r_rm = rm_data(2);
r_S = r_rm / r_avg;    %均方根因子
r_C = r_pk / r_rm;     %峰值因子
r_I = r_pk / r_avg;    %脉冲因子
r_xr = mean(sqrt(abs(sonar(2))))^2;
r_L =  r_pk/ r_xr;     %裕度因子

5 频域特征提取

这块写的我也没啥自信了,毕竟是根据网上东拼西凑的资料写出来的。

%%  双声道频域信息提取
[fft_sonar,f_range] = positiveFFT(sonar,fs);  
N = length(fft_sonar);      %fft采样点数
subplot(5,2,5);
fft_amp = abs(fft_sonar);   %振幅(幅频特性)
stem(f_range,fft_amp);  %x-正频率;y-振幅
title('频域声纳波形');
fft_phase = angle(fft_sonar);   %相频特性
subplot(5,2,6);
plot(f_range,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.75;           %振幅峰值阈值,阈值为75%的振幅峰差
%[amp_pkfs,amp_pks] = findpeaks(fft_amp,'minpeakheight',amp_mph);
%amp_pkfs = amp_pkfs / N * fs/2;
amp_pks = [];   %振幅峰值
amp_pkfs = [];  %振幅峰值对应的频率
for i = 1:N
    if amp_mph < fft_amp(i)
        amp_pks = [amp_pks,fft_amp(i)];
        amp_pkfs = [amp_pkfs,i / N * fs / 2];
    end
end

avg_fs = fs*[1:N] / N;
avg_fft = 2 * fft_amp / N;

amp_fc = sum(avg_fs .* avg_fft) / sum(avg_fft);     %重心频率
amp_msf = sum(avg_fs.^2 .* avg_fft) / sum(avg_fft);    %均方频率
amp_rmsf = sqrt(amp_msf);   %均方根频率
amp_vf = sum((avg_fs - amp_fc).^2 .* avg_fft) / sum(avg_fft);  %频率方差
amp_rvf = sqrt(amp_vf);     %频率标准差

6 功率谱

%%  双声道功率谱信息提取
power = abs(fft_sonar).^2 / N;      %功率 = 傅里叶变换^2 / 区间长度,fft的幂
subplot(5,2,7);
plot(f_range,power);
title('功率谱');
power_y = 10*log10(power);      %放大低频
power_y(1) = mean(power_y);     %去除直流影响
subplot(5,2,8);
plot(f_range,power_y);
title('放大低频的功率谱');

power_max = max(power);     %功率最大值
power_min = min(power);     %功率最小值
power_median = median(power);       %功率中位数
power_mean = mean(power);           %功率平均值
power_snr = 10*log10(power_max / (sum(power) - power_max));     %信噪比
power_obw = obw(sonar,fs);      %占用带宽

7 倒谱

%%  双声道倒频谱信息提取
cepstrum = real(ifft(log(abs(fft(sonar(:,1))))));
during_time = 1/fs:1/fs:time;
subplot(5,2,9);
plot(during_time,cepstrum,'color',[29/255 176/255 184/255]);ylim([0 0.01]);
title('左声道倒频谱');
cepstrum = real(ifft(log(abs(fft(sonar(:,2))))));
during_time = 1/fs:1/fs:time;
subplot(5,2,10);
plot(during_time,cepstrum,'color',[86/255 163/255 108/255]);ylim([0 0.01]);
title('右声道倒频谱');

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab时域频域信号特征提取资料整合 的相关文章

  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以
  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • 将向量(或弧)绘制到玫瑰图上。 MATLAB

    我有两个数据集 其中详细列出了angles 我正在绘制玫瑰图 angles 0 8481065519 0 0367932161 2 6273740453 n 另一个 从这组角度详细说明方向统计 angle error 0 848106563
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000

随机推荐

  • vue3+ts 使用qrcode(解决了找不到qrcode类型声明文件问题)

    1 安装 全局安装 npm install g qrcode 安装类型声明 npm i save dev types qrcode 2 在所需处引用 import QRcode from qrcode 3 配合canvas 生成二维码
  • datax 数据写入oracle报错缺失表达式_实战再次升级:流批一体处理百亿级别数据...

    需求背景 该篇内容基于之前写过的一篇 lt gt 上一篇文章其实主要重点是结合logstash的实际应用 近期业务方提出了新的需求 增加了些业务逻辑 同时数据量也成倍增加 要求每日产出指标结果 这里再回顾下上篇的数据情况和技术方案同时对比下
  • word 文档标题样式相同、行距效果不同的解决办法

    先看下图示例 两个标题均采用了标题1的样式 段前 段后0 5行 单倍行距 但展现出的效果有很大差异 修改办法 将鼠标放置在需要修改的标题页 菜单栏点击 布局 gt 点击 页面设置 右下角扩展按钮 gt 点击 文档网络 调整成和第二章一样的行
  • ruoyi 修改主题颜色

    ruoyi 修改主题颜色 找到样式文件 src main resources static css skins css 1 修改顶部右侧导航栏背景颜色 skin yellow navbar background color 4EA3E4 2
  • 通用语言大模型都是人、机、环境系统智能

    通用语言大模型可以被看作是人 机 环境系统智能发展的早期阶段之一 这些模型使用深度学习和自然语言处理等技术 通过对大量数据的学习和训练 能够生成具有语义理解和生成能力的文本回答 在这个系统中 人类作为用户与AI模型进行交互 提供问题或指令
  • Linux异常(中断)处理体系结构

    前言 可以调到总结处先看明白这篇文章要说明的内容 再回到开头看 1 异常 异常 就是可以打断CPU正常运行流程的一些事情 比如 外部中断 未定义的指令 企图修改只读的数据 执行SWI指令 Software Interrupt Instruc
  • 【Unity】鼠标划入划出检测

    Unity 鼠标划入划出检测 在Unity2D中检测鼠标划入划出有专门的内置函数 在使用时要应用相关函数库 继承相关类才行 相关脚本如下 using System Collections using System Collections G
  • bootstrap的portlet组件框框的应用 (点击可伸缩)

    上面用是bootstrap做成的一个经典网站一部分 看右半部分 先分析布局 是这样的 一个大的div 分上下两部分 以一条灰色线区隔开来 上面是说明性文字 和右侧的特殊按钮 如伸缩 刷新 和移除按钮等 下面则是真正的内容部分 把网站的htm
  • pycharm界面怎么自动换行

    pycharm界面怎么自动换行 第一步我们单击桌面上的pycharm图标 第二步找到文件下的设置属性 单击按下就成功开启编辑窗口使用自动换行 还有一个在代码显示界面旁边点击右键 代码框就实现了代码自动换行的
  • 小程序WXML语法

    一 WXML模块语法 数据绑定 1 数据绑定的基本原则 1 在data中定义数据 2 在WXML中使用数据 2 在data中定义页面的数据 在页面对应的 js文件中 把数据定义到data对象中即可 Page data 字符串类型的数据 in
  • Android The number of method references in a .dex file cannot exceed 64K.

    编译项目时报错 The number of method references in a dex file cannot exceed 64K 查阅得知 在Android系统中 一个App的所有代码都在一个Dex文件里面 Dex是一个类似J
  • 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键

    如何成为嵌入式软件工程师 In this one on one episode of the Versioning Show David and Tim look at what it means to be a productive so
  • 微众银行区块链2021年度回顾

    2021年 数字经济不断深化 并有望担当起更为重要的历史使命 同时 十四五 规划纲要明确区块链作为七大数字经济重点产业之一 为数字产业化提供有力技术支撑 助推数字经济转型升级 这一年 微众银行继续坚守联盟链技术路线 以安全可控的开源技术推动
  • odoo(搭建部署资源、教程)

    本地部署odoo16 odoo https www odoo com documentation 14 0 zh CN administration install install html mac os https alanhou org
  • Ubuntu18.04没有WiFi怎么解决(图文详解)

    博主一个月前 2021 6 1 在安装Ubuntu后出现了没有WiFi的问题 参考了很多教程 才成功解决这个问题 中间做了很多无用功 所以在此总结几位大佬的方法 希望对大家有帮助 少走弯路 1 问题描述 登录Ubuntu系统后 在WiFi设
  • mlxtend库:打造自己的机器学习工具箱

    mlxtend库 打造自己的机器学习工具箱 你是否曾经为缺少一个方便 易用的机器学习工具而感到烦恼 mlxtend库或许可以满足你的需求 mlxtend是一个基于Python的开源项目 它提供了许多用于数据预处理 特征选择 分类 聚类等机器
  • Mybatis整合Spring源码分析

    一 整合配置 POM
  • 备份Intellij IDEA配置的两种方式

    转载 https my oschina net vright blog 1558342 这个技巧老早就知道 而且 本就是官方支持的 真正实现 全新安装 开箱即用 这里以Windows系统为例 方式一 通过将配置导出为Jar包的形式 实现备份
  • CPU调度策略&linux 0.11的schedule实现--OS

    CPU调度策略 如何设计调度算法 这个算法应满足 尽快结束任务 周转时间 从任务进入到任务结束 短 用户操作尽快响应 相应时间 从操作发生到响应 短 系统内耗时间少 吞吐量 完成的任务量 总原则 系统专注于任务执行 又能合理调配任务 两种基
  • matlab时域频域信号特征提取资料整合

    1 前言 最近在做一个项目 需要将声纳信号中的特征都提取出来进行分析 资料查到头秃终于整合出来了些东西 记录一下 由于不是专业人员 如果发现任何错误请不要大意的附在评论区 我会及时修改 谢谢 2 思路 思路这段引用自知乎大佬aresmiki