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:Nif amp_mph < fft_amp(i)amp_pks = [amp_pks,fft_amp(i)];amp_pkfs = [amp_pkfs,i / N * fs / 2];end
endavg_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('右声道倒频谱');

matlab时域频域信号特征提取资料整合相关推荐

  1. matlab中频域信号IFFT,MATLAB中ifft函数用法、性质、特性-以及与fft的组合应用全面深入解析(含程序)...

    MATLAB中ifft函数用法.性质.特性,以及与fft的组合应用全面深入解析(含程序) 前言 在我之前的<MATLAB中fft函数用法.性质.特性.缺陷全面深入解析(含程序)>中,我已经 ...

  2. matlab中如何对一组复数频域信号进行快速傅里叶逆变换

    matlab中如何对一组复数频域信号进行快速傅里叶逆变换 为何需要对复数频域信号进行快速傅里叶逆变换 快速傅里叶变换(fft)后的数据格式 快速傅里叶逆变换至原信号时域波型 第一步 第二步 第三步 验 ...

  3. 《数字语音处理》- 1. 基于MATLAB的语音信号时域特征分析

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/117629753 基于MATLAB的语音信 ...

  4. 频域参数 matlab,基于MATLAB的语音信号时频域参数分析

    22 科技广场 2007.9 基于MATLAB的语音信号时频域参数分析 the Character Analysis of Speech Signal with Time and Frequency ...

  5. matlab计算频域动态性能指标,基于MATLAB自动控制系统时域频域分析与仿真.doc

    word文档 可编辑复制 word文档 可编辑复制 基于MATLAB的自动控制系统时域频域分析与仿真 摘 要 自动控制系统就是在无人直接操作或干预的条件下,通过控制装置使控制对象自动的按照给定的规律运 ...

  6. python时域信号特征提取(各种因子)

    #######################################计算因子###############################import csv import pandas a ...

  7. 用matlab画出时域波形,用Matlab画出信号的时域波形与频谱,观察它们的关系。.ppt...

    信号与系统课程实践考察 班级: 学号: 姓名: 指导老师: 一 实验题目 试用MATLAB画出它们的时域波形及频谱,观察它们的关系. 二 实验目的 1 正确运用傅立叶变换 2用Matlab编程观察周期 ...

  8. 【Matlab心音信号】EMD心音信号特征提取【含GUI源码 1735期】

    一.代码运行视频(哔哩哔哩) [Matlab心音信号]EMD心音信号特征提取[含GUI源码 1735期] 二.matlab版本及参考文献 1 matlab版本 2014a *2 参考文献 [1] 沈再 ...

  9. matlab 复频域,MATLAB信号与系统分析(四)——离散信号与系统的复频域分析及MATLAB实现...

    一.系统的z变换和反变换 1.利用部分分式展开求解逆Z变换: 2.例子 3.Z变换的MATLAB函数 clear all f=sym('cos(a*k)'); F=ztrans(f) F=sym('z ...

  10. 用matlab画出信号波形,用Matlab画出信号的时域波形及频谱,观察它们的关系

    <用Matlab画出信号的时域波形及频谱,观察它们的关系>由会员分享,可在线阅读,更多相关<用Matlab画出信号的时域波形及频谱,观察它们的关系(18页珍藏版)>请在人人文库 ...

最新文章

  1. BZOJ 3639: Query on a tree VII LCT_set维护子树信息
  2. pycharm 运行程序时提示错误信息:ModuleNotFoundError: No module named 'pytest' 解决方法
  3. es6 取数组的第一个和最后一个_ES6:解构——JavaScript 从数组和对象中提取数据的优雅方法...
  4. 学习、纪律与交流——《Clean Coder》读后感
  5. Windows 7 VHD 启动
  6. 监视窗口添加 $err,hr 一行来实时现实错误
  7. go中make和new的用法,以及nil用法
  8. springcloud-eureka简单实现
  9. mysql 查询条数优化_MySQL优化总结-查询总条数
  10. SD2.0大会第1天心得
  11. python----设计模式
  12. 教你快速将多个TXT文档合并成一个
  13. 华为VRRP-基于交换机的VRRP配置
  14. hadoop-hive安装
  15. make: *** [config-host.mak] Error 1
  16. 聚合支付与第四方支付平台的本质区别
  17. 3D重建中的相机雷达融合
  18. Springboot美食汇开放平台8ob70计算机毕业设计-课程设计-期末作业-毕设程序代做
  19. 修改mysql密码报错_mysql修改/设置密码报错:ERROR 1819 (HY000): Your password does not satisf...
  20. 红尘梦醒雪无踪,花落无息香如故

热门文章

  1. 缠中说禅电子书_缠中说禅股技术理论(完整版).pdf
  2. 高速公路上边有没有人脸识别摄像头_人脸识别特征介绍以及难题概括
  3. 手机淘宝APP怎么复制商品链接发送到微信公众号查询淘宝优惠券及淘宝返利?
  4. 无限条码扫描枪,手机充当扫描器
  5. 表面缺陷检测:机器视觉检测技术
  6. 计算机组装模拟系统吗,怎么在线模拟组装电脑
  7. 塔康信号matlab,干扰效能仿真,jamming effect simulation,音标,读音,翻译,英文例句,英语词典...
  8. 全国计算机绘图师第三期工业产品,工业产品类CAD技能等级考试试题集
  9. 苹果7pnfc功能门禁卡_苹果手机怎么刷门禁卡?iPhone刷门禁卡的设置方法
  10. c语言头随机数文件库,C语言随机数使用方法