Reconstruct continous displacement function from FFT
5 ビュー (過去 30 日間)
古いコメントを表示
I have the time history of the displacement in X and Y of a series of points on a cantilever beam. What i'm trying to do is reconstruct a function of time of said displacement (one for each direction) for every point. To do so i'm thinking to sum a series of sinusoids deriving from an FFT done on every point once for x and once for y. I cannot obtain the desired function, it doesn't fit the original signal. J=91 refers to the 91st point, in the center of the beam, used to validate the method that later has to be expanded on every point.
clc
close all
clear all
[y1,Fs1]=audioread("video test 1.mp4");
v1=VideoReader("video test 1.mp4");
tf_1=v1.duration; %durata video che leggo in v1
y1mono=mean(y1')';
[y2,Fs2]=audioread("video test 2.mp4");
v2=VideoReader("video test 2.mp4");
tf_2=v2.duration; %durata video che leggo in v2
y2mono=mean(y2')';
if Fs1~=Fs2
if Fs2>Fs1
y2mono=resample(y2mono,Fs1,Fs2);
else
y1mono=resample(y1mono,Fs2,Fs1);
end
end
time1=linspace(0,tf_1,length(y1mono));
time2=linspace(0,tf_2,length(y2mono));
figure(1)
subplot(2,1,1);
hold on
grid minor
title(sprintf('Segnali separati'))
xlabel('Time [s]')
ylabel('Volume')
plot(time1,y1mono,'r')
plot(time2,y2mono,'g')
grid minor
[y1_all,y2_all,D]=alignsignals(y1mono,y2mono,Method="xcorr");
time_delay=abs(D)/Fs2;
time_1=linspace(0,tf_2,length(y1_all));
time_2=linspace(0,tf_2,length(y2_all));
subplot(2,1,2)
hold on
grid minor
title(sprintf('Segnali allineati con Alignsignal'))
xlabel('Time [s]')
ylabel('Volume')
plot(time_1,y1_all,'r')
plot(time_2,y2_all,'b')
grid minor
%%
load('DIC2DRefResults_C_NaN.mat');
load('DIC2DDefResults_C_NaN.mat');
Fs_1=v1.FrameRate;
Fs_2=v2.FrameRate;
NPoints=448;
NFrame_1=700;
NFrame_2=700;
t1=linspace(1,NFrame_1,NFrame_1)*(1/Fs_1);
t2=linspace(1,NFrame_2,NFrame_2)*(1/Fs_2);
for j=1:NPoints
for i=1:length(t1)
RefX(j,i)=DIC2DrefResults.Points{i}(j,1);
RefY(j,i)=DIC2DrefResults.Points{i}(j,2);
end
end
%%
tol_xr=0;
tol_yr=0;
k=25;
for i=1:NPoints
RefX_cl{i}=RefX(i,:);
RefY_cl{i}=RefY(i,:);
Mean_Xr{i}=mean(RefX_cl{i});
Mean_Yr{i}=mean(RefY_cl{i});
RefX_cl{i}=RefX_cl{i};
RefY_cl{i}=RefY_cl{i};
Displ_xr{i}=fft(RefX_cl{i});
Displ_xr{i}(1,1)=0;
Displ_yr{i}=fft(RefY_cl{i});
Displ_yr{i}(1,1)=0;
asse_freq_xr{i}=Fs_1/NFrame_1*(0:NFrame_1-1);
asse_freq_yr{i}=Fs_1/NFrame_1*(0:NFrame_1-1);
Displ_xr{i}(abs(Displ_xr{i})<tol_xr)=0; %fase della fft dopo rimozione picchi
Displ_yr{i}(abs(Displ_yr{i})<tol_yr)=0; %fase della fft dopo rimozione picchi
X_r{i}=fftshift(Displ_xr{i});
Y_r{i}=fftshift(Displ_yr{i});
theta_xr{i}=angle(Displ_xr{i});
theta_yr{i}=angle(Displ_yr{i});
freq_shift_xr{i}=linspace(-Fs_1/2,Fs_1/2,NFrame_1);
freq_shift_yr{i}=linspace(-Fs_2/2,Fs_2/2,NFrame_1);
IFT_yr{i}=ifft(Displ_yr{i});
IFT_xr{i}=ifft(Displ_xr{i});
[MPks_xr{i},Mlocs_xr{i}]=maxk(abs(Displ_xr{i}),k);
[MPks_yr{i},Mlocs_yr{i}]=maxk(abs(Displ_yr{i}),k);
end
j=91;
x{j}=@(t) Mean_Xr{j} + 0*t;
for i=1:k
onda_x=@(t) (2*(MPks_xr{j}(i))/NFrame_1)*cos(2*pi*asse_freq_xr{j}(Mlocs_xr{j}(i))*t+theta_xr{j}(Mlocs_xr{j}(i)))+(2*(MPks_xr{j}(i))/NFrame_1)*sin(2*pi*asse_freq_xr{j}(Mlocs_xr{j}(i))*t+theta_xr{j}(Mlocs_xr{j}(i))+pi/2);
x{j}=@(t) x{j}(t)+onda_x(t);
end
j=91;
y{j}=@(t) Mean_Yr{j} + 0*t;
for i=1:k
onda_y=@(t) (2*(MPks_yr{j}(i))/NFrame_1)*cos(2*pi*asse_freq_yr{j}(Mlocs_yr{j}(i))*t+theta_yr{j}(Mlocs_yr{j}(i)))+(2*(MPks_yr{j}(i))/NFrame_1)*sin(2*pi*asse_freq_yr{j}(Mlocs_yr{j}(i))*t+theta_yr{j}(Mlocs_yr{j}(i))+pi/2);
y{j}=@(t) y{j}(t)+onda_y(t);
end
%%
figure(2)
plot(t1,RefX_cl{91},'b')
title('Displacement X :camera 1')
xlabel('Time [s]')
ylabel('Amplitude')
hold on
grid minor
figure(3)
plot(t1,RefY_cl{91},'b')
title('Displacement Y :camera 1')
xlabel('Time [s]')
ylabel('Amplitude')
hold on
grid minor
figure(4)
subplot(2,1,1);
plot(freq_shift_xr{91},abs(X_r{91}));
xlim([0 60])
title('FFT of X displacement : camera 1 ');
xlabel('Frequency [Hz]')
ylabel('Amplitude')
grid minor
subplot(2,1,2);
plot(freq_shift_xr{91},theta_xr{91}/pi);
title('Phase : camera 1')
xlabel('Frequency [Hz]')
ylabel('Phase [1/pi]')
%xlim([0 60])
grid minor
figure(6)
subplot(2,1,1);
plot(freq_shift_yr{91},abs(Y_r{91}));
xlim([0 60])
title('FFT of Y displacement: camera 1')
xlabel('Frequency [Hz]')
ylabel('Amplitude')
grid minor
subplot(2,1,2);
plot(freq_shift_xr{91},theta_yr{91}/pi);
title('Phase :camera 1')
xlabel('Frequency [Hz]')
ylabel('Phase [1/pi]')
%xlim([0 60])
grid minor
%%
figure(7)
plot(t1,IFT_xr{91}+Mean_Xr{91})
title('Inverse fourier transform X : camera 1')
xlabel('Time [s]')
ylabel('Amplitude')
grid minor
figure(8)
plot(t1,IFT_yr{91}+Mean_Yr{91})
title('Inverse fourier transform Y : camera 1')
xlabel('Time [s]')
ylabel('Amplitude')
grid minor
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%555
%%
for j=1:NPoints
for i=1:length(t1)
DefX(j,i)=DIC2DdefResults.Points{i}(j,1);
DefY(j,i)=DIC2DdefResults.Points{i}(j,2);
end
end
tol_x_d=0;
tol_y_d=0;
t2=t2+time_delay;
for i=1:NPoints
DefX_cl{i}=DefX(i,:);
DefY_cl{i}=DefY(i,:);
Mean_Xd{i}=mean(DefX_cl{i});
Mean_Yd{i}=mean(DefY_cl{i});
L2_xd{i}=length(DefX_cl{i});
L2_yd{i}=length(RefY_cl{i});
asse_freq_xd{i}=Fs_2/L2_xd{i}*(0:L2_xd{i}-1);
asse_freq_yd{i}=Fs_2/L2_yd{i}*(0:L2_yd{i}-1);
Displ_x_d{i}=fft(DefX_cl{i});
Displ_y_d{i}=fft(DefY_cl{i});
Displ_x_d{i}(1,1)=0;
Displ_y_d{i}(1,1)=0;
Displ_x_d{i}(abs(Displ_x_d{i})<tol_x_d)=0; %fase della fft dopo rimozione picchi
X_d{i}=fftshift(Displ_x_d{i});
theta_x_d{i}=angle(X_d{i});
freq_shift_xd{i}=linspace(-Fs_2/2,Fs_2/2,L2_xd{i});
Displ_y_d{i}(abs(Displ_y_d{i})<tol_y_d)=0; %fase della fft dopo rimozione picchi
theta_y_d{i}=angle(Displ_y_d{i});
Y_d{i}=fftshift(Displ_y_d{i});
theta_y_d{i}=angle(Y_d{i});
freq_shift_yd{i}=linspace(-Fs_2/2,Fs_2/2,L2_yd{i});
IFT_xd{i}=ifft(Displ_x_d{i});
IFT_yd{i}=ifft(Displ_y_d{i});
end
figure(9)
plot(t2,DefX_cl{91},'b')
title('Displacement X: camera 2')
xlabel('Time [s]')
ylabel('Amplitude')
hold on
grid minor
figure(10)
plot(t2,DefY_cl{91},'b')
title('Displacement Y: camera 2')
xlabel('Time [s]')
ylabel('Amplitude')
hold on
grid minor
figure(11)
subplot(2,1,1);
plot(freq_shift_xd{91},abs(X_d{91}));
xlim([0 60])
title('FFT of X displacement: camera 2');
xlabel('Frequency [Hz]')
ylabel('Amplitude')
grid minor
subplot(2,1,2);
plot(freq_shift_xd{91},theta_x_d{91}/pi);
title('Phase: camera 2')
xlabel('Frequency [Hz]')
ylabel('Phase [1/pi]')
xlim([0 60])
grid minor
figure(12)
subplot(2,1,1);
plot(freq_shift_yd{91},abs(Y_d{91}));
xlim([0 60])
title('FFT of Y displacement: camera 2 ')
xlabel('Frequency [Hz]')
ylabel('Amplitude')
grid minor
subplot(2,1,2);
plot(freq_shift_yd{91},theta_y_d{91}/pi);
title('Phase:camera 2')
xlabel('Frequency [Hz]')
ylabel('Phase [1/pi]')
xlim([0 60])
grid minor
%%
figure(13)
plot(t2,IFT_yd{91}+Mean_Yd{91})
title('Inverse fourier transform Y : camera 2')
xlabel('Time [s]')
ylabel('Amplitude')
grid minor
figure(14)
plot(t2,IFT_xd{91}+Mean_Xd{91})
title('Inverse fourier transform X : camera 2')
xlabel('Time [s]')
ylabel('Amplitude')
grid minor
%%
Def_int_y=interp1(t2,IFT_yd{91}+Mean_Yd{91},t1);
%%
figure(15)
plot(t1,IFT_yr{91}+Mean_Yd{91},'b',t1,Def_int_y,'r'); % la media non è Yd ma Yr
figure(16)
plot(t1,x{91}(t1));
figure(17)
plot(t1,y{91}(t1));
1 件のコメント
Catalytic
2025 年 6 月 24 日
I'm afraid we've no idea what you're talking about. It is an ocean of code that does not transparently describe either the mathematics of the problem, or the solution approach.
回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!