Расчет вейвлет-энтропии для сигнала фонокардиограммы с материнским вейвлетом gaus4 - PullRequest
0 голосов
/ 24 января 2019

Я пытался реализовать статью под названием «Классификация звуков сердца по несегментированным фонокардиограммам». это ссылка: https://www.researchgate.net/publication/316848688_Heart_sound_classification_from_unsegmented_phonocardiograms но я борюсь с вычислением энтропии вейвлетов, приправленной в статье, как показано на скриншотах. Это код, который я написал для вычисления пятисекундного сегмента с самой высокой энтропией вейвлета в сигнале PCG, но он дает мне странные значения Я просто хочу знать, что я делаю неправильно и как рассчитать энтропию вейвлета в этой статье, потому что я уверен, что я не прав.

% Read the .wav signals and store them in cell array.
sounds = dir('*.wav'); 
num_files = length(sounds);
mydata = cell(1, num_files);

for k = 1:num_files 
[mydata{k},Fs] = audioread(sounds(k).name); 
end
%  Define the variable heighest_e that Carries
%  the value of heighest wavelet entropy value of 
%  five second segment and the filtered signal
%  array that carries the filtered 5 secs segments.
heighest_e = 0;
filtered_signal = zeros(num_files,10000);
feature_vector = zeros(num_files,1);

%  iterate over all heart sound files one by one.
for i = 1:num_files
signal_cell = mydata(1,i);
signal = cell2mat(signal_cell);

length_signal = length(signal);
iterations = floor(length_signal/2000);

% choose the five second segment with heighest wavelet entropy.
for itr = 1: (iterations - 4)
    m = 1;
    rec5sec = signal(m : m + 9999,:);
    e = wentropy(rec5sec,'shannon');

    if e > heighest_e
        heighest_e = e;
        final_sig = rec5sec;
    end    
    m = m + 1999;
end
filtered_signal(i,:) = final_sig;
feature_vector(i,:) = heighest_e;
end
...