Area Normalize EPR Spectra

17 visualizzazioni (ultimi 30 giorni)
Alex Garces
Alex Garces il 24 Gen 2023
Commentato: Mathieu NOE il 26 Gen 2023
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
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)
Capability.require(Capability.Swing);
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 Commenti
Alex Garces
Alex Garces il 25 Gen 2023
Modificato: Alex Garces il 25 Gen 2023
This worked perfectly! Thank you for the help, it is very much appreciated.
I could be wrong but I don't think I can accept a comment as an answer. If you copy that to an answer I would be more than happy to accept it.
Mathieu NOE
Mathieu NOE il 26 Gen 2023
hello
glad this helped
as you suggested, I moved it in the answer section.
thanks

Accedi per commentare.

Risposta accettata

Mathieu NOE
Mathieu NOE il 25 Gen 2023
Spostato: Mathieu NOE il 26 Gen 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
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}));

Più risposte (0)

Categorie

Scopri di più su MATLAB in Help Center e File Exchange

Prodotti


Release

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by