Il nostro obiettivo tramite questo controllo è modellare il buffer dei chunk video, quindi noi siamo interessati effettivamente ai secondi di video immagazzinati nel buffer.

Possiamo esprimere di seguito la variazione del buffer tramite la derivata che cresce se la rete () è più veloce del consumo video ():
Dove:
- è a velocità a cui i dati video arrivano fisicamente dal server al buffer del nostro dispositivo:;
- è il livello dello stream;
- è la velocità di riproduzione che di regola è un secondo di film su un secondo di tempo.
si comporta come un rumore nel nostro sistema e il modello non è lineare perché noi vogliamo controllare che si trova al denominatore, pertanto eseguiamo la linearizzazione in retroazione (feedback linearization). Usando un controllore proporzionale-integrale diventa , dove è l’integrale dell’errore di , mentre e sono due parametri scelti. Il modello finale che si ottiene diventa:
- Se il buffer è troppo pieno:
- Vogliamo che il buffer scenda (cioè che diventi negativo).
- Poiché la qualità è al denominatore, se aumentiamo (scegliendo una qualità video più alta, es. 4K), il termine diventa più piccolo.
- Quando il termine di ingresso diventa minore della velocità di riproduzione (che è fissa a 1), il buffer inizia a svuotarsi. In pratica, stai scaricando “pochi secondi di video molto pesanti”, quindi consumi il buffer accumulato mentre ci godiamo l’alta qualità.
- Se il buffer si sta svuotando (o è basso):
- Vogliamo che il buffer risalga rapidamente (cioè che sia positivo e grande).
- Dobbiamo diminuire la qualità . Un valore più piccolo al denominatore fa crescere il risultato della frazione.
- In questo modo, con la stessa velocità di rete , scarichiamo “molti secondi di video leggeri”, riempiendo il serbatoio di sicurezza prima che si svuoti del tutto.
In sintesi, il controllore agisce proprio come un rubinetto inverso: per riempire il serbatoio (buffer) dobbiamo “stringere” la qualità (abbassarla), mentre per svuotarlo possiamo “aprire” la qualità al massimo.
Rappresentazione in spazio di stato
Per poter usare l’algebra lineare (le matrici), raggruppiamo le variabili che cambiano nel tempo in un unico vettore colonna:
Ingresso del sistema
Nel nostro caso l’ingresso è il set point del buffer quindi :
Il sistema in spazio di stato ha la seguente forma:
- La prima equazione ci dice che la velocità con cui cambia la variabile dipende dal suo valore attuale (moltiplicato per un guadagno ) e dal valore di una seconda variabile (moltiplicata per ).
- La seconda equazione descrive l’errore. La variazione della componente integrale () è data dalla differenza tra il valore desiderato (il set point ) e il valore attuale (). In pratica, il sistema sta “accumulando” l’errore nel tempo.
Matrici dello spazio di stato
Pole allocation
In questo caso possiamo effettuare la pole allocation (o allocazione degli autovalori). Possiamo scegliere matematicamente i valori di e per imporre al sistema esattamente il comportamento dinamico che desideriamo.