Area Normalize EPR Spectra
4 views (last 30 days)
Show older comments
Hello,
I am relatively new to MATLAB and I am trying to area normalize these 25 spectra. By area normalize, I mean that the absolute value of the area under each individual spectrum is equal to 1. I have seen the previous responses to similar questions and I have attempted to replicate them with my data set.
The issue I am having is that although the original data (before area normalizing) all have similar peak to peak amplitudes, the area normalized data results in extremely variable spectral amplitudes. I realize that the amplitudes of different parts of the spectrum can change when area normalizing, but this kind of variability in the result does not seem plausible.
I included my matlab workspace so that the same data can be used. I also included a figure of the "incorrectly area normalized data".
Any help is greatly appreciated. Thank you in advance!
clc; clear; clf;
Folder = uigetdir; %asks user for folder
FilePattern = fullfile(Folder,'*.xml'); %searches folder for .xml files
Files = dir(FilePattern); %puts files into struct array
SortedFiles = natsortfiles(Files);
for K = 1:length(SortedFiles)
thisfilename = fullfile(Folder, SortedFiles(K).name); %file name
[X,Y] = eprload(thisfilename); % extracts data
DataY{K} = num2cell(Y);
TablesY = cell2table(DataY{K}); % puts data into a table
ArrayY = table2array(TablesY);
DataY{K} = real(ArrayY); % takes only the real part of the array
DataX{K} = num2cell(X);
TablesX = cell2table(DataX{K}); % puts data into a table
ArrayX = table2array(TablesX);
DataX{K} = real(ArrayX); % takes only the real part of the array
AreaUnderCurve{K} = abs(trapz(DataY{K})); % absolute value of the total area under the curve
% (I took the absolute value so that it doesn't invert spectra)
AreaNormalized{K} = DataY{K}./AreaUnderCurve{K}; % Divide each Y value by the total area under the curve
AreaCheck = trapz(AreaNormalized{K});
%plot(DataX{K},DataY{K})
plot(DataX{K},AreaNormalized{K})
legend
hold on
end
4 Comments
Mathieu NOE
on 26 Jan 2023
hello
glad this helped
as you suggested, I moved it in the answer section.
thanks
Accepted Answer
Mathieu NOE
on 25 Jan 2023
Moved: Mathieu NOE
on 26 Jan 2023
hello
I presume that negative signal area should aslo be counted as positive area
so this line is wrong
AreaUnderCurve{K} = abs(trapz(DataY{K}));
Should be :
AreaUnderCurve{K} = trapz(abs(DataY{K}));
otherwise a perfectly symmetrical sine wave of one period would have area = 0
Also I assume your x spacing is not 1 , then the area computation must also take that in account
AreaUnderCurve{K} = trapz(DataX{K},abs(DataY{K}));
0 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!