利用LMS Test.lab或者matlab进行信号处理
本帖最后由 luca_fr 于 2013-11-5 22:15 编辑我获得了一组振动加速度实验数据(实验数据不是LMS Test.lab测出的,现在只是导入matlab中,mat格式),现在想进行实验数据处理,只知道大致的过程:滤波,去噪,平滑,加窗函数,FFT,自谱,互谱,但是不会具体操作?现在想导入软件LMS Test.lab进行这组数据信号的处理,可以实现吗?如何操作/
如果谁会在matlab中进行信号处理也可以教我一下,我也愿意学习。或者在软件LMS Test.lab处理,知道一下操作的步骤都可以?
希望会的人帮忙一下,估计好多人跟我遇到一样的问题,如何进行信号的处理。建议大家讨论一下!!!
PS:数据量庞大,仅附上前1024个数据,以供模拟用。如果需要在计算自谱,互谱时需要平均,有需要的再添加。关键还是学会方法。
本帖最后由 江树空 于 2013-11-12 17:07 编辑
你是西工大的么?是的话咱俩校友!
1、如果你要用LMS处理的话,有一个方法就是你可以先通过LMS将你以前通过LMS采集的试验数据导出一组mat格式的时域数据,然后用matlab打开,将你要处理的试验数据在matlab的workspace里面替换并保存,然后再用LMS打开。不过此方法LMS只能进行简单的处理(如功率谱等),如果涉及到参考通道如互谱,FRF等则因为无法选择参考通道而无法处理;
2、不知道你要进行什么运算,关于LMS的内部算法鄙人还是比较了解的,因为我是从事声信号处理算法的,之前写的算法也都是拿LMS验证的,都能与之完全重合。如果你现在还需要matlab算法的话,我抽时间给你发过去 本帖最后由 luca_fr 于 2013-11-13 10:20 编辑
江树空 发表于 2013-11-12 17:01 static/image/common/back.gif
你是西工大的么?是的话咱俩校友!
1、如果你要用LMS处理的话,有一个方法就是你可以先通过LMS将你以前通过 ...
学长好,{:{05}:}。
试验是在623所做的,数据是mat格式的,包括试验件表面若干测点的加速度时域信号(每一通道数据量是31234396,采样频率64khz),试验件舱内的声压信号,现在我想对这些数据进行处理,具体想通过以下步骤,平滑,滤波,加窗,FFT,谱分析,自谱,互谱,相干,分析(自己对信号处理的了解罗列的),但具体在matlab中不会操作,还望指导一下。
自己本想偷懒,想直接导入LMS.TEST进行数据处理,看来有点太天真了,呵呵,这两天看了一下,lms只支持自己的数据和通用格式unv,uff格式,顿时,我就不说了(好像据说,可以把mat数据转换成unv格式,通过matlab,这就不会了)。。。。你说的lms.test导出mat数据导入matlab,替换,然后保存,不太了解,还是保存成mat格式吗,那样lms.test就不能读取了呀。
前面对数据处理了一下,也没有平滑、加窗等,但是峰值出现的位置跟实测试验件的固有频率完全不吻合,与virtual.lab模拟出的结果也差太多,所以想系统的处理一下数据(给你一组数据,具体如何一步步处理,得到想要的结果)。
学长,如果你对信号处理比较了解,可以指导我一下,我觉得matlab处理信号必须得学会,我的QQ邮箱:605099813@qq.com。先谢谢了 本帖最后由 江树空 于 2013-11-13 12:58 编辑
luca_fr 发表于 2013-11-13 09:47 static/image/common/back.gif
学长好,。
试验是在623所做的,数据是mat格式的,包括试验件表面若干测点的加速度时域信号 ...
LMS是可以读取.mat格式的数据的,不过他要求.mat内部的数据结构是它能识别的,简单说就是你得有先有LMS采集的任意时域数据,将这时域数据导出一组.mat格式的,然后用matlab打开,打开后数据基本为结构体类型,更改数据的一些属性,包括采样时间间隔,最重要是将yvalues中的数据替换,然后保存,再在LMS的navigate里面展开文件夹直至你的.mat数据,然后可以直接在拖放至前后图中进行简单的condition,也可以添加进inputbasket然后进行后处理。我今天没带个人电脑,明天我做个范例发你
原来都是搞信号处理的校友 江树空 发表于 2013-11-13 12:56 static/image/common/back.gif
LMS是可以读取.mat格式的数据的,不过他要求.mat内部的数据结构是它能识别的,简单说就是你得有先有LMS采 ...
好的,谢谢。你不是说在lms.TEST中不能进行更多的后处理。所以你能不能同时跟我分享一下matlab处理信号的算法,想学会,以后就可以自己处理了。 zhuguanwen 发表于 2013-11-13 14:33 static/image/common/back.gif
原来都是搞信号处理的校友
嗯嗯。你也是搞信号处理的。。。matlab处理信号是一项大工程,每次试验都是软件自动处理,现在想学一下软件内部的算法,自己处理。 本帖最后由 江树空 于 2013-11-13 23:02 编辑
替换数据范例程序如下(为什么这样写详见附件文档):
clear
clc
load('CH3.mat')
%先生成一个仿真信号
fs=2000;
T=1/fs;
L=5*fs;
t=(0:L-1)*T;
sig=sin(2*pi*500*t); %生成一个500Hz的正弦信号(要保证其是行向量)
%开始替换数据
n_1.x_values.increment=T;%替换采样时间间隔
n_1.x_values.number_of_values=L;%替换数据长度
n_1.y_values.values=sig;%替换信号
save('abcd.mat','n_1')
luca_fr 发表于 2013-11-13 14:53 static/image/common/back.gif
好的,谢谢。你不是说在lms.TEST中不能进行更多的后处理。所以你能不能同时跟我分享一下matlab处理信号的 ...
只要不涉及到参考通道如互谱、传函,其他的常用数据处理如自谱、滤波等还是能处理的。至于每一种处理方法也不是三两下能说清楚的,这个只能慢慢来了。其实只要掌握了matlab中FFT如何处理信号,其他的就都好说了。matlab中对数据FFT后如何能得到与LMS一致的频谱,这个有空再告诉你。 本帖最后由 luca_fr 于 2013-11-14 22:07 编辑
江树空 发表于 2013-11-13 23:14 static/image/common/back.gif
只要不涉及到参考通道如互谱、传函,其他的常用数据处理如自谱、滤波等还是能处理的。至于每一种处理方法 ...
今天搞了一下,确实行了,这里的功率谱PSD应该就是自功率谱密度吧;不过只能求滤波,FFT,平均功率谱,对于处理完的数据如psd再导入matlab进行显示也是不方便,对于内部的函数算法还是不太了解,不清楚具体的算法(还是希望你有时间能教一下)。我添加了自己实测的数据,感觉处理的还是不好。对于我的这个时域加速度信号,经过FFT变化后,峰值还不是出现在固有频率处;还有自功率谱密度,除了解释峰值频率处的能量高外,还能解释其他东西吗?(疑问:对于实测加速度时域信号处理,难道仅仅只是反应结构在固有频率处出现峰值吗?还有其他可以解释的东西吗?除了能测振型,传函,参数识别外)。好多搞损伤识别,EMD,HHT,小波。。。
我这里也有段对于不同类型,text数据导入lms.test进行处理的程序,跟你有异曲同工之处(这个是针对不同的lms.test类型进行替换)。 luca_fr 发表于 2013-11-14 22:05 static/image/common/back.gif
今天搞了一下,确实行了,这里的功率谱PSD应该就是自功率谱密度吧;不过只能求滤波,FFT,平均功率谱, ...
首先你的最开始贴出的信号,我不知道是测什么得出的,再就是采样率你也没说,所以你上面提到的几个问题,我也无从解释。
今天我就简单说一下如何用matlab计算稳态信号的频谱(线性谱),自谱密度,其中包括如何加窗函数以及如何修正加窗后的影响。clear
clc
%生成仿真信号,用于下面的信号运算演示
fs=5000;
T=1/fs;
L=10*fs;
t=(0:L-1)*T;
x=sin(2*pi*300*t)+2*sin(2*pi*1000*t)+3;
% %开始替换数据
% load('CH3.mat')
% n_1.x_values.increment=T;%替换采样时间间隔
% n_1.x_values.number_of_values=L;%替换数据长度
% n_1.y_values.values=x;%替换信号
% save('abcde.mat','n_1')
%加窗
win=hann(L); %这里选用汉宁窗,你可以使用任意窗函数
x1= x'.*win; %加窗
%fft运算
X=fft(x1);
AX=abs(X/sum(win)); %幅值归一化并对加窗修正
%双边谱转单边谱
SAX(1)=AX(1);
SAX(2:L/2+1)=2*AX(2:L/2+1);
%计算频率轴
f=fs/2*linspace(0,1,L/2+1);
subplot(3,1,1)
plot(f,SAX)
axis()
title('线性谱')
%计算功率谱密度
%1、周期图法
=periodogram(x,win,L,fs);
pxx1(1)=pxx1(1);
pxx1(2:L/2+1)=2*pxx1(2:L/2+1);
subplot(3,1,2)
plot(f1,pxx1)
axis()
title('周期图法-自谱密度')
%2、平均周期图法
nfft=5000;%设置每一次变换长度
noverlap=2500;%设置重叠点数
win1=hann(nfft);
=pwelch(x,win1,noverlap,nfft,fs);
pxx2(1)=pxx2(1);
pxx2(2:nfft/2+1)=2*pxx2(2:nfft/2+1);
subplot(3,1,3)
plot(f2,pxx2)
axis()
title('平均周期图法-自谱密度')
从计算结果来看与LMS结果完全吻合,实际上这组仿真信号也很简单,不用和LMS对比,也能知道结果的准确性
江树空 发表于 2013-11-16 14:00 static/image/common/back.gif
首先你的最开始贴出的信号,我不知道是测什么得出的,再就是采样率你也没说,所以你上面提到的几个问题, ...
程序我都理解了,真心感谢学长。还有三点疑惑:
1.在谱平均处理中,变换长度及重叠点数,这两个参数与所选取的测试点数还有所关注的研究频率有何关系,我的采样频率是64KHz,所研究的频率范围为20-10000hz,采样时间30s,试问这里选取测试点数,变换长度,重叠点数,三个参数应该取多少合适?
2.对于加速度时域信号,进行Averaged FFT处理后,得到加速度频谱,如何求取加速度均方根值呢?是对加速度频谱对频率求积分?
3.对于问题2,在进行Averaged FFT处理时,选择peak我知道是得到峰值,选择rms呢,如何理解,是对一段频率求取的均方差吗?看到每一个频率还是对应一个值,这不太容易理解。对于lms。test均方差是如何计算的?还有纵坐标的单位是如何规定的? 本帖最后由 江树空 于 2013-11-23 23:14 编辑
1、变换长度决定你的频率分辨率,频率分辨率=采样率/变换长度;在平均谱处理技术中,重叠点数决定时间窗的滑动距离(想想STFT的原理你就明白了),进而决定你可以平均多少次;至于如何取变换长度和重叠点数呢,首先要看你的分析信号有多长,看其能否满足你的分析需要,我一般喜欢使频率分辨率为1Hz,因此变换长度等于采样率,如果信号够长,重叠点数为0,如果信号不够长,那就得适当增加重叠点数,重叠点数越多,平均次数也越多,当然计算量就增大了,计算速度变慢。如你所说的信号有30秒,变换长度=fs,就算重叠率为0,也能平均30次,足够了。1.1信号1秒都不到,只好牺牲频率分辨率,变换长度取采样率一半(nfft=fs/2),重叠率(overlap)尽量大一点,overlap=75%就能平均5次,尽量不要小于75%;
1.2信号长度若大于1秒但不是大太多,变换长度取采样率(nfft=fs),重叠率适当选取即可;
1.3信号长度若远大于1秒,变换长度取采样率(nfft=fs),重叠率为0。
如果不是特殊分析情况,我一般习惯按以上三种情况设置变换长度和重叠长度,尽量保证能至少平均5次。
2、第二点你说的我不知道你说的是不是全频段的的均方根值(因为谱的表达形式有多种,就是每一个频点都有peak或rms两种表达,对于功率谱,peak是rms的两倍)。如果是说全频段的均方根值的话,加速度信号也好,声信号也罢,其计算方法都跟全频段求总声压级的方法一样,进行能量叠加即可;
3、你说的第三点,应该就是上面第二点中我括号里说的,对与功率谱,直流分量的peak和rms是相等的,其余频点peak是rms的2倍;对于幅值谱,直流分量的peak和rms是相等的,其余频点peak是rms的sqrt(2)倍。至于纵坐标单位,那看你进行的什么计算,幅值谱当然是你的分析的时域信号的单位(pa、m/s^2、V等等);功率谱是分析的时域信号的单位的平方;功率谱密度是分析的时域信号的单位的平方/Hz,等等
我也在找这个东西 学习了,信号处理很有意思