我试图在MATLAB中计算某些音频文件的MSE。我的代码如下所示。
[y1,fs1]=audioread('one.mp3');
[y2,fs2]=audioread('two.mp3');
[c1x,c1y]=size(y1);
[c2x,c2y]=size(y1);
R=c1x;
C=c1y;
err = sum((y1-y2).^2)/(R*C);
MSE=sqrt(err);
问题是,当计算出MSE时,我得到1 x 2矩阵,而我需要一个单值。
我做错了什么?
答案 0 :(得分:0)
您的代码可能会为每个音频通道返回一个值。如果你有两个通道,它将返回两个值,如果你有三个通道,它将返回三个值,等等。
更重要的是:
看起来您使用(R*C)
通过频道数量对总和进行标准化。
平方根(sqrt
)也是unnecessary for MSE。 (而且你已经发现y1
两次的大小了。
或许可以将此用于MSE:
MSE = mean( (y1 - y2).^2 );
现在它将根据行数找到平均值并自动除以该大小。 :)
修改强>
如果你想分开平方误差:
err_sq = (y1 - y2).^2;
MSE = mean( err_sq );