MATLAB 中的音频需要帮助
我正在尝试编写一个 .m 文件来从音轨中提取能量特征,但我似乎在实现时遇到了问题:
% Formula for calculating RMS
[f, fs, nb] = wavread('Three.wav');
frameWidth=441; %10ms
numSamples=length(x);
numFrames=(numSamples/1);
energy(frame)=0;
for frame=1:numFrames,
startSample=(frame-1)*frameWidth+1;
endSample=startSample+frameWidth-1;
% Calculate frame energy
for i=startSample:endSample
energy(frame)=energy(frame)+x(i)^2;
end
end
我在 MATLAB 中运行该文件并收到以下错误:
???尝试访问x(2);索引越界,因为 numel(x)=1。 错误==> 12 点 能量(帧)=能量(帧)+x(i)^2;
任何帮助将不胜感激。
I'm trying to write an .m file to extract energy features from an audio track but I seem to be having trouble in its implementation:
% Formula for calculating RMS
[f, fs, nb] = wavread('Three.wav');
frameWidth=441; %10ms
numSamples=length(x);
numFrames=(numSamples/1);
energy(frame)=0;
for frame=1:numFrames,
startSample=(frame-1)*frameWidth+1;
endSample=startSample+frameWidth-1;
% Calculate frame energy
for i=startSample:endSample
energy(frame)=energy(frame)+x(i)^2;
end
end
I run that file in MATLAB and get the following error:
??? Attempted to access x(2); index out of bounds because numel(x)=1.
Error in ==> myrms at 12
energy(frame)=energy(frame)+x(i)^2;
Any help would be much appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该使用
f
而不是x
,因为f
是从 .wav 文件加载的实际信号。变量 x 可能只是您工作区中的其他标量,这就是您收到所看到的错误的原因。您的代码还需要进行一些其他更正/改进。首先,正如 Paul R 指出的,您需要更正如何计算
numFrames
。其次,energy
应初始化为零向量。第三,您可以将内部 for 循环简化为单行向量化运算。以下是我重写代码的方式(编辑:根据评论,我更新了代码以保存循环中计算的一些额外变量):
You should be using
f
instead ofx
, sincef
is the actual signal loaded from your .wav file. The variablex
was probably just some other scalar in your workspace, which is why you were getting the error you saw.There are a few other corrections/improvements that should be made to your code. First, as Paul R pointed out, you need to correct how you compute
numFrames
. Second,energy
should be initialized as a vector of zeroes. Third, you can reduce the inner for loop to a one-line vectorized operation.Here's how I would rewrite your code (EDIT: Based on comments, I have updated the code to save a few extra variables computed in the loop):
这行: 不应该
是这样的:
或可能:
?
Shouldn't this line:
be something like:
or possibly:
?