声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4167|回复: 15

[其他] 信号去噪的方法?

[复制链接]
发表于 2016-12-22 09:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位大神,有没有哪种算法可以比较好的去除加速度传感器采集信号后,积分到速度(或位移)时,低频段的滑雪坡效应啊?
现在做管道振动,Coco80自带软件里面是将低频段直接去掉。
回复
分享到:

使用道具 举报

发表于 2016-12-23 09:21 | 显示全部楼层
你用什么软件啊
 楼主| 发表于 2017-1-6 14:41 | 显示全部楼层
sd 发表于 2016-12-23 09:21
你用什么软件啊

我想用matlab来做!
前面讲的那是仪器自带的软件
发表于 2017-1-9 09:34 | 显示全部楼层
有小波去噪  还有加窗什么的
 楼主| 发表于 2017-1-9 19:56 | 显示全部楼层
失心控 发表于 2017-1-9 09:34
有小波去噪  还有加窗什么的

能稍微详细点么?我这都是自学的
你说的这个能用于去除白噪音?

点评

这是小波去噪的程序 你可以作为参考  详情 回复 发表于 2017-1-10 08:56
发表于 2017-1-10 08:56 | 显示全部楼层
lxy159357 发表于 2017-1-9 19:56
能稍微详细点么?我这都是自学的
你说的这个能用于去除白噪音?

这是小波去噪的程序 你可以作为参考
  1. clear all;
  2. clc;
  3. load default.txt;  %装载采集的信号
  4. x= default;
  5. lx=length(x);
  6. t=[0:1:length(x)-1]';
  7.                                                      %% 绘制监测所得信号%%
  8. subplot(2,2,1);
  9. plot(t,x);
  10. title('原始信号');
  11. grid on
  12. set(gcf,'color','w')  
  13. set(gca,'fontname','times New Roman')
  14. set(gca,'fontsize',14.0)
  15.                         %% 用db1小波对原始信号进行3层分解并提取小波系数%%
  16. [c,l]=wavedec(x,3,'db1');      %sym8
  17. ca3=appcoef(c,l,'db1',3);      %低频部分
  18. cd3=detcoef(c,l,3);               %高频部分
  19. cd2=detcoef(c,l,2);               %高频部分
  20. cd1=detcoef(c,l,1);               %高频部分
  21.                                            %% 对信号进行强制去噪处理并图示%%
  22. cdd3=zeros(1,length(cd3));
  23. cdd2=zeros(1,length(cd2));
  24. cdd1=zeros(1,length(cd1));
  25. c1=[ca3,cdd3,cdd2,cdd1];
  26. x1=waverec(c1,1,'db1');
  27. subplot(2,2,2);
  28. plot(x1);
  29. title('强制去噪后信号');
  30. grid on
  31. set(gcf,'color','w')  
  32. set(gca,'fontname','times New Roman')
  33. set(gca,'fontsize',14.0)
  34.                                        %% 默认阈值对信号去噪并图示%%
  35. %用ddencmp( )函数获得信号的默认阈值,使用wdencmp( )函数实现去噪过程
  36. [thr,sorh,keepapp]=ddencmp('den','wv',x);
  37. x2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);
  38. subplot(2,2,3);
  39. plot(x2);
  40. title('默认阈值去噪后信号');
  41. grid on
  42. set(gcf,'color','w')  
  43. set(gca,'fontname','times New Roman')
  44. set(gca,'fontsize',14.0)
  45.                                    %% 给定的软阈值进行去噪处理并图示%%
  46. cd1soft=wthresh(cd1,'x',1.465);        %经验给出软阈值数
  47. cd2soft=wthresh(cd2,'x',1.823);        %经验给出软阈值数
  48. cd3soft=wthresh(cd3,'x',2.768);        %经验给出软阈值数
  49. c2=[ca3,cd3soft,cd2soft,cd1soft];
  50. x3=waverec(c2,1,'db1');
  51. subplot(2,2,4);
  52. plot(x3);
  53. title('给定软阈值去噪后信号');
  54. grid on
  55. set(gcf,'color','w')  
  56. set(gca,'fontname','times New Roman')
  57. set(gca,'fontsize',14.0)
复制代码


 楼主| 发表于 2017-1-10 09:41 | 显示全部楼层
失心控 发表于 2017-1-10 08:56
这是小波去噪的程序 你可以作为参考

多谢,我试下!
 楼主| 发表于 2017-1-10 10:04 | 显示全部楼层
失心控 发表于 2017-1-10 08:56
这是小波去噪的程序 你可以作为参考

txt文档里面只需要振动数值的序列?
 楼主| 发表于 2017-1-10 10:29 | 显示全部楼层
lxy159357 发表于 2017-1-10 10:04
txt文档里面只需要振动数值的序列?

错误使用 horzcat
串联的矩阵的维度不一致。

出错 xiaoboquzao (line 25)
c1=[ca3,cdd3,cdd2,cdd1];

这里ca3是不是应该转置?
 楼主| 发表于 2017-1-10 11:13 | 显示全部楼层
以下为修改后的程序,我运行过,没有问题了!多谢帮助
clear all;
clc;
load default.txt;  %装载采集的信号
x= default;
lx=length(x);
t=[0:1:length(x)-1]';
%% 绘制监测所得信号
subplot(2,2,1);
plot(t,x);
title('原始信号');
grid on
set(gcf,'color','w')  
set(gca,'fontname','times New Roman')
set(gca,'fontsize',14.0)
%% 用db1小波对原始信号进行3层分解并提取小波系数
[c,l]=wavedec(x,3,'db1');%sym8
ca3=appcoef(c,l,'db1',3);%低频部分
cd3=detcoef(c,l,3);%高频部分
cd2=detcoef(c,l,2);%高频部分
cd1=detcoef(c,l,1);%高频部分
%% 对信号进行强制去噪处理并图示
cdd3=zeros(1,length(cd3));
cdd2=zeros(1,length(cd2));
cdd1=zeros(1,length(cd1));
c1=[ca3',cdd3,cdd2,cdd1]';
x1=waverec(c1,l,'db1');
subplot(2,2,2);
plot(x1);
title('强制去噪后信号');
grid on
set(gcf,'color','w')  
set(gca,'fontname','times New Roman')
set(gca,'fontsize',14.0)
%% 默认阈值对信号去噪并图示
%用ddencmp( )函数获得信号的默认阈值,使用wdencmp( )函数实现去噪过程
[thr,sorh,keepapp]=ddencmp('den','wv',x);
x2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);
subplot(2,2,3);
plot(x2);
title('默认阈值去噪后信号');
grid on
set(gcf,'color','w')  
set(gca,'fontname','times New Roman')
set(gca,'fontsize',14.0)
%% 给定的软阈值进行去噪处理并图示
cd1soft=wthresh(x,'s',1.465);%经验给出软阈值数
cd2soft=wthresh(x,'s',1.823); %经验给出软阈值数
cd3soft=wthresh(x,'s',2.768); %经验给出软阈值数
c2=[ca3',cd3soft',cd2soft',cd1soft']';
x3=waverec(c2,l,'db1');
subplot(2,2,4);
plot(x3);
title('给定软阈值去噪后信号');
grid on
set(gcf,'color','w')  
set(gca,'fontname','times New Roman')
set(gca,'fontsize',14.0)

点评

原来的程序在我这可以运行啊 你改哪里了  详情 回复 发表于 2017-1-11 08:44
发表于 2017-1-10 13:10 | 显示全部楼层
可以试试高通滤波器。
 楼主| 发表于 2017-1-10 16:36 | 显示全部楼层
wanyeqing2003 发表于 2017-1-10 13:10
可以试试高通滤波器。

高通滤波器的话就不需要我这样导出来处理了,仪器自带的程序有可以选择将低于2HZ的信号直接略掉的,就是为了避免滑雪坡效应!
发表于 2017-1-10 19:43 | 显示全部楼层
lxy159357 发表于 2017-1-10 16:36
高通滤波器的话就不需要我这样导出来处理了,仪器自带的程序有可以选择将低于2HZ的信号直接略掉的,就是 ...

也可以用数字滤波处理。
发表于 2017-1-11 08:44 | 显示全部楼层
lxy159357 发表于 2017-1-10 11:13
以下为修改后的程序,我运行过,没有问题了!多谢帮助
clear all;
clc;

原来的程序在我这可以运行啊  你改哪里了
 楼主| 发表于 2017-1-14 18:38 | 显示全部楼层
失心控 发表于 2017-1-11 08:44
原来的程序在我这可以运行啊  你改哪里了

我不知道你的原始数据结构如何,我这里运行你的程序,不管是做成行数据或者列数据都不能运行,其中错误出现在c1和c2这两个变量,其结构中,行向量和列向量怎么能生成新的变量呢?

点评

哦哦 明白你的意思了 那可能是删掉了  详情 回复 发表于 2017-1-16 08:42
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-15 13:02 , Processed in 0.072222 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表