www.gusucode.com > dsp 案例源码程序 matlab代码 > dsp/SignalVisualizationAndMeasurementsInMATLABExample.m
%% Signal Visualization and Measurements in MATLAB % This example shows how to visualize and measure signals in the time and % frequency domain in MATLAB using a time scope and spectrum analyzer. %% Signal Visualization in Time and Frequency Domains % Create a sine wave with a frequency of 100 Hz sampled at 1000 Hz. % Generate five seconds of the 100 Hz sine wave with additive $N(0,0.0025)$ % white noise in one-second intervals. Send the signal to a time scope and % spectrum analyzer for display and measurement. SampPerFrame = 1000; Fs = 1000; SW = dsp.SineWave('Frequency', 100, ... 'SampleRate', Fs, 'SamplesPerFrame', SampPerFrame); TS = dsp.TimeScope('SampleRate', Fs, 'TimeSpan', 0.1, ... 'YLimits', [-2, 2], 'ShowGrid', true); SA = dsp.SpectrumAnalyzer('SampleRate', Fs); tic; while toc < 5 sigData = SW() + 0.05*randn(SampPerFrame,1); TS(sigData); SA(sigData); end %% Time-Domain Measurements % Using the time scope, you can make a number of signal measurements. % % The following measurements are available: % % * *Cursor Measurements* - puts screen cursors on all scope displays. % * *Signal Statistics* - displays maximum, minimum, peak-to-peak % difference, mean, median, RMS values of a selected signal, and the times % at which the maximum and minimum occur. % * *Bilevel Measurements* - displays information about a selected signal's % transitions, overshoots or undershoots, and cycles. % * *Peak Finder* - displays maxima and the times at which they occur. % % You can enable and disable these measurements from the time scope toolbar % or from the *Tools > Measurements* menu. % % <<../TS_measurementbuttons.png>> % % <<../TS_measurementmenu.png>> %% % To illustrate the use of measurements in the time scope, simulate an ECG % signal. Use the |ecg| function to generate 2700 % samples of the signal. Use a Savitzky-Golay filter to smooth the % signal and periodically extend the data to obtain approximately 11 % periods. x = 3.5*ecg(2700).'; y = repmat(sgolayfilt(x,0,21),[1 13]); sigData = y((1:30000) + round(2700*rand(1))).'; %% % Display the signal in the time scope and use the Peak Finder, Cursor and % Signal Statistics measurements. Assume a sample rate of 4 kHz. TS_ECG = dsp.TimeScope('SampleRate', 4000, ... 'TimeSpanSource', 'Auto', 'ShowGrid', true); TS_ECG(sigData); TS_ECG.YLimits = [-4, 4]; %% % *Peak Measurements* % % Enable *Peak Measurements* by clicking the corresponding toolbar icon or % by clicking the *Tools > Measurements > Peak Finder* menu item. Click % *Settings* in the Peak Finder panel to expand the Settings pane. Enter % |10| for *Max Num of Peaks* and press Enter. The time scope % displays in the Peaks pane a list of 10 peak amplitude values and the % times at which they occur. % % <<../TS_PeakFinder.png>> % % There is a constant time difference of 0.675 seconds between each % heartbeat. Therefore, the heart rate of the ECG signal is given by the % following equation: % % $$\frac{60\,{\rm sec/min}}{0.675\,{\rm sec/beat}} = % 88.89\,{\rm beats/min\,(bpm)}$$ % % *Cursor Measurements* % % Enable *Cursor Measurements* by clicking the corresponding toolbar icon % or by clicking the *Tools > Measurements > Cursor Measurements* menu % item. The Cursor Measurements panel opens and displays two cursors in the % time scope. You can drag the cursors and use them to measure the time % between events in the waveform. In the following figure, cursors are used % to measure the time interval between peaks in the ECG waveform. The % $\Delta T$ measurement in the Cursor Measurements panel demonstrates that % the time interval between the two peaks is 0.675 seconds corresponding to % a heart rate of 1.482 Hz or 88.9 beats/min. % % <<../TS_Cursors.png>> % % *Signal Statistics* and *Bilevel Measurements* % % You can also select *Signal Statistics* and *Bilevel Measurements* from % the *Tools > Measurements* menu. Signal Statistics can be used to % determine the signal's minimum and maximum values as well as other % metrics like the peak-to-peak, mean, median, and RMS values. Bilevel % Measurements can be used to determine information about rising and % falling transitions, transition aberrations, overshoot and undershoot % information, pulse width, and duty cycle. To read more about these % measurements, see the <../examples/time-scope-measurements.html Time % Scope Measurements> tutorial example. % %% Frequency-Domain Measurements % This section explains how to make frequency domain measurements with the % spectrum analyzer. % % The spectrum analyzer provides the following measurements: % % * *Cursor Measurements* - places cursors on the spectrum display. % * *Peak Finder* - displays maxima and the frequencies at which they % occur. % * *Channel Measurements* - displays occupied bandwidth and ACPR channel % measurements. % * *Distortion Measurements* - displays harmonic and intermodulation % distortion measurements. % * *CCDF Measurements* - displays complimentary cumulative distribution % function measurements. % % You can enable and disable these measurements from the spectrum analyzer % toolbar or from the *Tools > Measurements* menu. % % <<../SA_MeasurementButtons.png>> % % <<../SA_MeasurementMenu.png>> % % *Distortion Measurements* % % To illustrate the use of measurements with the spectrum analyzer, create % a 2.5 kHz sine wave sampled at 48 kHz with additive white Gaussian noise. % Evaluate a high-order polynomial (9th degree) at each signal value to % model non-linear distortion. % Display the signal in a spectrum analyzer. Fs = 48e3; SW = dsp.SineWave('Frequency', 2500, ... 'SampleRate', Fs, 'SamplesPerFrame', SampPerFrame); SA_Distortion = dsp.SpectrumAnalyzer('SampleRate', Fs, ... 'PlotAsTwoSidedSpectrum', false); y = [1e-6 1e-9 1e-5 1e-9 1e-6 5e-8 0.5e-3 1e-6 1 3e-3]; tic; while toc < 5 x = SW() + 1e-8*randn(SampPerFrame,1); sigData = polyval(y, x); SA_Distortion(sigData); end clear SA_Distortion; %% % Enable the harmonic distortion measurements by clicking the % corresponding icon in the toolbar or by clicking the *Tools > % Measurements > Distortion Measurements* menu item. In the Distortion % Measurements, change the value for *Num. Harmonics* to 9 and % check the *Label Harmonics* checkbox. In the panel, you see the % value of the fundamental close to 2500 Hz and 8 harmonics as well as % their SNR, SINAD, THD and SFDR values, which are referenced with respect % to the fundamental output power. % % <<../SA_DistortionMeasurements.png>> % % *Peak Finder* % % You can track time-varying spectral components by using the Peak Finder % measurement dialog. You can show and optionally label up to 100 peaks. % You can invoke the Peak Finder dialog from the *Tools > Measurements > % Peak Finder* menu item, or by clicking the corresponding icon in the % toolbar. % % To illustrate the use of *Peak Finder*, create a signal consisting of the sum % of three sine waves with frequencies of 5, 15, and 25 kHz and amplitudes % of 1, 0.1, and 0.01 respectively. The data is sampled at 100 kHz. Add % $N(0,10^{-8})$ white Gaussian noise to the sum of sine waves and display % the one-sided power spectrum in the spectrum analyzer. Fs = 100e3; SW1 = dsp.SineWave(1e0, 5e3, 0, 'SampleRate', Fs, 'SamplesPerFrame', SampPerFrame); SW2 = dsp.SineWave(1e-1, 15e3, 0, 'SampleRate', Fs, 'SamplesPerFrame', SampPerFrame); SW3 = dsp.SineWave(1e-2, 25e3, 0, 'SampleRate', Fs, 'SamplesPerFrame', SampPerFrame); SA_Peak = dsp.SpectrumAnalyzer('SampleRate', Fs, 'PlotAsTwoSidedSpectrum', false); tic; while toc < 5 sigData = SW1() + SW2() + SW3() + 1e-4*randn(SampPerFrame,1); SA_Peak(sigData); end clear SA_Peak; %% % Enable the *Peak Finder* to label the three sine wave frequencies. The % frequency values and powers in dBm are displayed in the *Peak Finder* % panel. You can increase or decrease the maximum number of peaks, specify % a minimum peak distance, and change other settings from the *Settings* % pane in the Peak Finder Measurement panel. % % <<../SA_PeakFinder.png>> % % To learn more about the use of measurements with the spectrum analyzer, % see the <../examples/spectrum-analyzer-measurements.html Spectrum % Analyzer Measurements> example.