1. Situation d'origine
J'ai un signal original sous forme de colonne de données matricielles données n
canaux x:mxn (single)
, avec m=120019
le nombre d'échantillons et n=15
le nombre de canaux.
De plus, j'ai le signal filtré comme matrice de données de colonne filtrée x:mxn (single)
.
Les données d'origine sont principalement aléatoires, centrées sur zéro, provenant de capteurs de capteur.
Sous MATLAB
, j'utilise save
sans options, butter
comme filtre passe-haut, et single
pour le casting après filtrage.
save
appliquer essentiellement une compression GZIP de niveau 3 sur un format binaire HDF5, nous pourrions donc supposer que la taille du fichier est un bon estimateur du contenu de l'information , c'est-à-dire maximum pour un signal aléatoire, et proche de zéro pour un signal constant.
L'enregistrement du signal d'origine crée un fichier de 2 Mo ,
L'enregistrement du signal filtré crée un fichier de 5 Mo (?!).
2. Question
Comment est-il possible que le signal filtré ait une plus grande taille, étant donné que le signal filtré a moins d' informations, supprimé par le filtre?
3. Exemple simple
Un exemple simple:
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');
crée des fichiers de 6 Mo , à la fois pour le signal original et filtré, qui est plus grand que les valeurs précédentes en raison de l'utilisation de données aléatoires pures.
Dans un sens, cela indique que le signal filtré est plus aléatoire que le signal filtré (?!).
4. Exemple d'évaluation
Considérer ce qui suit:
- Un filtre créé à partir d'un signal aléatoire partir du bruit gaussien , et d'un signal constant égal à .
- Ne tenez pas compte du type de données, c'est-à-dire utilisons uniquement
double
, - Ne tenez pas compte de la taille des données, c'est-à-dire utilisons un vecteur de données de colonne de 1 Mo, , .
- Permet de considérer l' paramètre que l' indice aléatoire pour tester: , ce qui signifie est totalement aléatoire et entièrement constant.
- Considérons un filtre Butterworth passe-haut avec .
Le code suivant:
%% 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;
Avec comme résultat le graphique suivant:
Cette simulation reproduit l'état du signal filtré ayant toujours une taille notoirement plus grande que le signal d'origine, ce qui contredit le fait qu'un signal filtré contient moins d' informations, supprimées par le filtre.