clc;
close all;
t = 0:0.01:100;
tt = 2*pi*t;
len = length(tt);
y = 41*sin(tt+30/180*pi)+2*sin(22*tt+0.2)+5*cos(10*tt)+4*(rand(1,len)-0.5);
z = zeros(1,100);
z(1) = 1;
y2 =[repmat(z,1,100),0];
figure();
plot(t,y,'b',t,90*y2-45,'r');
rb_data = [t',y',y2'];
rbdata = rb_data(1:end-35,:);
smpltime = rbdata(:,1);
vib = rbdata(:,2);
rev = rbdata(:,3);
figure()
plot(smpltime,vib,'b',smpltime,90*rev-45,'r');
fs = 100;
iNum = 4086;
fft_data = vib(1:iNum);
yy = fft(fft_data);
data_fft = abs(yy)/iNum*2;
figure()
t2 = (0:1:iNum-1)/fs;
subplot(221);
plot(t2,fft_data);
f2 = (0:1:iNum-1)/iNum*fs;
subplot(222)
plot(f2,data_fft);
y1 = yy;
y1(300:end-300+1) = 0;
x = real(ifft(y1));
subplot(223)
plot(t2,x);
subplot(224)
plot(f2,abs(fft(x)*2/iNum));
figure()
plot(smpltime(1:iNum),fft_data,'b',smpltime(1:iNum),x,'g',smpltime(1:iNum),90*rev(1:iNum)-45,'r')
rev_interval_index = find(rev>0);
rev_interval_arr = rev_interval_index(2:end)-rev_interval_index(1:end-1);
interval_max = max(rev_interval_arr);
interval_min = min(rev_interval_arr);
temp_arr = zeros(1,interval_max);
for icnt = interval_min:interval_max
temp_arr(icnt)= length(find(rev_interval_arr==interval_max));
end
base_frq_seg = max(temp_arr);
base_frq = find(temp_arr == base_frq_seg);
interval_arr = find(rev_interval_arr==base_frq);
interval = rev_interval_index(interval_arr);
arr = zeros(length(interval),base_frq);
for iNum = 1:length(interval)
arr(iNum,:)= vib(interval(iNum):(interval(iNum)+base_frq-1));
end
arr_mean= mean(arr);
figure();
plot(arr_mean,'b');
t3 = 0:0.01:0.99;
std_sin = sin(t3*2*pi);
cmp_sin = [std_sin(1:end-1),std_sin];
mytemp = zeros(100,1);
for iN = 1:100
mytemp(iN) = sin(t3*2*pi+(iN-1)/100*2*pi)*arr_mean';
end
figure
plot(mytemp);
[cmp_max_val,cmp_max_pos] = max(mytemp);
phase1 = (cmp_max_pos-1)/100*360
figure
ans_sin = sin(t3*2*pi+phase1/180*pi);
tt3= 0:99;
plot(tt3,arr_mean/max(abs(arr_mean)),'b',tt3,ans_sin,'r');
为完成,看经过滤波求相位和不经过滤波求相位的差别。