基于Wi-Fi CSI的摔倒检测(二):CSI数据预处理之离散小波变换
16523 打赏
技术凯 2020-12-21 18:30:47

1小波变换的特点及适用性

  相较于传统去噪声方法,小波去噪的原理简单,计算速度快。因为有离散小波变换的快速计算方法。所以在这种实时性要求较高的检测系统中更适合使用。由于小波变换的基函数是有尺度区分的,所以其时域和频域分辨率都是可调的,根据使用者对信号分析的要求进行参数的选择和调节。从性能上来说小波去噪很好的保留了信号的原始特征,在滤除噪声后能很好地凸显信号的特征方便后续提取摔倒信息。

2小波变换的原理以及步骤:

有很多种基于小波变换的去噪方法。本节我们主要讲两种去噪方法: 1 重构法 2非线性小波变换阈值法 小波变换去噪:小波变换将原始信号分解为低频和高频分量,然后将高频系数设为0,然后反变换,恢复去噪后的信号。

3具体实现以及效果

1、基于非线性小波变换软阈值法

小波去噪[xd,cxd,lxd]=wden(x,tptr,sorh,scal,n,'wname')  式中:输入参数x 为需要去噪的信号; tptr :阈值选择标准.     1)无偏似然估计(rigrsure)原则。它是一种基于史坦无偏似然估计(二次方程)原理的自适应阈值选择。对于一个给定的阈值t,得到它的似然估计,再将似然t 最小化,就得到了所选的阈值,它是一种软件阈值估计器。    (2)固定阈值(sqtwolog)原则。固定阈值thr2 的计算公式为:thr 2log(n) 2 = (6)式中,n 为信号x(k)的长度。   (3)启发式阈值(heursure)原则。它是rigrsure原则和sqtwolog 原则的折中。如果信噪比很小,按rigrsure 原则处理的信号噪声较大,这时采用sqtwolog原则。   (4)极值阈值(minimaxi)原则。它采用极大极小原理选择阈值,产生一个最小均方误差的极值,而不是没有误差。2.sorh :阈值函数选择方式,即软阈值(s) 或硬阈值(h). 

scal :阈值处理随噪声水平的变化,scal=one 表示不随噪声水平变化,scal=sln 表示根据第一层小波分解的噪声水平估计进行调整,scal=mln 表示根据每一层小波分解的噪声水平估计进行调整. n 和wname 表示利用名为wname 的小波对信号进行n 层分解。

输出去噪后的数据xd 及xd 的附加小波分解结构[cxd,lxd].

经过对比测试我们在本信号中发现。 参数设置为 'heursure','s','one',10,'sym3' 效果最好。 效果:我们先随机选取一根天线的载波进行观察: 如图为第二根天线第30跟载波的降噪效果: 代码如下:

clear  all
clc
csi_trace = read_bf_file('sample_data/logfallr111.dat');
pac_nEm=size(csi_trace,1);
subcarrier=zeros(1,990);
Hall=zeros(990,30);
Z=zeros(990,30);
Zk=zeros(990,1);
for j=30
    %·分别按照时间顺序导入第j个子载波的990个值    for i=1:990;
    csi_entry=csi_trace{i};
    csi=get_scaled_csi(csi_entry);
    csi1=squeeze(csi(1,:,:)).';% 30*3 complex

    csiabs=db(abs(csi1));

    csiabs=csiabs(:,2);
    csi1=csi1(:,2);
    subcarrier(i)=csiabs(j);% %10子载波幅度        
    if(subcarrier(i)>=35)
        subcarrier(i)=35;
    else if(subcarrier(i)<=1)
        subcarrier(i)=1;
    end
end
end

% %第j个子载波滤波yd=wden(subcarrier,'heursure','s','one',10,'sym3');
vs=movvar(yd,50)
figure(1)
subplot(2,1,1);
plot(subcarrier);
title('beforeDWT');
subplot(2,1,2);
plot(yd);
title('afterDWT');
figure(2)
plot(vs);
xlabel('time(s)');
ylabel('variance');
title('movvar_Origin');
hold on
Hall(:,j)=yd.';
end

若将30个载波放在一起进行对比则更加明显的发现高频杂波被滤除掉。 如果将分解级数降低到3级我们可以发现更多的高频噪声被包含进来;与此同时分解层数继续提高例如22级分解则效果并不明显:

代码如下:

clear  all
clc
 csi_trace = read_bf_file('sample_data/logfallr111.dat');
 pac_nEm=size(csi_trace,1);
 subcarrier=zeros(1,990);
 Hall=zeros(990,30);
 Z=zeros(990,30);
 Zk=zeros(990,1);
for j=1:30
    %分别按照时间顺序导入第j个子载波的990个值    for i=1:990;
     csi_entry=csi_trace{i};
    csi=get_scaled_csi(csi_entry);
    csi1=squeeze(csi(1,:,:)).';% 30*3 complex

    csiabs=db(abs(csi1));

       csiabs=csiabs(:,2);
       csi1=csi1(:,2);
    subcarrier(i)=csiabs(j);% 10子载波幅度        
  if(subcarrier(i)>=35)
        subcarrier(i)=35;
    else if(subcarrier(i)<=1)
            subcarrier(i)=1;
        end
    end
    end

% %第j个子载波滤波
yd=wden(subcarrier,'heursure','s','one',10,'sym3');
subplot(2,1,1)
plot(subcarrier);
title('before DWTfilter');
hold on
subplot(2,1,2);
plot(yd);
title('after DWTfilter');
hold on

Hall(:,j)=yd.';
end

分解层次不同的对比部分代码:

yd=wden(subcarrier,'heursure','s','one',2,'sym3');
yd1=wden(subcarrier,'heursure','s','one',10,'sym3');
yd2=wden(subcarrier,'heursure','s','one',22,'sym5');
subplot(2,2,1)
plot(subcarrier);
title('before DWTfilter');
hold on
subplot(2,2,2);
plot(yd);
title('after_2level_ DWTfilter');
hold on

subplot(2,2,3);
plot(yd1);
title('after_10level_ DWTfilter');
hold on
subplot(2,2,4);
plot(yd2);
title('after_22level_ DWTfilter');
hold on

(2)使用重构法进行去噪,直接提取小波变换后最后一层的近似系数来提取图像的特征。 代码如下:

clc
clear all
warning('off')
csi_trace = read_bf_file('sample_data/logfalls11.dat');
subcarrier=zeros(3,990,30);
for k=1:3
for j=1:30
for i=1:990
    csi_entry = csi_trace{i};%依次读各组数据包,为了平均
    csi = get_scaled_csi(csi_entry);
    csi=csi(1,:,:);%1*3*30
    csi1=squeeze(csi).';% 30*3 complex

    csiabs=db(abs(csi1));%30*3 double%判断该矩阵维数size(),中最小值是否为1,不是得话要选择一组作为有效值

    csiabs=csiabs(:,k);
       csi1=csi1(:,k);

    subcarrier(k,i,j)=csiabs(j);%j子载波幅度
      if(subcarrier(k,i,j)>=35)
        subcarrier3(k,i,j)=35;
    else if(subcarrier(k,i,j)<=1)
            subcarrier(k,i,j)=1;
        end
    end

end
end
end

y=subcarrier;
subcarrier1=subcarrier(2,:,17); %选择某个具体载波
X=subcarrier1';

figure(1)
subplot(2,1,1);
 plot(X); 

%通过db5小波基进行6尺度小波分解 
 [c,l]=wavedec(X,6,'db5'); 
 a1=appcoef(c,l,'db5',1);
 a2=appcoef(c,l,'db5',2); 
 a3=appcoef(c,l,'db5',3); 
 a4=appcoef(c,l,'db5',4); 
 a5=appcoef(c,l,'db5',5); 
 a6=appcoef(c,l,'db5',6); 
 figure(3); 
 subplot(6,1,1);plot(a1);title('尺度1的低频系数'); 
 subplot(6,1,2);plot(a2);title('尺度2的低频系数'); 
 subplot(6,1,3);plot(a3);title('尺度3的低频系数'); 
  subplot(6,1,4);plot(a1);title('尺度4的低频系数');  
   subplot(6,1,5);plot(a1);title('尺度5的低频系数'); 
   subplot(6,1,6);plot(a1);title('尺度6的低频系数'); 
%    
 d1=detcoef(c,l,1);
 d2=detcoef(c,l,2);
 d3=detcoef(c,l,3); 
 d4=detcoef(c,l,4); 
 d5=detcoef(c,l,5); 
 d6=detcoef(c,l,6); 
 figure(4);
 subplot(3,2,1);plot(d1);title('尺度1的高频系数'); 
subplot(3,2,2);plot(d2);title('尺度2的高频系数'); 
subplot(3,2,3);plot(d3);title('尺度3的高频系数'); 
subplot(3,2,4);plot(d4);title('尺度4的高频系数'); 
subplot(3,2,5);plot(d5);title('尺度5的高频系数'); 
subplot(3,2,6);plot(d6);title('尺度6的高频系数'); 

 d6=zeros(1,length(d6));
 d5=zeros(1,length(d5));
 d4=zeros(1,length(d4));
 d3=zeros(1,length(d3));
 d2=zeros(1,length(d2));
 d1=zeros(1,length(d1));
%  
 a1=a1';
a5=a5';
d1=d1';
d2=d2';
d3=d3';
d4=d4';
d5=d5';
d6=d6';

 cA5=appcoef(c,l,'db5',5);
 A5=wrcoef('a',c,l,'db5',5);

 figure(1);
 subplot(2,1,2),
plot(A5);
 hold on 
 title('重构信号');

结果如下:

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
评论
1个
时间排序
内容存在敏感词
    0 条记录 第 0 /
    相关专栏
    打赏作者
    易百纳技术社区
    技术凯
    您的支持将鼓励我继续创作!
    打赏金额:
    ¥1 易百纳技术社区
    ¥5 易百纳技术社区
    ¥10 易百纳技术社区
    ¥50 易百纳技术社区
    ¥100 易百纳技术社区
    支付方式:
    微信支付
    支付宝支付
    易百纳技术社区 微信支付
    易百纳技术社区
    打赏成功!

    感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

    举报反馈

    举报类型

    • 内容涉黄/赌/毒
    • 内容侵权/抄袭
    • 政治相关
    • 涉嫌广告
    • 侮辱谩骂
    • 其他

    详细说明

    审核成功

    发布时间设置
    发布时间:
    是否关联周任务-专栏模块

    审核失败

    失败原因
    备注
    Loading...
    易百纳技术社区
    确定要删除此文章、专栏、评论吗?
    确定
    取消
    易百纳技术社区
    活动规则
    • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
    • 2.发布在平台的专栏需为原创技术专栏,且社区作为首次发布的平台,在其他平台发布需注明为转载
    • 3.周任务中的专栏需要达到一定质量才会被计入完成总数中。具体以平台审核为准,如有疑问,可联系社区客服(ebainacs)。
    • 4.专栏/资料的任务以审核通过的篇数为准,每个任务数量不做累计。
    • 5.任务完成后,现金奖励直接打款到微信账户EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换。
    易百纳技术社区
    升级提醒
    升级

    恭喜您的社区称号由 升级为 “社区游民”

    同时为了感谢您对社区的支持,我们将送出xxx礼品一份, 记得领取哦~

    升级提醒
    易百纳技术社区