Problems with signal processing
이전 댓글 표시
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. 

답변 (1개)
Star Strider
2023년 3월 24일
0 개 추천
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
Dan Lecoutre
2023년 3월 24일
Star Strider
2023년 3월 24일
편집: Star Strider
2023년 3월 25일
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
2023년 3월 28일
Star Strider
2023년 3월 28일
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
2023년 3월 28일
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.
.
카테고리
도움말 센터 및 File Exchange에서 AI for Signals에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



