1.原始情况

我有一个原始信号作为列数据矩阵n通道数据x:mxn (single),其中m=120019是样本数,n=15是通道数。

我也将滤波后的信号作为滤波后的列数据矩阵x:mxn (single)

原始数据主要来自传感器拾取的随机数据,以零为中心。

MATLAB下,我使用没有选项的savebutter作为高通滤波器,而single用于过滤后的转换。

save本质上对二进制HDF5格式应用了GZIP 3级压缩,因此我们可以假设文件大小是信息内容的良好估计,即,对于随机信号,最大值,对于零,接近零。恒定的信号。


保存原始信号将创建2MB的文件,
保存已过滤信号将创建5MB的文件(?!)。

2。问题

考虑到滤波后的信号信息较少,被滤波器去除后,滤波后的信号有可能具有更大的尺寸吗?

3。简单示例

简单示例:

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');


为原始信号和滤波后的信号创建6MB的文件,比以前的文件大值归因于使用纯随机数据。

从某种意义上说,表示滤波后的信号比滤波后的信号(?!)更随机。

4。评估示例

请考虑以下内容:


根据高斯噪声$ \ sim N(0,1)$从随机信号$ x_r $创建的滤波器,恒定信号$ x_c $等于$ 1 $。
忽略数据类型,即只使用double
忽略数据大小,即让我们使用1MB的一列数据向量,$ n = 125000 $,$ m = 1 $。
让我们将$ a $参数作为测试的随机指数:$ x = \ alpha x_r +(1- \ alpha)x_c $,这意味着$ \ alpha = 1 $是完全随机的,而$ \ alpha = 0 $是完全恒定的。 br />考虑一个$ w_n = 0.5 $的高通巴特沃斯滤波器。

以下代码:

%% 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;


,结果如下图:


此模拟再现了滤波后的信号的大小总是比原始信号大的事实,这与滤波后的信号具有较少信息的事实相矛盾。
/>

评论

我认为您的问题更多是关于压缩算法的,而不是其他。使用-nocompression选项保存两个文件,然后检查您不经意间生成的位模式。我的猜测是,您的随机信号实际上包含有效压缩的有效重复,而过滤后的版本则不能。尽管如此,有趣的是:)

在不进行压缩的情况下,所有信号的大小和大小都相同,均为1MB。我会检查。我盲目地假设压缩作为信息,所以我将附加评估性示例来检查此“信息”方面...

#1 楼

+1是一个非常有趣且富有洞察力的实验。

一些想法:


滤波后的信号信息少是不正确的。这取决于您的输入信号,滤波器类型和截止频率。
高通噪声信号时,您将删除变化缓慢的分量。这使您的信号由“更频繁更改的随机数”组成,因此更加随机。当然,这取决于您的输入信号是否包含高频。您的输入是噪声,因此包含所有高频。但是,如果您的输入是更有序的信号,则在某个HP截止频率后它将损失大量能量,输出将接近于零,随机性较小,尺寸较小。我认为,如果您将HP滤波器的截止频率提高得很高,则在某一点之后,文件大小会减小。
另一个实验是使信号通过截止频率低的LP滤波器并看到差异。
基于1中的相同理论,您正在对信号进行高通,实质上是去除了直流部分xc,并使其带有噪声xr


评论


$ \ begingroup $
从理论上讲,您的1.至少错了一半。与未滤波的信号相比,滤波后的信号必须包含更少(或最多,相同)的信息。
$ \ endgroup $
– MarcusMüller
17年8月12日在9:22

$ \ begingroup $
@MarcusMüller我对此明确表示完全同意,但我有以下担忧:您是否互换了滤波器的脉冲响应和输入随机信号的作用(即(确定性)脉冲响应变成了现在输入到具有随机脉冲响应的滤波器)我们是否仍可以说输出处的信息小于输入处的信息?
$ \ endgroup $
– Fat32
17年8月12日在10:09



$ \ begingroup $
@ Fat32是一个有趣的角度!正确点。在这种特殊情况下,我认为如果我们将LPF视为承载信息的信号,那么我们会发现它几乎不包含任何信息(在设计上非常相关,而且很短)。
$ \ endgroup $
– MarcusMüller
17年8月12日在10:19

$ \ begingroup $
@ Fat32这是一个不错的建议。如果我压缩信号的FT,那么在无损情况下,我仍然应该具有相同的大小! (不考虑频谱的某些部分可能导致价值较低,易于丢弃的信息的事实)。如果没有,我们会发现一个更好的压缩算法,我真的怀疑:)。因此,我将用这种方法准备另一个评估示例。
$ \ endgroup $
–甘草
17年8月12日在13:02

$ \ begingroup $
@MarcusMüller不能一概而论。您应该定义一些东西以使该陈述成为真实。假设您有一个随机分配其输入的系统。当输入为直流电时,它是随机的,因此您的输出具有更大的熵。(不难想象,只有向输入增加噪声的通信通道才能做到这一点。)对于LTI系统,我们知道它们如何处理噪声,所以这是一个不同的主题。信息论的结果并不基于系统是否为LTI。我仍然不能肯定是专家,但是我认为那不是事实。
$ \ endgroup $
– doubleE
17年8月13日在3:06



#2 楼

我将检查2件事:


如果应用的滤波器是低通滤波器或其他滤波器。如果它是一个会放大噪声的滤波器,那么结果是合理的。
您似乎以生成高通滤波器的形式使用butter()。由于输入信号是由噪声组成的,因此高通滤波器会对其进行放大,从而导致压缩文件较少。例如,尝试[hb, ha] = butter(2, 0.5, 'low');,它应该支持更好的数据压缩(噪声抑制)。如果您想走得更远,请使用[hb, ha] = butter(2, 0.1, 'low');
确认filter命令的输出也为single。我认为,由于您的滤波器为double,输出为double,因此信号大小相乘。在您的代码中,将xf = filter(hb, ha, x);替换为xf = single(filter(hb, ha, x));。现在有什么结果?


评论


$ \ begingroup $
@hyprfrcb,用butter(2,0.5,'low');尝试相同。那会发生什么呢?
$ \ endgroup $
–罗伊
17年8月12日在13:19

$ \ begingroup $
因此,问题得以解决。您使用的是高通滤波器,它会放大噪音,因此由于噪音的压缩性较差,因此文件较大。请享用...
$ \ endgroup $
–罗伊
17年8月12日在13:25

$ \ begingroup $
您可以尝试[hb,ha] = butter(2,0.1,'low');看文件大小变得更小。
$ \ endgroup $
–罗伊
17年8月12日在13:27



$ \ begingroup $
施加在噪声上的高通通常会降低信号的SNR。这就是您上面所做的。高通滤波器放大了噪声能量,这意味着数据的可压缩性较差。
$ \ endgroup $
–罗伊
17年8月12日在13:42

$ \ begingroup $
由LPF滤波器滤波的随机信号会在其样本之间建立相关性,因此可压缩到更高的水平。它不适用于对随机信号进行操作的HPF。
$ \ endgroup $
–罗伊
17年8月12日在14:14