New variable for each xlsread from a different file

1 view (last 30 days)
First time using Matlab so I have no clue about this.
For my thesis, I have a number of excel files from collecting data. The tables in each file are the same dimensions representing the same data type (freq vs dB).
I want to import these to Matlab so I can graph them individually and also then average them together (since they are just test runs of the same set-up).
In the loop, I want it to spit out variables SPL_1, SPL_2, SPL_3 etc.
Right now this is my code. It gathers the file list fine. But I can't work out how to create a new SPL variable for each time it reads from an excel file.
%====IMPORT ACOUSTIC TEST DATA FROM N63 COMFORT EXCEL .CSV FILES====%
%State constant variables%
alpha = 1;
s_source = 2;
a_recieve = 3;
spl_IL_= 4;
%Frequency Column
freq = xlsread(freq_data,'A2:A102');
%Import Data - Excel Loop%
Files = dir('*.xlsx');
fnames = {Files.name};
filename = fnames';
%Determine Size for Loop
D = size(filename);
Numloop = D(1,1);
%Loop to Create Paths for each file
for i = 1:Numloop
run = filename(i,1)
excel_sheet = run{1}
SPL_1 = xlsread(excel_sheet,'B2:B102')
end
  3 Comments
Harrison Schipke
Harrison Schipke on 30 Oct 2018
Thanks for your reply.
I don't understand how Processing a sequence of files will give me the data I need? I have already got by xlxs files. I just need to import a column from each file and then use that column to plot a line graph
Stephen23
Stephen23 on 30 Oct 2018
Edited: Stephen23 on 30 Oct 2018
"I don't understand how Processing a sequence of files will give me the data I need?"
That link shows how to use a cell array to store the imported data.

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 30 Oct 2018
Edited: Stephen23 on 31 Oct 2018
As shown in the MATLAB documentation
you could simply use cell array to store the imported data:
D = 'directory where the files are saved';
S = dir(fullfile(D,'*.xlsx'));
N = numel(S)
C = cell(1,N)
for k = 1:N
F = fullfile(D,S(k).name);
C{k} = xlsread(F,'B2:B102')
end
Or just use the structure returned by dir:
D = 'directory where the files are saved';
S = dir(fullfile(D,'*.xlsx'));
for k = 1:numel(S)
F = fullfile(D,S(k).name);
S(k).data = xlsread(F,'B2:B102')
end
Both of them are then trivially and efficiently accessed using indexing, or with comma-separated lists:
  2 Comments
Harrison Schipke
Harrison Schipke on 31 Oct 2018
Edited: Harrison Schipke on 31 Oct 2018
Thanks for the advice. I appreciate it!
So now if I want to use my data (with cell array) I would just say C(1,1) and I could then use that column (100 rows) of data? How could I average the data for each row? So as an example C(1,1) is 101x1, C(1,2) is 101x1, and C(1,3) is 101x1. Can I make the each row of data be averaged using this cell aray?
This is what I have so far (with some name changes)
%Frequency Column
freq = xlsread('N63_C_Run_1.xlsx','A2:A102');
%Get File Names
S = dir(fullfile('*.xlsx'));
N = numel(S);
%State Variables and Obtain Excel Data
SPL_1_Runs = cell(1,N);
SPL_2_Runs = cell(1,N);
for k = 1:N
F = fullfile(S(k).name);
SPL_1_Runs{k} = xlsread(F,'B2:B102');
SPL_2_Runs{k} = xlsread(F,'C2:C102');
end
%Combine Cell Array to Matrix
SPL_1 = cell2mat(SPL_1_Runs);
SPL_2 = cell2mat(SPL_2_Runs);
Stephen23
Stephen23 on 31 Oct 2018
Edited: Stephen23 on 31 Oct 2018
Each cell of SPL_1_Runs and SPL_2_Runs contains the data that you imported. You can access the contents using cell array indexing (which is why I gave you the links to read):
SPL_1_Runs{1} % data from 1st file
SPL_1_Runs{2} % data from 2nd file
SPL_1_Runs{3} % data from 3rd file
... etc
If they all have the same number of columns, then you can combine them into one numeric matrix (using a comma-separated list, see the links I gave you):
M = [SPL_1_Runs{:}]
which you can then simply plot like this:
plot(M)
To get the average just use mean:
mean(M,2)

Sign in to comment.

More Answers (1)

madhan ravi
madhan ravi on 30 Oct 2018

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!