基于MATLAB的clap数检测
我想检测给定wav文件中的拍数。这是我的第一次尝试。我可以画spectrogram,但如何在控制台上打印“只有一个拍子”或“有两个拍子”?你能提出解决同样问题的其他方法吗?这是我的密码:基于MATLAB的clap数检测,matlab,Matlab,我想检测给定wav文件中的拍数。这是我的第一次尝试。我可以画spectrogram,但如何在控制台上打印“只有一个拍子”或“有两个拍子”?你能提出解决同样问题的其他方法吗?这是我的密码: hfile = 'two.wav'; [stereo1, Fs, nbits, readinfo] = wavread(hfile); mono1 = mean(stereo1,2); M = round(0.01*Fs); N = 2^nextpow2(4*M); w = hamming(M); sp
hfile = 'two.wav';
[stereo1, Fs, nbits, readinfo] = wavread(hfile);
mono1 = mean(stereo1,2);
M = round(0.01*Fs);
N = 2^nextpow2(4*M);
w = hamming(M);
spectrogram(mono1,w,120,N,Fs);
从获取光谱图的实际输出开始,而不仅仅是绘制它
[S,F,T,p]=光谱图(mono1,w,120,N,Fs)代码>
我假设在光谱图中有一些明显的特征,你可以清楚地识别为代表一个“拍击”,可能是某个给定频带内的某种功率峰值。输出P
表示给定F(频率集)和T(时间集)的功率,因此您可以执行以下操作:
% take the segment of P relating to your frequencies of interest
P2 = P(F>thresh_l&F<thresh_h,:);
%show the mean power in that band over time
m = mean(P2);
plot(T,m);
%选取与您感兴趣的频率相关的P段
P2=P(F>thresh\u l&F有人能帮我吗?请,这似乎不太难,但我对MATLAB不太了解。你的代码有什么问题?它是否给出了错误消息,如果有,它们是什么?我对此一无所知,但这些信息将帮助其他人回答你的问题。你的意思是fprintf吗('There is%i clap(s)\n',clapCount)
?不,代码是正确的,但它只绘制spectrogram。我想确定给定wav文件中的claps数,并将其打印到屏幕上。我该怎么做?先生,非常感谢您的帮助。但是我该如何写“有一个claps”或“有两个claps”在控制台上。我只想将此消息添加到我的现有代码中。使用disp
或fprintf
显示消息。Gaston已经在注释中给出了一个示例。好的,但是如何从spectrogram确定clap的数量?例如,如果spectrogram中有两个峰值,我应该写“两个clap”在控制台上。或者,如果spectrogram中只有一个峰值,我应该写“一个clap”。函数clapcount计算clap的数量吗?谢谢。