Segnale filtrato vs paradosso della compressione dei file


9

1. Situazione originale

Ho un segnale originale come dati di ncanali di matrice di dati di colonna x:mxn (single), con m=120019il numero di campioni e n=15il numero di canali.

Inoltre, ho il segnale filtrato come matrice di dati di colonna filtrata x:mxn (single).

I dati originali sono principalmente casuali, centrati su zero, dai pickup del sensore.

Sotto MATLAB, sto usando savesenza opzioni, buttercome filtro passa-alto, e singleper il casting dopo il filtraggio.

saveessenzialmente applicare una compressione GZIP livello 3 su un formato binario HDF5, quindi potremmo supporre che la dimensione del file sia un buon stimatore del contenuto delle informazioni , cioè massimo per un segnale casuale e vicino a zero per un segnale costante.

  • Il salvataggio del segnale originale crea un file da 2 MB ,

  • Il salvataggio del segnale filtrato crea un file da 5 MB (?!).

2. Domanda

Come è possibile che il segnale filtrato abbia una dimensione maggiore , considerando che il segnale filtrato ha meno informazioni, rimosso dal filtro?

3. Esempio semplice

Un semplice esempio:

n=120019; m=15;t=(0:n-1)'; 
x=single(randn(n,m));
[b,a]=butter(2,10/200,'high'); 
 xf=filter(b,a,x);
save('x','x'); save('xf','xf');

crea file da 6 MB , sia per il segnale originale che per quello filtrato, che è maggiore dei valori precedenti a causa dell'utilizzo di dati casuali puri.

In un certo senso, indica che il segnale filtrato è più casuale del segnale filtrato (?!).

4. Esempio di valutazione

Considera quanto segue:

  • Un filtro creato da un segnale casuale xr dal rumore gaussiano N(0,1)e un segnale costante xc uguale a 1.
  • Ignora il tipo di dati, ovvero usiamo solo double,
  • Ignora le dimensioni dei dati, ovvero usiamo un vettore di dati di colonna di 1 MB, n=125000, m=1.
  • Consideriamo il aparametro come indice di casualità per i test:x=αxr+(1α)xc, senso α=1 è completamente casuale e α=0 pienamente costante.
  • Considera un filtro Butterworth passa-alto con wn=0.5.

Il seguente codice:

%% Data
n=125000;m=1;
t=(0:n-1)';
[hb,ha]=butter(2,0.5,'high');
d=100;
a=logspace(-6,0,d);
xr=randn(n,m);xc=ones(n,m);
b=zeros(d,2);
for i=1:d
    x=a(i)*xr+(1-a(i))*xc;
    xf=filter(hb,ha,x);
    save('x1.mat','x'); save('x2.mat','xf');
    b1=dir('x1.mat'); b2=dir('x2.mat');
    b(i,1)=b1.bytes/1024;
    b(i,2)=b2.bytes/1024;
    i
end
%% Plot
semilogx(a,b);
title('Data Size for Filtered Signals');
legend({'original','filtered'},'location','southeast');
xlabel('Random Index \alpha');
ylabel('FIle Size [kB]');
grid on;

Con il seguente diagramma come risultato: inserisci qui la descrizione dell'immagine

Questa simulazione riproduce le condizioni del segnale filtrato che ha sempre una dimensione notoriamente maggiore rispetto al segnale originale, il che contraddice il fatto che un segnale filtrato ha meno informazioni, rimosso dal filtro.


6
Penso che la tua domanda riguardi più l'algoritmo di compressione che altro. Salvare i due file con l'opzione -nocompression quindi andare a controllare i pattern di bit che si stanno generando inconsapevolmente. La mia ipotesi è che il tuo segnale casuale contenga effettivamente ripetizioni significative che si comprimono bene, mentre la versione filtrata non lo fa. Interessante comunque :)
zeFrenchy il

1
Senza compressione, tutti i segnali hanno le stesse dimensioni, 1 MB, poiché lunghezza e tipi di dati sono tutti uguali. Controllerò comunque. Suppongo ciecamente che la compressione funzioni come informazione, quindi aggiungerò un ulteriore esempio di valutazione per verificare questo aspetto "informativo" ...
Brethlosze,

Risposte:


5

+1 su esperimento molto interessante e approfondito.

Alcuni pensieri:

  1. Non è vero che il segnale filtrato abbia meno informazioni. Dipende dal segnale in ingresso, dal tipo di filtro e dalla frequenza di taglio.
    Quando si passa in alto il segnale rumoroso, si rimuovono i componenti che cambiano lentamente. Ciò rende il segnale composto da "numeri casuali che cambiano più frequentemente", quindi più casuali. Ovviamente, ciò dipende dal fatto che il segnale in ingresso contenga o meno alte frequenze. Il tuo input è rumore, quindi contiene ogni alta frequenza. Ma se il tuo input è un segnale più ordinato, perderà gran parte della sua energia dopo una certa frequenza di taglio HP, l'output diventa quasi zero, meno casuale, meno dimensioni. Penso che se aumenti la frequenza di taglio del tuo filtro HP piuttosto alta, dopo un certo punto, la dimensione del file diminuirà.
    Un altro esperimento sarebbe quello di far passare il segnale attraverso un filtro LP con una bassa frequenza di taglio e vedere la differenza.

  2. Basato sulla stessa teoria in 1., stai trasmettendo il segnale in alto, essenzialmente rimuovendo la parte DC xce lasciandola con il rumore xr.


2
Informazioni teoricamente, il tuo 1. è almeno a metà sbagliato. Il segnale filtrato deve contenere meno (o al massimo la stessa) informazione del non filtrato.
Marcus Müller,

2
@ MarcusMüller Sono assolutamente d'accordo con te su questa (affermazione ovvia) ma ho la seguente preoccupazione: se avessi scambiato i ruoli della risposta all'impulso del filtro e il segnale casuale in ingresso (ovvero la risposta all'impulso (deterministica) diventasse l'input al filtro con una risposta all'impulso casuale ora) potremmo ancora dire che le informazioni in uscita sono inferiori a quelle in ingresso?
Fat32

1
@ Fat32 che è un angolo interessante! Vero punto In questo caso particolare direi che se considerassimo l'LPF come un segnale portatore di informazioni, troveremmo che contiene pochissime informazioni (essendo molto correlate, in base alla progettazione e piuttosto brevi).
Marcus Müller,

1
@ Fat32 questo è un bel suggerimento. Se comprimo l'FT del segnale, per un caso senza perdita, dovrei avere le stesse dimensioni! (trascurando il fatto che alcune parti dello spettro potrebbero portare a informazioni meno preziose, facili da scartare). In caso contrario, avremmo scoperto un algoritmo di compressione migliore, di cui dubito onestamente :). Quindi preparerò un secondo esempio di valutazione con questo approccio.
Brethlosze,

1
@ MarcusMüller Non si può generalizzare così semplicemente. Dovresti definire le cose per rendere vera questa affermazione. Supponiamo di avere un sistema che randomizza il suo input. Quando l'ingresso è DC, lo rende casuale, quindi la tua uscita ha più entropia (non è difficile immaginarlo, solo un canale di comunicazione che aggiunge rumore all'ingresso farebbe questo). Per i sistemi LTI, sappiamo come trattano il rumore , quindi questo è un argomento diverso. La teoria dell'informazione non basa i suoi risultati sul fatto che un sistema sia LTI. Non sono ancora un esperto per essere sicuro, ma penso che non sia vero.
doubleE

3

Vorrei controllare 2 cose:

  1. Se il filtro applicato è Filtro passa basso o un filtro diverso. Se si tratta di un filtro che amplifica il rumore, il risultato è ragionevole.
    Sembra che tu lo usi butter()in una forma che genera il filtro passa-alto. Poiché il segnale di input è composto da rumore, il filtro passa-alto lo amplifica e causa file meno comprimibili. Ad esempio, prova [hb, ha] = butter(2, 0.5, 'low');dove dovrebbe supportare una migliore compressione dei dati (soppressione del rumore). Se vuoi andare ancora più in là, usa [hb, ha] = butter(2, 0.1, 'low');.
  2. Verificare che anche l'output del comando filtro singlesia. Penso che dal momento che il tuo filtro è doublel'output è doublequindi la dimensione del segnale viene moltiplicata. Nel tuo codice, sostituiscilo xf = filter(hb, ha, x);con xf = single(filter(hb, ha, x));. Quali sono i risultati adesso?

1
@hyprfrcb, prova lo stesso con butter(2, 0.5, 'low');. Cosa succede allora?
Royi,

1
Quindi il problema è risolto. Stai utilizzando il filtro passa-alto che amplifica il rumore, quindi hai un file più grande in quanto il rumore è meno comprimibile. Buon divertimento ...
Royi,

1
Puoi provare [hb, ha] = butter(2, 0.1, 'low');a vedere le dimensioni del file diventano ancora più piccole.
Royi,

1
L'High Pass applicato al rumore di solito deteriora l'SNR in un segnale. Questo è quello che hai fatto sopra. Il filtro passa-alto ha amplificato l'energia del rumore, il che significa che i dati sono meno comprimibili.
Royi,

1
Il segnale casuale che viene filtrato da un filtro LPF crea una correlazione tra i suoi campioni, quindi è comprimibile a un livello superiore. Non funziona con HPF che funziona su segnale casuale.
Royi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.