函数获取只有30峰值/ sec的信号不能正常工作

2视图(30天)
(y, fs) = audioread (“tonev2018.mp3”);
%调整的信号
y =意味着(y, 2);
y = y -意味着(y);
%重采样
new_fs = 8000;
y =重新取样(y, new_fs, fs);
%光谱图
窗口= 0.064 * new_fs;
noverlap = 0.032 * new_fs;
nfft =窗口;
F (S, T) =光谱图(y,窗口、noverlap nfft, new_fs);
S =日志(abs (S));
%的峰值检测
gs = 9;
山峰= 0 (“喜欢”,年代);
shiftx =装天花板(- gs / 2):装天花板(gs / 2)
机智的=装天花板(- gs / 2):装天花板(gs / 2)
c = circshift(年代,[鬼鬼祟祟shiftx]);
山峰=山峰+ ((S-CS) > 0);
结束
结束
P =山峰= = max(峰值(:));
%的阈值的峰值
tpeaks = [];
我= 1:16:大小(P, 2)
istart =我;
iend = i + 15;
如果iend >大小(P, 2)
iend =大小(P, 2);
结束
秒= P (:, istart: iend);
平=重塑(秒、1、大小(秒,1)*(秒,2)大小);
排序=排序(压平,“下”);
阈值=排序(30);
证券交易委员会(sec <阈值)= 0;
tpeaks = (tpeaks, sec);
结束
阈值的峰值应该离开所以我的代码只有30每秒钟值(0.064 * 16)的信号,但出于某种原因,它不会做任何事情一样,我得到数组p .任何洞察力apprappreciated得多。提前谢谢。

接受的答案

Atithi
Atithi 2023年6月16日早晨
我刚完成审查代码并意识到没有什么特别不正确的与原来的实现。然而,我注意到它没有任何可视化的谱图和检测到的峰值,这使它具有挑战性的诊断阈值峰值的问题。为了解决这个问题,我继续和添加必要的可视化数据。这让我得出结论,峰值的阈值是正常,和代码的问题可能驻留在阈值的选择过程。
%读取音频文件
(y, fs) = audioread (“tonev2018.mp3”);
%预处理:调整的信号
y =意味着(y, 2);
y = y -意味着(y);
%预处理:重采样
new_fs = 8000;
y =重新取样(y, new_fs, fs);
%光谱图
窗口= 0.064 * new_fs;
noverlap = 0.032 * new_fs;
nfft =窗口;
F (S, T) =光谱图(y,窗口、noverlap nfft, new_fs);
S =日志(abs (S));
%的峰值检测
gs = 9;
山峰= 0 (“喜欢”,年代);
shiftx =装天花板(- gs / 2):装天花板(gs / 2)
机智的=装天花板(- gs / 2):装天花板(gs / 2)
c = circshift(年代,[狡猾、shiftx]);
山峰=山峰+ ((S - CS) > 0);
结束
结束
P =山峰= = max(峰值(:));
%的阈值的峰值
tpeaks = [];
i = 1: 16:大小(P, 2)
istart =我;
iend = i + 15;
如果iend >大小(P, 2)
iend =大小(P, 2);
结束
秒= P (:, istart: iend);
平=重塑(秒、1、大小(秒,1)*(秒,2)大小);
排序=排序(压平,“下”);
阈值=排序(30);
证券交易委员会(sec <阈值)= 0;
tpeaks = (tpeaks, sec);
结束
%绘制光谱图
图;
显示亮度图像(T、F、S);
集(gca),“YDir”,“正常”);
包含(“时间(s)”);
ylabel (的频率(赫兹));
标题(的谱图);
%情节发现山峰
图;
显示亮度图像(T、F tpeaks);
集(gca),“YDir”,“正常”);
包含(“时间(s)”);
ylabel (的频率(赫兹));
标题(“检测峰”);
得到这个结果作为输出。
让我知道如果有帮助吗

更多的答案(0)

类别

找到更多的在时频分析帮助中心文件交换

下载188bet金宝搏


释放

R2018b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!