www.gusucode.com > dsp 案例源码程序 matlab代码 > dsp/MeasurePulseTransCharacOfStreamSigsExample.m

    %% Measure Pulse and Transition Characteristics of Streaming Signals
% This example measures the pulse and transition metrics of a noisy
% rectangular pulse. Pulse metrics include rise time, fall time,
% pulse width, and pulse period. Transition metrics include 
% middle-cross events, overshoot, and undershoot of the posttransition 
% aberration regions of the noisy rectangular pulse.

%% Generate a Rectangular Pulse
% Generate a noisy rectangular pulse. The noise is a white Gaussian
% noise with zero mean and a standard deviation of 0.1. Store the data in
% |rectData|.
t = 0:.01:9.99;   % time vector 
w = 1; % pulse width
d = w/2:w*2:10; % delay vector
y2 = pulstran(t,d,'rectpuls',w); 
rectData = y2'+0.1*randn(1000,1); % rectangular pulse with noise
plot(rectData);
xlabel('Samples');
ylabel('Level (volts)');

%% Measure State Levels
% The |dsp.StateLevels| System object uses the histogram method to estimate 
% the state levels of a bilevel waveform. The histogram method involves the
% following steps:
%
% # Determine the maximum and minimum amplitudes of the data.
% # For the specified number of histogram bins, determine the bin width,
% which is the ratio of the amplitude range to the number of bins.
% # Sort the data values into the historgram bins.
% # Identify the lowest indexed histogram bin and the highest indexed 
% histogram bin with nonzero counts.
% # Divide the histgram into two subhistograms. 
% # Compute the state levels by determining the mode or mean of the upper
% and lower histograms.
%%
% Plot the state levels of the rectangular pulse.
sLevel = dsp.StateLevels;
levels = sLevel(rectData);
figure(1);
plot(sLevel);

%% Compute Pulse Metrics
% Using the |dsp.PulseMetrics| System object, you can compute metrics such
% as the rise time, fall time, pulse width, and pulse period of the
% rectangular pulse. Plot the pulse with the state levels and reference
% levels.
pMetrics = dsp.PulseMetrics('StateLevels',levels,'CycleOutputPort',true);
[pulse,cycle] = pMetrics(rectData);
plot(pMetrics);
xlabel('Samples');
%%
% _Rise Time_ is the duration between the instants where the rising 
% transition of each pulse crosses from the lower to the upper reference 
% levels. View the rise time of each pulse.
pulse.RiseTime

%%
% _Fall time_ is the duration between the instants where the falling
% transition of each pulse crosses from the upper to the lower reference 
% levels. View the fall time of each pulse.
pulse.FallTime

%%
% _Width_ is the duration between the mid-reference level crossings of the 
% first and second transitions of each pulse. View the width of each pulse.
pulse.Width

%%
% _Period_ is the duration between the first transition of the current pulse
% and the first transition of the next pulse. View the period of each
% pulse.
cycle.Period

%% Polarity
% The |Polarity| property of the |pMetrics| object is set to |'Positive'|. 
% The object therefore computes the pulse metrics starting from the first 
% positive transition.
%% Running Metrics
% If the |RunningMetrics| property is set to |true|, the object treats the
% data as a continuous stream of running data. If there is an incomplete
% pulse at the end, the object returns the metrics of the last pulse in the 
% next process step, once it has enough data to complete the pulse. If the 
% |RunningMetrics| property is set to false, the object treats each call to
% process independently. If the last pulse is incomplete, the object computes 
% whatever metrics it can return with the available data. 
% For example, if the pulse is half complete, the object can return the 
% rise time of the last pulse, but not the pulse period.

%% 
% Given that the polarity is positive and the running metrics are set to
% false, the rectangular pulse has:
%
% * The first positive transition at 200 seconds
% * Three complete pulses and two incomplete pulses (first and the
% last)
% * Four positive transitions and four negative transitions
%
% Depending on the metric, the number of elements in the metric vector is
% equal to either the number of transitions or the number of complete 
% pulses. The rise time vector has four elements, which matches the number 
% of transitions. The cycle period has three elements, which matches the 
% number of complete pulses.

%%
% Set the |RunningMetrics| property to |true|. 
 
release(pMetrics);
pMetrics.RunningMetrics = true;
[pulse,cycle] = pMetrics(rectData);
plot(pMetrics);
xlabel('Samples');

%%
% The pMetrics object has three positive transitions and three negative 
% transitions. The object waits to complete the last pulse before it 
% returns the metrics for the last pulse.

%% 
% Divide the input data into two frames with 500 samples in each
% frame. Compute the pulse metrics of the data in running mode. The number 
% of iteration loops correspond to the number of data frames processed.
release(pMetrics);
framesize = 500;
for i = 1:2
    data = rectData((((i-1)*framesize)+1):i*framesize);
    [pulse,cycle] = pMetrics(data);
    pulse.RiseTime
end

%%
% The first frame contains one complete pulse and 2 incomplete pulses. The
% rise time value displayed in the first iteration step corresponds to the
% rising transition in this complete pulse. The rise time of the last 
% complete pulse is not displayed in this iteration step. The algorithm 
% waits to complete the pulse data. The second data frame contains the 
% remaining part of this pulse and another complete pulse. The rise time 
% vector in the second iteration step has two elements - first value 
% corresponds to the rising transition of the incomplete pulse in the 
% previous step, and the second value corresponds to the rising 
% transition of the complete pulse in the current step. 

%% Compute Transition Metrics
% The transition metrics correspond to the metrics of the first and second
% transitions. Using the |dsp.TransitionMetrics| System object, you can 
% determine the middlecross events, and compute the post-overshoot and 
% post-undershoot of the rectangular pulse. To measure the postshoot 
% metrics, set the |PostshootOutputPort| property of 
% |dsp.TransitionMetrics| to true.

tMetrics = dsp.TransitionMetrics('StateLevels',levels,'PostshootOutputPort',true);
[transition,postshoot] = tMetrics(rectData);
plot(tMetrics);
xlabel('Samples');
%%
% _Middle-cross events_ are instants in time where the pulse transitions
% cross the middle reference level. View the middle-cross events of the
% pulse.
transition.MiddleCross

%%
% _Overshoots_ and _undershoots_ are expressed as a percentage of the 
% difference between state levels. Overshoots and undershoots that occur
% after the posttransition aberration region are called post-overshoots and 
% post-undershoots. The overshoot value of the rectangular 
% pulse is the maximum of the overshoot values of all the transitions.
% View the post-overshoots of the pulse.
postshoot.Overshoot

%%
% The undershoot value of the rectangular pulse is the minimum
% of the undershoot values of all the transitions.
postshoot.Undershoot