Ciao a tutti, ho scritto il seguente codice per il calcolo dell'LPC e la stampa a video della funzione di LPC confrontata con la FFT. Sto cercando di capire come riuscire a fare una stampa della funzione nel tempo utilizzando un grafico waterfall, qualcuno sa aiutarmi?

Ecco il sorgente:

codice:
% Funzione: FTTeLPC
% ------------------
% Programma per il calcolo della Fast Fourier Transform seul segnale
% originale e utilizzando i coefficienti dell'LPC allo
% scopo di effettuare un confronto tra i risultati ottenuti
%
% Prototipo: [] = FFTeLPC(file,doplotframe,doplotall,Sec)
%
% Input:   
%
%          Stringa che rappresenta il path del file wav da analizzare  
%          Plot finestre LPC ( 0 = No , 1 = Si )
%          Plot totale LPC ( 0 = No , 1 = Si )
%          Secondi di pausa tra la stampa di una finestra e l'altra 
%           
% Output:  
%
%            
%

function [] = FFTeLPC(file,doplotframe,doplotall,Sec)


% Leggo il file wav e ne salvo i dati e la frequenza
[x,Fs]=wavread(file);

%--------------INIZIALIZZAZIONI E PRIME OPERAZIONI----------------------%

campione = length(x);

% Applico la funzione di hamming al segnale
x = x.*hamming(campione); 

ncoef=20; % Numero dei coefficienti da calcolare

n = 200; %Lunghezza della finestra di analisi scelta

overlap = 100; % Numero di campioni in sovrapposizione tra le finestre

frame = floor(campione/n); % Numero di frame

% Imposto la stampa delle finestre
if ~exist('doplotframe')
    doplotframe=1; % Per default stampo le finestre di ogni frame
end

% Imposto la stampa del'LPC su tutto il segnale
if ~exist('doplotall')
    doplotall=0; % Per default non effettuo la stampa su tutto il segnale
end

% Imposto la pausa tra la stampa di una finestra e l'altra se non assegnata
if ~exist('Sec')
    Sec=2; % La pausa di default è 2 secondi
end

%-------------------CORPO ALGORITMICO DEL PROGRAMMA----------------------%

% Stampo a tutto schermo
if doplotframe==1 | doplotall==1 % Se si vuole stampare il grafico
    set(figure,'units','normalized','outerposition',[0 0 1 1]);
end

% Calcolo l'LPC per il primo frame
X = x(1:n+overlap); % Salvo i campioni relativi al primo frame con tolleranza di overlap

a = lpc(X,ncoef); % Calcolo i coefficienti LPC per il primo frame 

% Calcolo l'LPC per tutti i restanti frames

for i = 2:frame % Ciclo sui frames
   
   % Estraggo i campioni relativi a questo frame con overlap del precedente frame 
   X = x(1+(i-1)*n-overlap: n*i); 

   ai = lpc(X,ncoef); % Calcolo i coefficienti LPC per il corrente frame 
   
   if doplotframe==1 % Se si vuole stampare il grafico su tutto il segnale
       PlotFFT(X,4096); % Stampo FFT dal segnale originale
       PlotLPC(ai,4096); % Stampo FFT dai coefficienti LPC
       pause(Sec);
   end
   
end

if doplotall==1 % Se si vuole stampare il grafico su tutto il segnale
    
    % Calcolo i coefficienti dell'LPC
    a = lpc(x, ncoef);

    PlotFFT(x,4096); % Stampo FFT dai coefficienti LPC
    PlotLPC(a,4096); % Stampo FFT dal segnale originale
    
end
 

%------------------OPERAZIONI FINALI E DI CHIUSURA-----------------------%
fprintf('\n');
disp('Premere un tasto per terminare...')
pause

clc % Pulisco il terminale
clear % Dealloco le variabili utilizzate         
            
close % Chiudo tutte le finestre aperte

end

%------------------FUNZIONI DI STAMPA-----------------------%

% Nota: per portare tutto nel dominio della frequenza è anche possibile
% utilizzare freqz ( forse più corretto )

% Input: Coefficienti Segnale e Numero di valori da calcolare
function PlotFFT(Coeff, N)

    % Calcolo la Fast Fourier Transform in N Punti ( Le Armoniche che
    % compongono il nostro campione )
    FFT = fft(Coeff,N);

    % Prendo una parte dello spettro dei valori FFT e li traspongo ( La riga
    % diventa colonna ), in altre parole prendo un solo lato dello spettro che
    % da questo punto in poi si ripeterebbe specularmente.
    FFT = FFT(1:N/2+1)'; 

    % Applico un coefficiente moltiplicativo a tutti i valori, rendendoli
    % positivi, per effettuare una stampa di un grafico più omogenea ( non
    % cambio le informazioni sui coefficienti che rimane tale a meno di questo
    % coefficiente moltiplicativo)
    FFT = 10*log10(abs(FFT).^2);
    
    clf; % Cancello i grafici attualmente visualizzati
    plot(FFT'); % Stampo i valori FFT trasposti ( La colonna diventa riga )
    hold on;

end

% Input: Coefficienti LPC e Numero di valori da calcolare
function PlotLPC(Coeff, N)

    % Recupero le informazioni sulle armoniceh componenti il suono a partire
    % dai valori ( compressi ) dell'LPC, per effettuare un paragone tra la
    % "realtà" e l'approssimazione dovuta alla compressione LPC
    LPCPlot = fft(Coeff,N);

    % Effettuo le stesse operazioni applicate sui valori dell'FFT per una
    % coerenza nella stampa

    % Prendo una parte dello spettro dei valori FFT, in altre parole prendo 
    % un solo lato dello spettro che da questo punto in poi si ripeterebbe 
    % specularmente. Inoltre inverto questi valori ( generalmente < 0 ) per
    % farli divenire ( generalmente ) grandi per una stampa ottimale nel
    % confronto con l'FFT dal segnale originale
    LPCPlot = 1./LPCPlot(1:N/2+1);

    % Applico un coefficiente moltiplicativo a tutti i valori, rendendoli
    % positivi, per effettuare una stampa di un grafico più omogenea ( non
    % cambio le informazioni sui coefficienti che rimane tale a meno di questo
    % coefficiente moltiplicativo)
    LPCPlot = 10*log10(abs(LPCPlot).^2);
    
    plot(LPCPlot,'r','linewidth',2); % Stampo i valori dell'LPC
    hold on;
    title('Confronto tra FFT da Segnale e da Coeff LPC');
    xlabel('Frequenza ( Hz )');
    ylabel('Potenza ( dB ) [A meno di una costante]');
    grid;

end