【信号预处理】基于matlab的振动信号预处理仿真

1.软件版本

matlab2010b

2.本算法理论知识

1 气缸盖压振动是多种激励力作用的结果,由于各个激励力的时间间隔性,可以通过时域加窗来提取缸盖有气缸压力引起的振动响应信号。

2 时域统计平均技术:从混有噪声干扰的信号中提取有用信号的技术。

3 平滑处理

4 等曲柄转角化和信号重采样:把振动信号也转化成横坐标是角度-360—360,纵坐标是加速度。与相应的压力信号进行对应。

5 频域分析(傅里叶):

分别对他们做横坐标是频率的转化,然后看压力主要分布在哪个频率范围内。

6 低通滤波:根据上面得出的频率范围,设计滤波器,提取压力所对应的振动信号,说明为什么选用这个滤波器,滤波器的幅相频响应曲线。

7 小波分析:经小波包分解后,可以得到不同频带、不同时刻下缸盖振动响应信号的小波包系数,也就能够分析出不同激励源振动响应信号所包含的频率信息,以及不同频率下振动响应信号的能量。

  1. 传递函数法

  1. RBF

转速/工况

1

2

3

4

5

1000

0%

25%

50%

75%

1500

0%

25%

50%

75%

100%

1800

0%

25%

50%

75%

100%

网络以振动信号作为输入,压力信号作为输出。以转速为基准,一共三组,每一组以1、2、4、5工况下的数据为样本,用3(负荷50%)的数据进行测试。

  1. 局域波法

原理在所给文章的的第二部分,也就是对与处理后的振动信号先进行希尔伯特分析,得到信号的幅值信息,然后根据局域波分解理论,对赋值函数进行局域波分解可得多个基本模式分量和一个趋势模式分量,而这个趋势模式分量体现了幅值函数的主要幅值信息,也是气缸压力的变化信息,称为识别压力。为了使两者具有可比性,把识别压力波形的单位和最大值归化为实测压力的单位和最大值。

3.部分源码

clc;
clear;
close all;
warning off;
addpath 'func\'

%针对不同采样率的信号可能需要你手动调整的一些参数
%针对不同采样率的信号可能需要你手动调整的一些参数
%******加窗的长度******************************************
N      = 512;
%******时域统计平均技术的采样次数***************************
K      = 16;
%1000:10 , 10 , 10 , 35
%1500:10 , 12 , 12 , 11 , 10
%1800:10 , 13 , 16 , 16 , 16

%******平滑宽度********************************************
LL     = 3; 
flag   = 0;%是否需要平滑,个人觉得这里不进行平滑效果更好
%******压力点判决门限***************************************
KK     = 5.5;
%1000:5.5 , 6.5 , 6.5 , 5
%1500:6   , 9   , 9   , 6   , 6
%1800:5.5 , 7   , 7   , 5.5 , 5.5
%******选择第几段信号***************************************
NO_    = 20;
%******滤波器的截止频率和采样频率的倍数**********************
SS     = 32;
%******设置信号采样率***************************************
Fs     = 1000;

%%
%调用信号
%调用信号
%调用压力信号
Preasure  = xlsread('EXCELer\pressure\p1800-100.xls','Sheet1','A3:B722');  
%调用振动信号
vibration = xlsread('EXCELer\vibration\v1800-100.xls','Simulated Signal','A1:A65535');  
%%
%调用预处理函数
y = func_signal_process(N,K,LL,KK,NO_,SS,Fs,Preasure,vibration);
 
figure;
plot(y);
title('预处理之后截取的信号');


%%
%%传递函数法进行识别
L    = length(y);
NFFT = 2^nextpow2(L);  
y2   = fft(y,NFFT);
f    = Fs/2*linspace(0,1,NFFT/2+1);
 
P    = Preasure(:,2)';
L    = length(P);
NFFT = 2^nextpow2(L);  
P2   = fft(P,NFFT);
f    = Fs/2*linspace(0,1,NFFT/2+1);

%计算传递函数
H   = y2./P2;
%计算H的幅值和相位
magH= abs(H);        %信号的幅值 
angH= angle(H);      %信号的相位 

f   = Fs/2*linspace(0,1,NFFT/2+1);

figure;
subplot(211);plot(f,magH(1:length(f)));title('信号幅值'); 
subplot(212);plot(f,angH(1:length(f)));title('信号相位'); 



%下面是根据构造的H,对任意几个振动信号进行识别,这里选择了任意的2个进行识别
%下面是根据构造的H,对任意几个振动信号进行识别,这里选择了任意的2个进行识别
%%
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
y_sb1 = func_signal_process(N,K,LL,KK,19,SS,Fs,Preasure,vibration);


L    = length(y_sb1);
NFFT = 2^nextpow2(L);  
y2_sb1   = fft(y_sb1,NFFT);
 

%识别压力为:
Psb     = y2_sb1./(H);
%IFFT变换,恢复出压力信号
P_real  = ifft(Psb,NFFT);


figure;
KER = 360;

plot(-KER+1:KER,P,'r');
title('实际测试信号');
hold on
plot(-KER+1:KER,P_real(1:length(P)),'b--');
title('识别信号');
hold on
legend('实际测试信号','识别信号');
 






%%
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
y_sb1 = func_signal_process(N,K,LL,KK,12,SS,Fs,Preasure,vibration);


L    = length(y_sb1);
NFFT = 2^nextpow2(L);  
y2_sb1   = fft(y_sb1,NFFT);
 

%识别压力为:
Psb     = y2_sb1./(H);
%IFFT变换,恢复出压力信号
P_real  = ifft(Psb,NFFT);


figure;
KER = 360;

plot(-KER+1:KER,P,'r');
title('实际测试信号');
hold on
plot(-KER+1:KER,P_real(1:length(P)),'b--');
title('识别信号');
hold on
legend('实际测试信号','识别信号');


4.仿真结论

原始提取的信号

加窗处理,这里使用的是hamming

时域平均统计处理

时域平均统计处理之后,平滑之后的处理

截取的信号,FFT变化之后,滤波后的信号,以及滤波之后的频谱信号

小波变化之后的频谱分析:

我们最后得到的仿真结果如下所示:

A28-02

  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值