質問

I am trying to validate some accelerator data that I have collected by comparing it against the LVDT displacements that were also recorded. To do this I am trying to differentiate the LVDT data twice to get acceleration. However when I run my code it has the error

Undefined function or variable 'DiffDiffLVDT'. 

Investigating this I have found that Matlab is not processing the second for loop and hence the variable DiffDiffLVDT is never made.

Why is it skipping the second for loop?

enter code here
clear all

clc

test2 = csvread('HZ1.csv'); %raw data from excel
time = test2(:,1);
%% Filtering 
f=250;%  sampling frequency
f_cutoff = 2; % cutoff frequency
f_cutoff2 = 5;

fnorm =f_cutoff/(f/2); % normalized cut off freq, you can change it to any value depending on your requirements
fnorm2 =f_cutoff2/(f/2);

[b1,a1] = butter(4,fnorm,'low'); % Low pass Butterworth filter of order 4
[b2,a2] = butter(4,fnorm2,'low'); % Low pass Butterworth filter of order 4

filtaccZ = filtfilt(b2,a2,test2(:,6));
filtLVDTZ = filtfilt(b1,a1,test2(:,7));

%% Remove Offset

Accz = filtaccZ -mean(filtaccZ);
LVDTz = filtLVDTZ - mean(filtLVDTZ);

%% Unit Conversion

LVDTm = LVDTz/1000; % mm to m

%% LVDT Displacement to Acc

% Displacement to Velocity
for d = 2:1:(size(LVDTm)-1)

    x = LVDTm(d+1);

    y = LVDTm(d-1);

    z = x-y; %differnce in y

    a = time (d+1);

    b = time (d-1);

    c = a-b; %differnce in x

    DiffLVDT(d)= (z/c); % Displacement to velocity

end

velocity = DiffLVDT;

% Velocity to Acceleration
for e=1:1:(size(velocity)-1)
    x2 = velocity(e+1); 

    y2 = velocity(e-1);

    z2 = x2-y2; %differnce in y

    a2 = time (e+1);

    b2 = time (e-1);

    c2 = a2-b2; %differnce in x

    DiffDiffLVDT(e)= (z2/c2) %velocity to acc.

end

Acc= DiffDiffLVDT
%% Plotting
close all 
figure
hold on
plot(time(1:5000),Acc(1:5000),'b')
plot(time(1:5000),Accz(1:5000),'r')

grid on;box on
legend('DiffDiffLVDTFilter','Accz')

    enter code here
役に立ちましたか?

解決

Because

1:1:(size(velocity)-1)

does not do what you want it to.

velocity is an 1xN array, size(velocity) therefore returns [1 N]. The colon operator only cares about the first value in the array and the array you want to loop over ends up being empty since

1:1:[1 N]-1 == 1:1:1-1 == 1:1:0 == Empty matrix

Due to problems like these you should always use either of the following instead of size(var) when constructing loops:

size(var, n) % Returns the size of the nth dimension of var
length(var) % Returns the size of the largest dimension of var
numel(var) % Returns the number of elements in var
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top