landzenki 发表于 2011-9-5 09:03

求助 用matlab分析一组信号数据 关于相位差的问题

本帖最后由 landzenki 于 2011-9-5 09:06 编辑

分析一组表面波数据,但本身不是学信号的,突然接到这个任务,
自己的相关的信号和matlab知识都是零基础,自学了很久也没有进展,还望指点啊 急死我了
这是我写的编码,完全不知道写的对不对啊

clear all; close all;
%data testing

m=xlsread('E:\test\test1.xlsx'); %读取数据
L=length(m); % 数据长度 (4096个)
fs=L/m(L,1); %采样频率 (数据采集时间约 0.006552s)
n=0:L-1;
f=n*fs/L; %频率域坐标序列
D=0.3;%两接收器间距0.3米

%Definition of signal x(n)
t1=m(:,1);%time
x1=m(:,3);%accelerometer1
x2=m(:,4);%accelerometer2
x3=m(:,2);%force
figure(1);
subplot(221);plot(t1,x1);grid on
title('accelerometer1');
subplot(223);plot(t1,x2);grid on
title('accelerometer2');
subplot(222);plot(t1,x3);
title('force');



%Fourier transformation
figure(2)
Y1=fft(x1);
%Y1=Y1(Y1>5);
mag=abs(Y1)/(L/2); %real amplitude
subplot(211);plot(f(1:L/2),mag(1:L/2));grid on %unilateral spectrum
title('frequency domain y1')
xlabel('Frequency(Hz)');
ylabel('Amplitude');
Y2=fft(x2);
mag=abs(Y2)/(L/2);
subplot(212);plot(f(1:L/2),mag(1:L/2));grid on
title('frequency domain y2')
xlabel('Frequency(Hz)');
ylabel('Amplitude');



%phase
figure(3)
phase1=angle(Y1);
phase11=mod(phase1*180/pi,360);
subplot(211);plot(f(1:L/2),phase1(1:L/2));grid on;
title('phase y1');
xlabel('Frequency(Hz)');
ylabel('Phase');
phase2=angle(Y2);
phase22=mod(phase2*180/pi,360);
subplot(212);plot(f(1:L/2),phase1(1:L/2));grid on
title('phase y2');
xlabel('Frequency(Hz)');
ylabel('Phase');

这个图看起来很乱啊




%unwrap phase
figure(4)
p1=unwrap(phase1);
subplot(121);plot(f(1:L/2),p1(1:L/2));grid on
title('p1');
p2=unwrap(phase2);
subplot(122);plot(f(1:L/2),p2(1:L/2));grid on;
title('p2');

解卷之后的下图,是不是只有那段平滑的斜线才有分析价值?如果是的话,如何删掉没有用的数据呢?方便后面的分析




%cross power spectrum
figure(5)
PYY=conj(Y1).*Y2;
subplot(121);plot(f(1:L/2),PYY(1:L/2));
xlabel('Frequency(Hz)');
ylabel('PSD');
title('cross power spectrum');
p=p1-p2;
tf=p'./(f*2*pi); %travel time
V=D./tf; %phase velocity
W=V./f; %wave length
subplot(122);plot(V,W,'*');
axis ij
title('phase velocity-wavelength curve');
xlabel('phase velocity(m/s)');
ylabel('wave length(m)');



相关文献中做出的结果如下图,和上图右边那个相比差了好多



图有些不清楚,不知道怎么弄啊只好把我截取下来的图和编码打成一个压缩包顺便发上来了


谢谢大家



landzenki 发表于 2011-9-5 14:54

自己顶一下……高手来指点呀! {:{19}:}

landzenki 发表于 2011-9-5 21:43

555没人来呢 自己顶起
截至目前自己研究的结果仍毫无进展
{:{39}:}

yangzj 发表于 2011-9-14 09:25

能不能先介绍下背景呢?看起来是测传函,是想得到固有频率再计算其他东西吗?

landzenki 发表于 2011-9-14 16:51

回复 4 # yangzj 的帖子

背景怎么讲呢,是有关测量混凝土内部结构的,但基本用到的都是信号分析,简单的说是在 用重物击打某一个定点“x”,在距离“x”点 长度D和2D的位置设置2个信号接收器。
得到的原始数据是与时间有关的
做fft后可以大致了解信号频率,幅度等数据
解卷那部分不知道有没有实质作用,目前只是做出来看一看
这个例子里 根据频率幅度谱,得知主要针对频率小于(0.5*10^5)hz的那部分数据,求取相位差
进而通过相位差和2信号接收器的间距,求出不同频率成分的传播时间
再求出表面波速度和波长,做出表面波速-波长的图

简单说是 这个信号含有很多频率,要求除每种频率成分的相位差-->相速度-->波长

不同波长的表面波传播深度是不同的,之后用这个图对比数据库中 理想样本的表面波速-波长图,分析实际被测结构内部缺陷的位置

例如附件中最后一个图 波长在0.3m-0.4m之间出现了断点,内部结构为这部分波长所能传播的深度部分 是有缺陷的

最近还有新发现的问题,之间看文献中给出的是图是phase velocity/wave lenght
这个应该是相速度-波长的关系

可是文献中提到的方法,最后求出的图叫 surface wave velocity- wave length 这个应该是表面波速度-波长关系图 有点迷惑

另外相位差是在-pi 至 pi之间的,如果不解卷的话,用phase difference/(f*2*pi),得到的不一定是正确的传播时间,因为phase difference 可能是theta+2*k*pi

但解卷之后,求出的相位差出奇的大,初步考虑是对无意义数据也进行了解卷绕,每次都增加2*pi的原因,目前还不知道如何解决。

现在看来整个程序都存在不少问题,我这半路出家的和尚,有时候要发现并修正一个很小的语句错误都要很久……再有些根本不知道错在哪里相当的头大。0基础起步,这个程序从开始学习matlab,到研究基本的信号分析,和表面波分析,写到这一步都花了小半年了还是没个成果……相当的受打击……


页: [1]
查看完整版本: 求助 用matlab分析一组信号数据 关于相位差的问题