Ciao a tutti. Sto facendo un progetto per l'università nel quale, dato un file .wav, devo isolare una parola dal segnale e riprodurla.

Io ho scritto questo codice

codice:
function N_signal=EndPointing(data)
%leggi il file wav
%[data,samplingRate,nBitsPerSample] = audioread('test[00000].wav');
[data, samplingRate]=audioread('test[00000].wav');
samplingRate = 48500;
%trasformo il segnale nel dominio delle frequenze
fourierData = fft(data,length(data));
magFour = abs(fourierData);
totalFileTimeInMSec = (length(data) / samplingRate)*100;

%user input:
%la durata di ogni frame dioende dalla dimensione del file audio e dalla 
%dimensione dei segmenti delle parole

frameLengthInMSec = 1;

%calcolo il numero di frame
numberOfFrames = totalFileTimeInMSec / frameLengthInMSec;
numberOfFrames = floor(numberOfFrames);
% calcolo la dimensione di ogni frame nell'array
frameSize = samplingRate * frameLengthInMSec / 100;

%inizializzo i frame
frames = zeros(numberOfFrames,frameSize);
frame = zeros(1,frameSize);
%copio i dati del segnale nei frame
startIndex = 1;
endIndex = frameSize;
for frameM = 1:1:numberOfFrames
    frame = data(startIndex:endIndex,1);
    startIndex = startIndex + frameSize;
    endIndex = endIndex +frameSize;
      frames(frameM,:) = frame.';
end

%calcolo P (mean^2)
framesSqr = frames.^2;
P = mean(framesSqr,2);
%calcolo Z (differenza media)
Z = mean(abs(diff(abs(frames),1,2))./2,2);
%calcolo W combinazione di P e Z. 1000 è un fattore scalare
W = P.*(1-Z).*1000;
% calcolo la soglia VAD
meanW = mean(W);
stdDevW = std(W);
gamma  = 0.2*stdDevW^-0.8;
threshold = meanW + gamma*stdDevW;
thresholdedW = zeros(1,length(W));
%soglia W
for i = 1:1:length(W)
    
    if W(i)> threshold
        thresholdedW(i) = 1;
    end
end
%attenua la soglia W per unirsi ai segmenti vicini
%smoothing window = 5 (default)
smoothVAD = smooth(thresholdedW,10);
%soglia a VAD di nuovo
for i = 1:1:length(smoothVAD)
    
    if smoothVAD(i)> 0
        smoothVAD(i) = 1;
    end
end
C= 0;
%step-1 interrompo il segnale e il frame a 0.01 secondi
for i=1:numberOfFrames
    
    %estraggo il frame dal segnale
    frame = data((i-1)*frameSize+1 : frameSize*i).* smoothVAD(i);

    %identifico la parola trovando il frame con ampiezza massima > 0.03
    S = sum(frame);    
    if(S ~= 0)
        C = C+1;
        %creo un nuovo segnale senza silenzio
        N_signal((C-1)*frameSize+1 : frameSize*C) = frame;
    end
end

plot(frame);

end

Il problema è che quando visualizzo il segnale alla fine, risulta una semplice linea piatta e non mi estrae la singola parola. Inoltre non saprei come riprodurre la variabile frame.
Qualcuno potrebbe darmi una mano?