# Matlab Matrix calculation coming wrong

11 views (last 30 days)
Hiril Patel on 26 Oct 2022
Commented: Hiril Patel on 27 Oct 2022
Hello,
I am working on a sensor data. I have three csv file from which I do voltage and strain calculation. After calculation of strain, when its comes to calculation of angle theta here is following condtion happening:
Condition 1: the one with correct calculations
If I take individual value(for example take value no 110 of from each variable i.e gauge1 , gauge2 and gauge3) and apply formula for performing the calculation of angle of strain I get the correct answer.
Conditon 2: the one with wrong calculated answer
However, If I apply this formula to entire matrix gauge1,2,3 I get differenent value for calculated angle. I know this one is wrong since I have calculated the values by hand and they don't match up with this condition.
I have attached csv file in order if one can help.
Thank you
Hiril
%%
clc;
clear;
% ADC and strain gauge settings
vref = 3300; % ADC reference volts
ADC_resolution = 2^24; % 2^23 24bit of resolution
A = 4; % if fsr = +/-2
pga = 128; % ADS1234 amplifier gain setting
E = 3300; % Bridge excitation in millivolts
K = 2.04; % Gauge factor
ch1 = readmatrix('C:\Users\Hiril Patel\PycharmProjects\writetofile\correct strain gauge -0.8\ch0.csv');
ch2 = readmatrix('C:\Users\Hiril Patel\PycharmProjects\writetofile\correct strain gauge -0.8\ch1.csv');
ch3 = readmatrix('C:\Users\Hiril Patel\PycharmProjects\writetofile\correct strain gauge -0.8\ch2.csv');
% Conversion to proportional millivoltage
FSR = vref/pga;
Channel1 = LSB*ch1;
Channel2 = LSB*ch2;
Channel3 = LSB*ch3;
Channel1mean = mean(Channel1(1:50));
Channel2mean = mean(Channel2(1:50));
Channel3mean = mean(Channel3(1:50));
Channel1 = Channel1 - Channel1mean;
Channel2 = Channel2 - Channel2mean;
Channel3 = Channel3 - Channel3mean;
% Strain calculation
gauge1 = (4/K)*(Channel1/E);
gauge2 = (4/K)*(Channel2/E);
gauge3 = (4/K)*(Channel3/E);
fig = figure;
subplot(3,1,1);
plot(gauge1,'.-');
title('Gauge1');
subplot(3,1,2);
plot(gauge2,'.-');
title('Gauge2');
subplot(3,1,3);
plot(gauge3,'.-');
title('Gauge3');
han=axes(fig,'visible','off');
han.Title.Visible='on';
han.XLabel.Visible='on';
han.YLabel.Visible='on';
ylabel(han,'Micro-strain');
xlabel(han,'Samples');
a = ((sqrt(2))/3)*(sqrt(((gauge1-gauge2).^2) + ((gauge2 - gauge3).^2) + ((gauge3-gauge1).^2)));
e1 = ((gauge1 + gauge2 + gauge3)/3) + a;
e2 = ((gauge1 + gauge2 + gauge3)/3) - a;
% Uptill here answers from calculation are correct.
%The problem starts after this point where entire matrix is considered for
%calculation
b = (sqrt(3))*(gauge3-gauge2);
c = ((2*gauge1) - gauge2 - gauge3);
T = b/c;
theta = (-0.5)*(atand(T));
figure;
if gauge1 > ((gauge2+gauge3)/2)
plot(theta);
elseif gauge1 < ((gauge2+gauge3)/2)
theta = theta - 90;
plot(theta)
elseif gauge1 == ((gauge2+gauge3)/2) & gauge2<gauge1
theta = - 45;
plot(theta);
elseif gauge1 == ((gauge2 + gauge3)/2) & gauge2>gauge1
theta = 45;
plot(theta);
else
plot(theta)
end

Alex Hanes on 26 Oct 2022
In Line 65, you are using mrdivide (/), when it seems you are trying to element-wise division using rdivide (./). mrdivide solves the system of linear equations for , which is why your array for T = b/c has dimension (630 x 630).
T = b./c;
Torsten on 26 Oct 2022
I hope I was able to explain clearly
Yes, but you didn't get my point (see below).

Torsten on 26 Oct 2022
Edited: Torsten on 26 Oct 2022
% Strain calculation
gauge1 = [700;300;500;500];
gauge2 = [700;300;300;700];
gauge3 = [300;700;700;300];
fig = figure;
subplot(3,1,1);
plot(gauge1,'.-');
title('Gauge1');
subplot(3,1,2);
plot(gauge2,'.-');
title('Gauge2');
subplot(3,1,3);
plot(gauge3,'.-');
title('Gauge3');
han=axes(fig,'visible','off');
han.Title.Visible='on';
han.XLabel.Visible='on';
han.YLabel.Visible='on';
ylabel(han,'Micro-strain');
xlabel(han,'Samples'); a = ((sqrt(2))/3)*(sqrt(((gauge1-gauge2).^2) + ((gauge2 - gauge3).^2) + ((gauge3-gauge1).^2)));
e1 = ((gauge1 + gauge2 + gauge3)/3) + a;
e2 = ((gauge1 + gauge2 + gauge3)/3) - a;
% Uptill here answers from calculation are correct.
%The problem starts after this point where entire matrix is considered for
%calculation
b = (sqrt(3))*(gauge3-gauge2);
c = ((2*gauge1) - gauge2 - gauge3);
T = b./c;
theta = (-0.5)*(atand(T))
theta = 4×1
30.0000 30.0000 -45.0000 45.0000
figure;
for i = 1:numel(gauge1)
if gauge1(i) > ((gauge2(i)+gauge3(i))/2)
disp(theta(i));
elseif gauge1(i) < ((gauge2(i)+gauge3(i))/2)
theta(i) = theta(i) - 90;
disp(theta(i))
elseif gauge1(i) == ((gauge2(i)+gauge3(i))/2) & gauge2(i)<gauge1(i)
theta(i) = - 45;
disp(theta(i));
elseif gauge1(i) == ((gauge2(i) + gauge3(i))/2) & gauge2(i)>gauge1(i)
theta(i) = 45;
disp(theta(i));
else
disp(theta(i))
end
end
30.0000
-60
-45
45
Hiril Patel on 27 Oct 2022
Hello, sorry to be bother again but I would like to know if I can plot the value of the angle theta only concerning with acutal strain not the noise so currently I am using solution provided by Steven Lord but the problem arises when I zero down the offset of the signal. Here is the image. I though of plotting only section of angle value once strain is acted up it but it would be nice if I could remove noise somehow. Since the eqution considers everything as strain value and plot angles for it as well 