How can I find peak from matrix
8 次查看(过去 30 天)
显示 更早的评论
clear
pure_brain = readmatrix('Pure Brain Spectra.csv');
[pks,locsBr] = findpeaks(pure_brain(:,2));
pure_Liver = readmatrix('Pure Liver Spectra.csv');
[pks,locsLiv] = findpeaks(pure_Liver(:,2));
figure
plot(xBrain(locsLiv(LvBrain)), YBrain, '.r')
hold on
plot(xLiver(locsLiv(LvLiver)), YLiver, '.b')
hold off
grid
% To find common peaks considering the threshold of 1E+4:
lB = locsBr(LvBrain);
lL = locsLiv(LvLiver);
s = max(length(lB), length(lL));
locsLivNew = [lL; false(s-length(lL),1)];
locsBrNew = [lB; false(s-length(lB),1)];
common = ismember(lB,lL);
I want to find peak from the data I have. From the screenshot the first column is X coordinate and the other are Y coordinate for each spectrum. I want to find peak spot for each spectrum
0 个评论
回答(2 个)
dpb
2021-5-1
What's wrong with what you've done for the one?
findpeaks is one of the functions that has not been vectorized (owing to its complexity, no doubt) to operate by column on an input array by default.
So, just write a loop and iterate over the columns of interest...
pure_brain = readmatrix('Pure Brain Spectra.csv');
pure_Liver = readmatrix('Pure Liver Spectra.csv');
for i=2:size(pure_brain,2)
[pksBr,locsBr] = findpeaks(pure_brain(:,i));
[pksLiv,locsLiv] = findpeaks(pure_Liver(:,i));
% process each pair here before going to next set
...
If you need to save the intermediate results, use cell arrays to save the returned peaks/locations of each type
3 个评论
Image Analyst
2021-5-1
In your screenshot, the workspace shown applies to untitled4.m, which is not shown.
The workspace does not apply to the test.m that is shown. It appears you messed up somehow while trying to show us what you were doing.
And it appears that you've somehow mistakenly removed the 'Pure Brain Spectra.csv' that I'm sure you posted earlier. Please attach it again.
Image Analyst
2021-5-1
There were so many errors in your code that I can't explain them all. All I'm going to do is show you how it's done.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 18;
Data = readmatrix('Pure Brain Spectra.csv');
whos Data
[rows, columns] = size(Data)
Xlocs = Data(:, 1);
for col = 2 : columns
thisColumnY = Data(:, col);
nexttile;
plot(Xlocs, Data(:, col), 'b-');
[peakValues, indexesOfPeaks] = findpeaks(thisColumnY, 'Threshold', 1000);
grid on;
hold on
plot(Xlocs(indexesOfPeaks), peakValues, 'rv', 'LineWidth', 2, 'MarkerSize', 7);
caption = sprintf('Column %d', col);
title(caption, 'FontSize', fontSize);
drawnow;
end
hold off;
g = gcf;
g.WindowState = 'maximized'
fprintf('Done running %s.m ...\n', mfilename);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/603670/image.png)
but you should really take time to understand all the options for findpeaks() because I'm not sure what you consider to be a peak or not and there are just too many of them identified if you simply go with the defaults.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Timetables 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!