【信号预处理】基于matlab的振动信号预处理仿真
1.软件版本
matlab2010b
2.本算法理论知识

**1****气缸盖压振动是由多种激励因素共同作用而产生的结果,在各个激励因素之间存在时间上的不规律分布的情况下,则可以通过时域加窗技术来进行相应的处理以提取出与气缸压力相关的振动响应信号。
2****时域统计平均技术:从混有噪声干扰的信号中提取有用信号的技术。
3****平滑处理
4****等曲柄转角化处理和重采样:将振动信号转化为以角度(-360°~360°)为横坐标、加速度为纵坐标的时序图,并与相应的静压传感器采集的压力信号进行对比分析。
5****频域分析(傅里叶):

对他们分别作为频率转化的横坐标轴;进而观察压力在哪些频段范围内占据主导。
采用低通滤波技术,在确定的压力频率范围内设计相应的滤波器,并对压力相关的振动信号进行采集。阐述选择该滤波器的原因,并绘制其幅相频率响应特性曲线图
7****小波域分析:在经过小波包分解的过程中**(公式...)),能够提取出不同频率分量以及不同时间点上缸盖振动响应信号的小波包系数值。(公式...)。这些数值不仅有助于识别不同激励源对其对应的频率特征(公式...),而且还能详细表征各频率分量下的能量特性(公式...)。
- 传递函数法

- 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%时的运行数据完成验证工作。
- 局域波法
**原理在所给文章的的第二部分,也就是对与处理后的振动信号先进行希尔伯特分析,得到信号的幅值信息,然后根据局域波分解理论,****对赋值函数进行局域波分解可得多个基本模式分量和一个趋势模式分量,****而这个趋势模式分量体现了幅值函数的主要幅值信息,****也是气缸压力的变化信息,****称为识别压力。为了使两者具有可比性,**把识别压力波形的单位和最大值归化为实测压力的单位和最大值。
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);
61. %计算传递函数
H = y2./P2;
%计算H的幅值和相位
magH= abs(H); %信号的幅值
angH= angle(H); %信号的相位
67. f = Fs/2*linspace(0,1,NFFT/2+1);
69. figure;
subplot(211);plot(f,magH(1:length(f)));title('信号幅值');
subplot(212);plot(f,angH(1:length(f)));title('信号相位');
73. 74. 75. %下面是根据构造的H,对任意几个振动信号进行识别,这里选择了任意的2个进行识别
%下面是根据构造的H,对任意几个振动信号进行识别,这里选择了任意的2个进行识别
%%
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
y_sb1 = func_signal_process(N,K,LL,KK,19,SS,Fs,Preasure,vibration);
84. 85. L = length(y_sb1);
NFFT = 2^nextpow2(L);
y2_sb1 = fft(y_sb1,NFFT);
90. %识别压力为:
Psb = y2_sb1./(H);
%IFFT变换,恢复出压力信号
P_real = ifft(Psb,NFFT);
95. 96. figure;
KER = 360;
99. plot(-KER+1:KER,P,'r');
title('实际测试信号');
hold on
plot(-KER+1:KER,P_real(1:length(P)),'b--');
title('识别信号');
hold on
legend('实际测试信号','识别信号');
108. 109. 110. 111. 112. 113. %%
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
%根据计算得到的H,对其他的压力信号进行识别
y_sb1 = func_signal_process(N,K,LL,KK,12,SS,Fs,Preasure,vibration);
120. 121. L = length(y_sb1);
NFFT = 2^nextpow2(L);
y2_sb1 = fft(y_sb1,NFFT);
126. %识别压力为:
Psb = y2_sb1./(H);
%IFFT变换,恢复出压力信号
P_real = ifft(Psb,NFFT);
131. 132. figure;
KER = 360;
135. 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
