Issues with findpeaks()

26 次查看(过去 30 天)
Joshua Walters
Joshua Walters 2020-4-28
评论: ME 2020-4-28
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)

采纳的回答

ME
ME 2020-4-28
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 个评论
Joshua Walters
Joshua Walters 2020-4-28
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 2020-4-28
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?

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by