MATLAB Answers

how to find fwhm using fwhm()?

43 views (last 30 days)
Jay Vaidya
Jay Vaidya on 10 Oct 2020
Commented: Star Strider on 11 Oct 2020
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.

  0 Comments

Sign in to comment.

Accepted Answer

Star Strider
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.

  8 Comments

Show 5 older comments
Star Strider
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.
.
Jay Vaidya
Jay Vaidya on 11 Oct 2020
This is great, and what I exactly needed.
Also, Can you tell me how can I find the phase noise of this data in dBc/Hz? I have made another post for this.
Star Strider
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.

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!