Area Normalize EPR Spectra

4 views (last 30 days)
Alex Garces
Alex Garces on 24 Jan 2023
Commented: Mathieu NOE on 26 Jan 2023
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
Error using matlab.internal.lang.capability.Capability.require
Support for Java user interfaces is required, which is not available on this platform.

Error in uigetdir (line 52)
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});
hold on
Mathieu NOE
Mathieu NOE on 26 Jan 2023
glad this helped
as you suggested, I moved it in the answer section.

Sign in to comment.

Accepted Answer

Mathieu NOE
Mathieu NOE on 25 Jan 2023
Moved: Mathieu NOE on 26 Jan 2023
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
area = trapz(X,Y) integrates Y with respect to the coordinates or scalar spacing specified by X.
AreaUnderCurve{K} = trapz(DataX{K},abs(DataY{K}));

More Answers (0)


Find more on Mathematics in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by