126 views (last 30 days)

I have a time domain data and also a FFT of this data. But when I use fwhm(x,y) then it says

Pulse Polarity = Positive

Pulse is Impulse or Rectangular with 2 edges

ans =

NaN

I am trying to also use findpeaks() but I don't know how to proceed after that. Any help would be appreciated. Thanks

Since the data is larger than 5 MB, I have attached the link to the data. Thanks,

There are 4 signals in the data and the first row is the frequency. I get the fwhm of only 2nd and 4th signals. Others show NaN. But the ones that I get are too incorrect as getting 4e3 and 4e7, which doesn't make sense. I have a nice FFT as attached below.

Star Strider
on 10 Oct 2020

The fwhm function is a File Exchange contribution. As I read the function code, it should likely give you something other than NaN if it detects 2 edges, however I have no idea what youare passing to it.

If you have the Signal Processing Toolbox, another option would be the findpeaks function. It will return the FWHM of the peaks it identifies if you ask it to. See the documentation for it that I linked to for details.

Star Strider
on 11 Oct 2020

As always, my pleasure!

Since you only need the first peak, try this:

M1 = readmatrix('1.csv');

figure

plot(M1(:,1), M1(:,2:end))

grid

for k = 2:size(M1,2)

[pks{k-1}, locs{k-1}, fwhm{k-1}, prom{k-1}] = findpeaks(M1(:,k), 'MinPeakProminence', 30, 'NPeaks',1);

end

sbplts = size(M1,2);

figure

for k = 1:sbplts-1

subplot(sbplts-1,1,k)

plot(M1(:,1), M1(:,k+1))

hold on

plot(M1(locs{k},1), pks{k}, '^r')

hold off

axis([0 5.7E3 -60 15])

grid

end

for k1 = 1:4

fprintf(1,'Column %d\n',k1+1)

fprintf(1, '\t\tFreq = %8.3E\t\tPeak = %6.4f\t\tFWHM = %7.3f\n', [M1(locs{k1}), pks{k1}, fwhm{k1}]')

end

producing:

Column 2

Freq = 3.850E+03 Peak = 0.0000 FWHM = 10.369

Column 3

Freq = 3.850E+03 Peak = 0.0000 FWHM = 8.304

Column 4

Freq = 3.850E+03 Peak = 0.0000 FWHM = 13.765

Column 5

Freq = 3.850E+03 Peak = 0.0000 FWHM = 13.337

and the appropriate plot.

My previous code printed the prominence values rather than the width values (it’s been a long day). This version corrects that, and prints the FWHM values.

The peak amplitude values of 0 are apparently appropriate, since the magnitude values appear to be in decibels. The column labels are corrected from my earlier post, since the frequencies are in Column 1, so the other columns (2:4) are the signal data.

.

Star Strider
on 11 Oct 2020

As always, my pleasure!

With respect to your other Question, I do not have the necessary blockset. That aside, I posted a ‘sort of’ Answer that is my best guess as to how to emulate it. That is the best I can do. I will delete that Asnwer if it is not what you want.

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

Start Hunting!
## 1 Comment

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/610171-how-to-find-fwhm-using-fwhm#comment_1336152

⋮## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/610171-how-to-find-fwhm-using-fwhm#comment_1336152

Sign in to comment.