这个问题很简单,但我无法理解我错过了什么。所以我有一个录音,首先我用128个样本框架50%重叠,然后对于每个帧我想要计算帧的能量。所以我计算它,但当我想将它标准化为0db时,我得到奇怪的结果。这是我的matlab代码:
for i=1:size(dataF,2)
E(:,i)=20*log10((abs(dataF(:,i)).^2));
emax(:,i)=max(E(:,i));
E1(:,i)=E(:,i)/emax(i);
end
这是第一帧的输出能量,下面是0db的归一化能量,但不正确 enter image description here enter image description here
任何建议真的很感激。提前谢谢。
答案 0 :(得分:0)
要将每个帧标准化为0 dB,您必须除以对数之前的最大值。此外,您可能需要将因子20
替换为10
,因为您已经对数据进行了平方:
for i = 1:size(dataF,2)
dataFmax(:,i) = max(abs(dataF(:,i)).^2)
E1(:,i) = 10*log10((abs(dataF(:,i)).^2)/dataFmax(:,i));
end
或者,您可以在对数后减去最大值:
for i=1:size(dataF,2)
E(:,i) = 10*log10((abs(dataF(:,i)).^2));
emax(:,i) = max(E(:,i));
E1(:,i) = E(:,i) - emax(i);
end