Issues with findpeaks()

26 visualizzazioni (ultimi 30 giorni)
Joshua Walters
Joshua Walters il 28 Apr 2020
Commentato: ME il 28 Apr 2020
I'm having issues with using findpeaks() for lab data.
I have my script calling a csv file with 2 columbs of data.
As you can see from my script I can get the data to plot easily, however when I insert findpeaks(col1,col2) or findpeaks(data) I get an error message I don't understand.
The error I get is as follows:
----
Error using findpeaks
Expected Y to be a vector.
Error in findpeaks>parse_inputs (line 199)
validateattributes(Yin,{'double','single'},{'nonempty','real','vector'},...
Error in findpeaks (line 136)
= parse_inputs(isInMATLAB,Yin,varargin{:});
---
Can anyone please explaene to me why this isn't working.
clear all;
clc;
%Lab 2 Signoff 3
data=importdata("Light-Lab2.csv");
col1 = data(:,1);
col2 = data(:,2);
plot(col1,col2)
grid on, grid minor
title('lab2 data')
xlabel("Time")
ylabel("voltage")
findpeaks(data)
%findpeaks(col1,col2)

Risposta accettata

ME
ME il 28 Apr 2020
I must stress that I am not sure and I don't have acces to the Signal Processing Toolbox to check. However, have you tried reversing the order of col1, col2 in your find peaks command?
I think that command is asking it to output the x-axis locations of the peaks in your y-axis data. This would be done as findpeaks(data,x). Therefore your x-data needs to be the second input argument and at present I think they are the wrong way around.
I think the issue when you try findpeaks(data) is that you aren't feeding in a vector (1xN) but rather an array (2xN).
I hope that helps!
  5 Commenti
Joshua Walters
Joshua Walters il 28 Apr 2020
Update,
This ended up getting me, I think, what I needed:
clear all;
clc;
%ME451 Lab 2 Signoff 3
data=importdata("Light-Lab2.csv");
col1 = data(:,1)/1000;
col2 = data(:,2);
plot(col1,col2)
grid on, grid minor, hold on
title('Lab 2 signoff 3 light data')
xlabel("Time")
ylabel("voltage")
[pks,len]=findpeaks(col2,col1,'MinPeakHeight',1.5); %using this for a plot
plot(len,pks,'r*')
grid on, grid minor
%findpeaks(col2,col1) %from previous suggestion
xlabel("Time")
ylabel("voltage")
title("[Insert swear word here]")
%findpeaks(col2,'MinPeakDistance',2); %no lower arrows & no 2nd plot
time_s=length(col1)/32.66;
avg_freq=1/time_s;
fprintf('Average frequency = %6.2f Hz',avg_freq)
Thanks for your help :)
ME
ME il 28 Apr 2020
No problem, apologies I couldn’t be more help. Without access to the toolbox I couldn’t test anything out.
Anyway, if this helped you would you possibly consider accepting my answer?

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by