matlab 加速度计信号的无损压缩

e5nszbig  于 2023-03-23  发布在  Matlab
关注(0)|答案(2)|浏览(160)

我正在寻找在MATLAB中压缩移动的(Android)产生的加速度信号的最佳方法。通过“最佳”,我的意思是首先减少体积,但也是计算复杂性,因为我将尝试在未来的某个时候在手机上实现它。我倾向于小波压缩:http://www.mathworks.de/de/help/wavelet/ref/mswcmp.html,因为它已被用于具有类似特征的ECG信号。我还发现了一些传感器的一般资源http://compsens.eecs.umich.edu/sensing_tutorial.php任何想法StackOverflow?

fhity93d

fhity93d1#

this article中有一个很好的概述。Simple-8b可能是您的情况的一个很好的解决方案,但我还没有找到Matlab实现。

0ve6wy6x

0ve6wy6x2#

这取决于你要压缩的数据的特性。我假设你想要无损编码。第一步是尽可能减少要编码的值;然后使用可变长度编码来减少所传输的数据。
有几种方法可以减少要编码的值,也有几种方法可以实现可变长度编码。
如果数据变化不快并且具有最小的噪声,则1个样本将与下一个样本相似,并且您可以对样本之间的值差异进行编码。例如,对于以下数据:x = [ 100,103,97,99,95,96,93];一阶差变为xd = [3,-6,2,-4,1,-3];然后对这些值加上初始值100进行编码。xd需要比原始x更少的位进行编码。
有些数据是有噪声的,你能做的最好的就是从数据中去除直流偏移,而不是像上面的差分器那样的预测滤波器。
如果噪声或数据具有一定的周期性和/或具有明显的频率特征,则可以使用线性预测编码线性预测(LPC),它试图预测一个未来的值,这样你只需要对少量的LPC系数加上一个小的误差信号进行编码。使用正确的数据,这可以显着减少编码的值,并使可变长度编码更有效。然而,这种方法只适用于某些类型的信号。
最后,有效地实现可变长度编码将取决于正在编码的值的直方图。理想情况下,您将获得代表性数据集作为参考,然后计算每个值出现的概率,并使用公式ideal_number_of_bits = -log 2其中x是要编码的特定值,和p(x)是数据集中给定值等于x的概率。位可以用作创建最佳编码方案的指南,因为您想要使用位数来编码给定值x。实际上,ideal_number_of_bits不是整数,并且您必须从理想值调整值。有许多方法可以导出方案,我不会在这里列出他们的名单。
12位加速度计数据的可变长度编码的简单示例如下:
如果值在-120(0 b10001000)和119(0 b 01110111)之间,则将值编码为单个字节。如果值超出此范围,则使用2个字节:
负数是|1 0 0 0 0 b10 b9 b8||b7-b0|
正数是|0 1 1 1 1 b10 b9 b8||b7-b0|
其中,上面示出了2个字节中的位,并且被编码的值具有位b10-b 0加上符号位,并且该数字是2的补码数。
例如,我有一个数据集,其最佳字长范围为12位加速度计数据的5到22位,但我可以使用字节对齐方案获得90%的压缩率(大约50%的压缩对熵极限/理论最大压缩的45%)字节对齐的方案将更容易实现并且更快执行。
您的里程,即压缩比,将根据数据的直方图而变化。

相关问题