如何在 MATLAB 中计算信号的谱熵?我知道基本步骤,但如果有人可以提供帮助,那就太好了,
- 在 MATLAB 中使用 FFT 命令计算信号的功率谱。
- 使用功率谱或任何其他技术计算功率谱密度。
- 之间的功率谱密度归一化,以便可以将其视为概率密度函数。
- 计算熵
如何在 MATLAB 中计算信号的谱熵?我知道基本步骤,但如果有人可以提供帮助,那就太好了,
从技术上讲,这不是一个 MATLAB 式的论坛,但我可以为您更详细地解释这些步骤:假设您的输入信号是,它的 DFT 是。对于真实信号,您可以使用一侧的 DFT,因为当您查看其功率谱密度时,另一半将是多余的。(PSD)。
计算信号的 DFT 后,PSD 就是。也就是说,您需要将 DFT 结果的绝对幅度取平方。
您现在需要对 PSD 进行归一化,以便将其视为概率密度函数 (PDF)。因此,归一化的 PSD(让我们称之为)将简单地为:
最后,您的谱熵将是:
我只是在这里
我的源代码:
[x, Fs, nbits] = wavread('ederwander.wav');
winSize = 2048;
n_samples = length(x);
%50% overlap or 0 to not use overlap
OverlapStep = 50;
if OverlapStep > 0
Overlap = floor((OverlapStep*winSize) / 100);
nFrames=floor(n_samples/Overlap)-1;
else
Overlap= winSize;
nFrames=floor(n_samples/Overlap)-1;
end
Entropy = zeros(nFrames,1);
k=1;
inc=1;
while ( (k+winSize-1) <= n_samples )
FrameSignal = x(k:k+winSize-1);
v = FrameSignal .* hann(length(FrameSignal));
N = length(v);
Y=fft(v);
% Compute the Power Spectrum
sqrtPyy = ((sqrt(abs(Y).*abs(Y)) * 2 )/N);
sqrtPyy = sqrtPyy(1:winSize/2);
%Normalization
d=sqrtPyy(:);
d=d/sum(d+ 1e-12);
%Entropy Calculation
logd = log2(d + 1e-12);
Entropy(inc) = -sum(d.*logd)/log2(length(d));
k=k+Overlap;
inc=inc+1;
end
此源代码从每个帧块进行光谱熵计算...