Spectrogram error with multiple errors

Hello,
I keep getting the following error when I try to do a spectrogram: Subscript indices must either be real positive integers or logicals.
Error in getSTFTColumns (line 14) xin = x(rowindices+coloffsets);
Error in pspectrogram (line 55) [xin,t] = getSTFTColumns(x,nx,nwin,noverlap,Fs);
Error in spectrogram (line 168) pspectrogram({x},'spect',varargin{:});
This is what I am doing:
% Trying to use this code: spectrogram(x,window,noverlap,f,fs) so that I can see the spectrogram in terms of frequency and time
% x is my signal
% fs = 128
% N = 15360
% The frequency range I want to look at is between 2-35Hz
figure
spectrogram(x,hanning(2*fs),0.5,[2 35],fs)

4 个评论

From the error message shared by you, it looks like you might be accessing the out of bound array elements or value of either "rowindices" or "coloffsets" might not be real positive integer.
Moreover, please explain what is "getSTFTColumns" and what do you want to accomplish with: -
xin = x(rowindices+coloffsets);
That code is from the spectrogram matlab function, so I'm not sure what that specific code is for. The only code that I run is:
figure
spectrogram(x,hanning(2*fs),0.5,[2 35],fs) %From the matlab guide, the code I am using is spectrogram(x,window,noverlap,f,fs)
Can you please share your signal "x" and a screenshot of the error message(or messages). And is "N" number of samples?
I've attached the signal (.mat). The error messages are exactly like the ones I mentioned in the original post. Restated here:
Subscript indices must either be real positive integers or logicals.
Error in getSTFTColumns (line 14)
xin = x(rowindices+coloffsets);
Error in pspectrogram (line 55)
[xin,t] = getSTFTColumns(x,nx,nwin,noverlap,Fs);
Error in spectrogram (line 168)
pspectrogram({x},'spect',varargin{:});

请先登录,再进行评论。

 采纳的回答

The "noverlap" should be a positive integer as it represents the number of samples of overlap with previous window. Hence the 50% overlap would be floor(win_size/2).
I'm attaching the figure that I obtained after making the changes using your input signal.
Since your window size is 2*fs, the 50% overlap will be "fs". Hence the use of the function "spectrogram" should look like: -
spectrogram(x,hanning(2*fs),fs,[2 35],fs);

1 个评论

Thank you very much! That's brilliant, no errors. Also, thank you for explaining what was wrong.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Time-Frequency Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by