Transfer function of the highly distorted system; impact hammer testing and frequency response of the system

5 views (last 30 days)
Hello, everyone!
For couple of weeks now, I am dealing with transfer function estimation. The system which I am currently examining is highly distorted at high frequencies due to its structural dynamics. I analysed its frequency response and it is getting really messy above 2,5 kHz.
Graph - H.jpg
I want to compensate this system with the use of the transfer function. I have some input and output data (attached you will find the graph illustrating input and output signals). It has been carried out by means of the impact hammer testing. To cut the long story short: input - hammer hit, output - response of the system (oscillations).
Data.jpg
I tried to handle it with the System Identification Toolbox. What I got so far is:
2d.PNG
Could you please provide me with any hints how to get this function into time domain? The aim of my work is to reproduce the input signal without the distortions.
Thank you very much for any feedback.

Answers (1)

Raj
Raj on 4 Sep 2019
Not sure why you took the trouble of posting so much details. From what I understand, the one line question is that you have got a transfer function in 'S' domain and you want to convert this to time domain. You can use the ilaplace command to do that.
Note: You should have symbolic math toolbox in order to use this.
  7 Comments
Raj
Raj on 5 Sep 2019
Edited: Raj on 5 Sep 2019
"dividing the output signal by the transfer function in time domain" - No that is not correct! Transfer function is output/input in 'S' domain not in time domain. In time domain 'convolution' will come into picture. See this for better understanding:
Daniel
Daniel on 5 Sep 2019
Edited: Daniel on 5 Sep 2019
close all
clear all
clc
t = linspace(0,2,200000); % Sampling rate: 100 kHz; t - time [s]
t = t';
% Import the data and decrease the number of samples
input = importdata('C:\Users\Lechowicz\Desktop\input.txt', '');
output = importdata('C:\Users\Lechowicz\Desktop\output.txt', '');
% Plot the data
figure('Name', 'Original Data', 'NumberTitle', 'on');
subplot(2,1,1)
plot(t, input)
title('Input Signal');
xlabel('Time [s]');
ylabel('Force [N]');
subplot(2,1,2)
plot(t, output)
title('Output Signal');
xlabel('Time [s]');
ylabel('Force [N]');
% Estimate the transfer function and convert it to time domain
data = iddata(output, input, 0.00001);
sys = tfest(data, 3, 2);
[num, den] = tfdata(sys, 'v');
syms s
tf_s = poly2sym((num),s)/poly2sym((den),s);
% Get the transfer function into time domain
time_domain_tf = ilaplace(tf_s);
time_domain_tf = vpa(time_domain_tf);
% Create matrix of time domain transfer function
for i = (linspace(0,2,200000))'
tf_time_domain_matrix = 10.753107173906815697416094377728.*exp(-3.327484297190415992653272529398.*i) - 840.46923468767926446235542117068.*exp(-246.19890346395301270080891184263.*i).*cos(19126.216965822094847808546864243.*i) - 14175.620532280572917636521940787.*exp(-246.19890346395301270080891184263.*i).*sin(19126.216965822094847808546864243.*i);
end
% I am almost sure I messed up here
output_corrected = conv(tf_time_domain_matrix, output);
% Plot the data
figure('Name', 'Reproduced Input Signal', 'NumberTitle', 'on');
plot(linspace(0,2,length(output_corrected)), output_corrected);
title('Reproduced Output Signal');
xlabel('Time [s]');
ylabel('Force [N]');
I give up. Could you please point out where I did mistake?
As far as I understand it, by correcting my output data I should get something that looks like my input data, i.e. single impact. I can't achieve it for nuts.
I attached my data as well.
All in all, it's getting better and better! Thank you very much for your help.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!