目的:
在尽可能多地保留特征信息的同时减少计算量和内存消耗。代码注释详细,且已经封装为函数,可以直接调用,故不多做解释。
代码:
main.m
load tol_data_1.mat
time_series = tol_data(1,1,:);
time_series = time_series(:);
% 原始数据
figure
plot(time_series)
xlabel('时间')
ylabel('Y')
title('原始时序序列')
% PAA方法压缩
original_time_series = time_series;
compressed_time_series = paa_compress(original_time_series, 224);
% 压缩后的图像
figure
plot(compressed_time_series)
xlabel('时间')
ylabel('Y')
title('压缩时序序列')
paa_compress.m
%% PAA算法将原始红外特征序列映射为长度为224的短序列
function compressed_series = paa_compress(time_series, reduced_length)
% 定义一个函数paa_compress,接受两个参数:原始时序序列和要缩短至的长度
original_length = length(time_series);
% 获取原始时序序列的长度
if original_length <= reduced_length
% 如果原始序列长度小于等于要缩短至的长度
compressed_series = time_series;
% 则将压缩后的序列设为原始序列本身
else
compression_ratio = floor(original_length / reduced_length);
% 计算压缩比,即将原始序列分为几个等距段
compressed_series = zeros(1, reduced_length);
% 创建一个长度为reduced_length的全零数组,用于存储压缩后的序列
for i = 1:reduced_length
% 循环reduced_length次,依次计算每个等距段的平均值
segment = time_series((i-1)*compression_ratio+1 : i*compression_ratio);
% 根据当前段号和压缩比计算当前等距段的起始索引和结束索引,获取该段数据
compressed_series(i) = mean(segment);
% 计算当前段的平均值,并将其存储至压缩后的序列中
end
end
end