Delta压缩,将matlab代码移植到python

2024-09-30 22:11:05 发布

您现在位置:Python中文网/ 问答频道 /正文

以下matlab函数对编码的信号进行解码:

% Method      : DeltaCompression
% Description : Decode delta compressed signal
%
function data = DeltaCompression(file, data)

if ftell(file) == -1
    data.Time = [];
    data.Signal = [];
    return;
else
    fseek(file, 0, 'eof');
    stop = ftell(file);

    fseek(file, data.DataOffset, 'bof');
    start = ftell(file);
end

signal = zeros(round((stop-start)/2), 1);
buffer = zeros(4, 1);
index = 1;

while ftell(file) < stop

    buffer(1) = fread(file, 1, 'int16', 'b');
    buffer(2) = buffer(4);

    if bitshift(buffer(1), 12, 'int16') == 0
        signal(index:end) = [];
        break
    end

    for i = 1:bitand(buffer(1), 4095, 'int16');

        buffer(3) = fread(file, 1, 'int16', 'b');

        if buffer(3) ~= -32768
            buffer(2) = buffer(2) + buffer(3);
        else
            buffer(2) = fread(file, 1, 'int32', 'b');
        end

        signal(index) = buffer(2);
        index = index + 1;
    end

    buffer(4) = buffer(2);
end

我正在尝试将这些代码移植到python。下面是一个工作示例:

^{pr2}$

我在试着解码delta编码的数据。我几乎确定delta解压应该可以工作,但我不确定我是否正确地解析了二进制文件。 以下是指向二进制文件的链接:https://www.dropbox.com/s/b7p3l2wn2iaen5z/VWD1A.ch?dl=0

matlab函数做了一些我不理解的奇怪的事情。你能给我解释一下matlab函数在做什么吗?我应该从哪里开始把它移植到python(我对matlab一无所知)?在

以下是预期结果的图片(我现在不介意轴的值,我只想看到这一个峰值):

enter image description here


Tags: 函数编码dataindexsignalifbufferfile