Problems with signal processing
Mostrar comentarios más antiguos
I have a signal as shown here:
The x axis is just the sample number and the y is the ampltiude of the signal in volts.
There are ten 'bursts' where the amplitude of the signal spikes and dies out before rising again. I would like to obtain the fast fourier transform of each of these 10 bursts individually and plot them on the same figure. I'm not entirely sure where to start and any help would be greatly appreciated. 

Respuestas (1)
Star Strider
el 24 de Mzo. de 2023
0 votos
For a time-frequency plot, I would use the pspectrum function with the 'spectrogram' option, at least for an initial approach, although that might be all you need. (The pspectrum results are a bit easier to interpret than the spectrogram results.)
6 comentarios
Dan Lecoutre
el 24 de Mzo. de 2023
Star Strider
el 24 de Mzo. de 2023
Editada: Star Strider
el 25 de Mzo. de 2023
It displays the Fourier transform of each burst as part of the time-frequency plot.
That will tell you if it is worth analysing further. If so, the stft function would be worth considering.
Dan Lecoutre
el 28 de Mzo. de 2023
Star Strider
el 28 de Mzo. de 2023
Ideally, it would be something like this —
[p,f,t] = pspectrum(src1.Data, Fs, 'spectrogram')
figure
waterfall(f,t,p)
or something similar, where ‘Fs’ is the sampling frequency. (Most signal processing functions assume that the sampling intervals are the same throughout the signal.) See the documentation for details.
With a vector of that length, it should be possible to get a fair amount of detail.
If you want to post it here, it would be necessary first to use the resample function to downsample it to the required 5 MB length, or to post only the first 5 MB of it, or some 5 MB subsection of it, assuming that contains at least one spike. It looks like there might be two signals in the original plot image, so choose a representative sample of one or both to attach. Use the paperclip icon in the top toolstrip to do that.
Dan Lecoutre
el 28 de Mzo. de 2023
Here are three ways of depicting it, demonstrating the time-frequency characteristics of the spike —
LD = load(websave('burst1%20of%20data','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1338969/burst1%20of%20data.mat'));
burst1 = LD.burst1;
Fs = 1; % Assume Default Sampling Frequency (Value NMot Provided)
[p,f,t] = pspectrum(burst1, Fs, 'spectrogram');
figure
waterfall(f,t,p.')
set(gca,XDir="reverse",View=[60 60])
ylabel("Time (s)")
xlabel("Frequency (Hz)")
xlim([0 Fs*0.01])
ylim([0 max(ylim)/3])
colormap(turbo)
figure
surfc(f,t,p.', 'EdgeColor',[1 1 1]*0.5)
set(gca,XDir="reverse",View=[60 30])
ylabel("Time (s)")
xlabel("Frequency (Hz)")
xlim([0 Fs*0.01])
ylim([0 max(ylim)/3])
colormap(turbo)
figure
contourf(f,t,p.')
set(gca,XDir="reverse")
ylabel("Time (s)")
xlabel("Frequency (Hz)")
xlim([0 Fs*0.005])
ylim([max(ylim)/10 max(ylim)/4])
colormap(turbo)
It would help to have the sampling frequency (I did not find it anywhere) however the plots should scale with it.
Ths Z-axis units are in terms of power, not decibels. Use the pow2db function to convert them, if desired.
.
Categorías
Más información sobre AI for Signals en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



