Code covered by the BSD License  

Highlights from
Test and Measurement Widgets

image thumbnail
from Test and Measurement Widgets by Scott Hirsch
Set of widgets for real-time data display.

SPECGRAMSCOPE Live updating spectrogram display

SPECGRAMSCOPE Live updating spectrogram display

SPECGRAMSCOPE makes it fairly easy to include a spectrogram scope in your real-time data acquisition and analysis application. You feed spectrumscope your data, and it plots the FFT - simple enough! It takes 2 steps to use SPECGRAMSCOPE. First, you initialize the scope with basic information needed for the FFT (sample rate, fft length, and history length). After that, all you need to do is pass your data to the scope.

This documentation starts with the simplest syntax for the two steps, then provides a few more advanced options.

Contents

STEP 1: Initialize the scope

SPECGRAMSCOPE(FS,NFFT) initializes a spectrogram scope in the current axes. This spectrogram scope will compute and displays the NFFT-point FFT of a vector signal with sample rate FS Hz. It will show the last 10 FFTs

STEP 2: Update the scope

SPECGRAMSCOPE(S) updates the spectrogram scope in the current axes with the FFT of vector S. The scope should first be initialized as above with sample rate and FFT length. If not, the sample rate will be 1 Hz and the FFT length will be the length of S. Differences between the length of S and the specified FFT length are handled the same as MATLAB's built-in FFT function (i.e., zero-padding or truncation, as appropriate).

Specifying the axes to locate the scope

SPECGRAMSCOPE(HAX, ...) defines the scope in specified axes HAX instead of GCA. i.e., SPECGRAMSCOPE(HAX,FS,NFFT) initializes axes HAX as a spectrogram scope, and SPECGRAMSCOPE(HAX,S) updates axes HAX with vector S.

Returning a handle to the scope

HAX = SPECGRAMSCOPE(...) returns a handle to the axes initialized by the spectrogram scope. This is useful if you allow SPECGRAMSCOPE to create an axes for you, and want to be able to easily reference the axes for updates. The surface created by SPECGRAMSCOPE all have the tag 'SpecgramScope'. If you would like to manually modify the properties of these lines, their handles can be found by:

      HAX = SPECGRAMSCOPE(...);
      HSurf = findobj(HAX,'Tag','SpecgramScope');

Example

Initialize data

Fs = 16384;
Nfft = 2048;
t = (0:1:Nfft-1)'/Fs;
fo = logspace(3.5,3.7);         % Range of fundamental frequencies
s1 = sin(2*pi*t*fo) + .1*rand(Nfft,length(fo));

Initialize scope

specgramscope(Fs,Nfft,30);
view([103 30])

Update scope

for ii = 1:length(fo)
    specgramscope(s1(:,ii));
    drawnow;pause(.01);
end;

Contact us at files@mathworks.com