The logic analyzer has insufficient memory? "Fight" to solve the problem

Abstract: MATLAB® is a powerful tool that can be used to quickly analyze the data captured from the output of an analog-to-digital converter (ADC). This application note demonstrates how to use MATLAB to break through the memory depth limitation of logic analyzers. Describe and compare three digital stitching methods (basic, lead and reverse). The results obtained by the three methods are also given.

Introduction To evaluate the performance of a high-speed analog-to-digital converter (ADC), you need to capture its digital output code and then analyze it. The memory depth of a logic analyzer often becomes an important limitation, preventing the system from capturing enough data points to generate a high-resolution FFT, or an accurate INL / DNL diagram. A simple solution to this problem is to use some mathematical tool, such as MATLAB® (Figure 1), to connect multiple sets of data. One disadvantage of connecting data is that there is usually a large discontinuity at the connection point between the two sets of data. Although the discontinuity has minimal effect on the INL / DNL graph, it is almost devastating for high-resolution FFT (Figure 2).

Figure 1. The connected data has a discontinuity between the two sets of data.
Figure 1. The connected data has a discontinuity between the two sets of data.

Figure 2. a) Capture a single set of 16384 points of data and analyze it; b) Capture two sets of 8192 points of data, connect them, and then analyze the "splicing" technique.
Figure 2. a) Capture a single set of 16384 points of data and analyze it; b) Capture two sets of 8192 points of data, connect them, and then analyze the "splicing" technique.

One way to eliminate discontinuity is to find the same cluster of points in each set of data (typically 3 to 4 points), and then “splice” the two sets of data together at these points (Figure 3). The simplest "splicing" method is to record the last four points in the first set of data, and then find the same point cluster in the second set of data. The location where the same point cluster appears in the second set of data is called the “splicing point”. All data in the second set of data before the splice point are discarded; the remaining part of the second set of data is merged with the first set of data. This technique, so-called basic digital stitching, is very simple to implement and can be run very quickly in MATLAB.

Figure 3. The final "stitched" array after basic digital stitching
Figure 3. The final "stitched" array after basic digital stitching.

When splicing data using the basic stitching method, sometimes half of the second set of data must be discarded to find a cluster of points that match the last four points of the first set of data. As another option, discarding a few points at the end of the first set of data often helps to find the splicing point closer to the beginning of the second set of data (Figure 4). However, it is difficult to find a matching point by discarding some sampling points in the tail of the first set of data and the head of the second set of data. This process is called advanced digital stitching. The ideal splice point should be able to retain as many data points as possible. Finding such a splice point requires careful consideration and certain programming skills. After being properly implemented, the advanced stitching technique can usually obtain at least 90% of the total number of data points contained in the two small arrays.

Figure 4. Using advanced splicing technology to find the ideal splicing point, and finally get the "spliced" array.
Figure 4. Using advanced splicing technology to find the ideal splicing point, and finally get the "spliced" array.

Before splicing the second set of data (array B) to the first set of data (array A) is called reverse splicing, this way it is possible to get a larger splicing array (Figure 5). However, this technique doubles the processing time because it is necessary to find the splice point when A leads B and B leads A. In addition, when used in conjunction with other stitching technologies, the benefits of reverse stitching are usually minimal. Therefore, for slower PCs, the significantly increased processing time overhead of the reverse stitching technique is less valuable than the benefits it brings. Table 1 compares these three code stitching methods in detail.

Figure 5. The processing time for reverse splicing is doubled, but often has little effect.
Figure 5. The processing time for reverse splicing is doubled, but often has little effect.

Table 1. Comparison of three splicing technologies *
STItch Technique Size of Final Data Set DescripTIon
Data Set Numbers # of codes
(averaged)
% of two data sets
(averaged)
1 + 2 3 + 4 1 + 4
Concatenate † N / A 16384 100% Will produce erroneous FFT; however, INL / DNL can be extracted from this data.
Basic 11060 8192 ‡ 14384 11212 68.4% FFT is useable for calculaTIng figures of merit.
Reverse 11060 8192 ‡ 14384 11212 68.4%
Advanced 13790 16046 16022 15286 93.3%
Advanced
+
Reverse
15427 16176 16022 15875 96.9%

* Using the above stitching technology to stitch two groups of 8K (8192) data. To ensure accuracy, the test was repeated using four sets of 8192 data points (numbered 1 to 4 respectively). The data synthesized by each set of tests are averaged and listed on the right side of the test data.
† 100% data can always be obtained by direct connection.
‡ Unable to stitch data. Description of MATLAB functions The MATLAB code attached to this article (STItchMatrices and FindStitchPoint in Appendix A and B) combines the above arguments into an easy-to-use function. These functions can accept two sets of data (single-column matrix in MATLAB) and several input variables (used to select the leading / reverse stitching function). The FindStitchPoint routine is used to determine the offset of the splice points in arrays A and B. The StitchMatrices routine discards and combines the two sets of data A and B according to the offset given by the FindStitchPoint routine. At the same time, the splicing points of the final data are recorded in the PrevStitchBins array for subsequent processing. When splicing multiple sets of data, PrevStitchBins can save old splice points. Conclusion Splicing two sets of data can get a set of ideal results. Figure 6 shows the FFT diagram of three sets of 8192 points of data stitched together using the above stitching technique (using 5 stitching points). The resulting FFT is almost the same as shown in Figure 2a above, based on 16,384 consecutive points.

Figure 6. Accurate FFT diagram after digital stitching.
Figure 6. Accurate FFT diagram after digital stitching.

Appendix A: StitchMatrices routine (StitchMatrices.m)
function [StitchedMatrix, StitchBins] = StitchMatrices (MatrixA, ... MatrixB, StitchNumber, PrevStitchBins, ... AdvCodeStitchEnabled, ReverseStitchEnabled);% Stitch Matrices Function% Revision 1.0%% By Donald Schelle, May 2005% Maxim Integrated Products% 120 San Gabriel Drive% Sunnyvale, CA, 94086%% This function will take two matrices (MatrixA and MatrixB), find a% given number (StitchNumber) of identical points in each and% concatenate the two matrices into one.%% Inputs = MatrixA, MatrixB (Data Matrices)% StitchNumber (Number of points to match)% PrevStitchBins (Bins of Previous Stitches in MatrixA)% AdvStitchEnabled (0 = NO, 1 = YES)% ReverseStitchEnabled (0 = NO, 1 = YES)% Output = StitchedMatrix (MatrixA + MatrixB)% StitchBins (bins of StitchedMatrix where the two% matrices were joined.)%% If the matrices can not be joined the function will output a NaN% for both the StitchedMatrix variable and the StitchBins variable% ---- ------------------------------------------------ ----------------------% Check to see that there are at least TWO StitchNumber Points if StitchNumber <2,% Requested less than 2 stitch points StitchedMatrix = NaN; StitchBins = NaN; return; end;% Calculate Size of MatrixA and MatrixB [SizeA, Junk] = size (MatrixA); [SizeB, Junk] = size (MatrixB);% Find the Stitch Points in MatrixB [NormalA, NormalB] = FindStitchPoint (MatrixA, MatrixB, ... StitchNumber, AdvCodeStitchEnabled);% Calculate the size of the NormalStitched Matrix NormalStitchedSize = NormalA + SizeB-NormalB + 1;% Check to see if the reverse function is enabled if ReverseStitchEnabled == 1,% Find Stitch Points for Reverse Matrices [ReverseB, ReverseA] = FindStitchPoint (MatrixB, MatrixA, ... StitchNumber, AdvCodeStitchEnabled);% Calculate the size of the Revered Stitched Matrix ReverseStitchedSize = ReverseB + SizeA-ReverseA + 1; else% Set Values ​​to defaults ReverseStitchedSize = NaN;% MatrixB / A Stitch Size ReverseA = NaN; ReverseB = NaN; end;% Check to if it's possible to s titch two matrices if isnan (NormalStitchedSize) & isnan (ReverseStitchedSize) == 1,% The two matrices could not be stitched StitchedMatrix = NaN; StitchBins = NaN; return; end;% ------------ --------- Normal Matrix Stitching Routine --------------- if (NormalStitchedSize> = ReverseStitchedSize) | ... isnan (ReverseStitchedSize) == 1,% Stitch MatrixB to the end of MatrixA StitchedMatrix = cat (1, MatrixA (1: NormalA), MatrixB (NormalB: SizeB));% Update Stitch Bins if isnan (PrevStitchBins) == 1,% There are no previous stitch bins StitchBins = [NormalA , NormalA + StitchNumber-1]; else% There are previous stitch bins% Check for Snipped Stitches [SizeStitchBins, Junk] = size (PrevStitchBins); while (PrevStitchBins (SizeStitchBins, 2)> (NormalA-1)),% Second Bin is snipped from matrix. Check if first bin is snipped. if (PrevStitchBins (SizeStitchBins, 1)> (NormalA-1)),% First Bin is snipped too. Delete Bin Pair PrevStitchBins = PrevStitchBins (1: (SizeStitchBins-1), :); else% First Bin is not snippe d but second bin is snipped% Shrink Stitch Size PrevStitchBins (SizeStitchBins, 2) = NormalA-1; end;% Calculate size of new PrevStitchBin Matrix [SizeStitchBins, Junk] = size (PrevStitchBins); end;% Insert New StitchBins [SizeStitchBins, Junk] = size (PrevStitchBins); StitchBins = PrevStitchBins; StitchBins (SizeStitchBins + 1, :) = ... [NormalA, NormalA + StitchNumber-1];% Check to see if the last two stitches need to be combined [SizeStitchBins, Junk] = size (StitchBins); if StitchBins (SizeStitchBins, 1) == ... (StitchBins ((SizeStitchBins-1), 2) + 1),% Combine Stitches StitchBins ((SizeStitchBins-1), 2) = StitchBins ((SizeStitchBins), 2);% Shorten StitchBin Matrix StitchBins = StitchBins (1: (SizeStitchBins-1), :); end; end; end;% ---------------- ----- Reverse Matrix Stitching Routine --------------- if (ReverseStitchedSize> = NormalStitchedSize) | ... isnan (NormalStitchedSize) == 1,% Stitch MatrixA to the end of MatrixB StitchedMatrix = cat (1, MatrixB (1: ReverseB), MatrixA (ReverseA: SizeA)) ;% Update Stitch Bins if isnan (PrevStitchBins) == 1,% There are no previous stitch bins StitchBins = [ReverseB, ReverseB + StitchNumber-1]; else% There are previous stitch bins% Check for Snipped Stitches while (PrevStitchBins (1 , 1) <(ReverseA + StitchNumber-1)),% First Bin is snipped from matrix. Check if second is snipped if (PrevStitchBins (1,2) <(ReverseA + StitchNumber-1)),% Second Bin is snipped too . Delete Bad Pair [SizeStitchBins, Junk] = size (PrevStitchBins); PrevStitchBins = PrevStitchBins (2: SizeStitchBins, :); else% Second Bin is not snipped, but first bin is snipped% Shrink Old Stitch Size PrevStitchBins (1,1) = ReverseA + StitchNumber-1; end; end;% Offset Stitch Bins by inserted amount StitchBins = PrevStitchBins + ReverseB-ReverseA + 1;% Make Room for new StitchBins [SizeStitchBins, Junk] = size (PrevStitchBins); StitchBins (2: SizeStitchBins +1, :) = StitchBins;% Insert New Stitch Bins StitchBins (1, :) = [ReverseB, ReverseB + StitchNumber-1];% Combine close stitche s if StitchBins (1,2) == StitchBins (2,1)-1,% Combine Stitches StitchBins (2,1) = StitchBins (1,1);% Shrink Stitch Bins Matrix [SizeStitchBins, Junk] = size (StitchBins ); StitchBins = StitchBins (2: SizeStitchBins, :); end; end; end; Appendix B: FindStitchPoint routine (FindStitchPoint.m)
function [OutputBinA, OutputBinB] = FindStitchPoint (MatrixA, MatrixB, ... MatchNumber, AdvancedStitchFindEnabled)% Find Stitch Points Function% Revision 1.0%% By Donald Schelle, May 2005% Maxim Integrated Products% 120 San Gabriel Drive% Sunnyvale, CA, 94086%% This function will find the IDEAL stitch point in Matrix B given% the number of data points to match%% Inputs = MatrixA% MatrixB% Number of Records to Match% Advanced Stitch Find Enabled (0 = NO, 1 = YES) % Output = (OutputBinA) End Bin of MatrixA to stitch data% (OutputBinB) Start Bin of Matrix B to stitch data%% If no bins are found, the function will output a NaN% ---------- -------------------------------------------------- --------------% Do argument error checking to see if there is enough arguments if nargin <2,% The user has not supplied enough arguments disp ('Function requires TWO Matrices'); OutputBinA = NaN; OutputBinB = NaN; return; elseif nargin <3, disp ('Select a number of points to match'); OutputBinA = NaN; O utputBinB = NaN; return; elseif nargin == 3,% Advanced code stitching is NOT enabled OutputBinA = NaN; AdvancedStitchFindEnabled = 0; end;% Ensure that Matrix A and B are single ROW matrices [row col] = size (MatrixA); if row> col, MatrixA = MatrixA '; end; [row col] = size (MatrixB); if row> col, MatrixB = MatrixB'; end;% Determine Size of Matrices [Junk, SizeA] = size (MatrixA); [Junk, SizeB] = size (MatrixB);% Initialize OutputBinB to NaN (which means that NO stitch points are found) OutputBinB = NaN;% Set initial size of BinA BinA = SizeA-MatchNumber + 1;% Initialize BinStop Variable BinStop = SizeA-100;% Loop to search through Matrix B numerous times. This loop is only% excuted once if Advanced Stitch Find is disabled. The loop will stop when% the 'ideal' stitch point is found while BinA> BinStop,% Stuff the Match Numbers into a separate Matrix MatchMatrix = MatrixA (BinA: BinA + MatchNumber-1);% Find all bins in MatrixB that match the first number of the Match Matrix MatchedBins = fi nd (MatrixB == MatchMatrix (1));% Compare the 2nd through nth number of the Match Matrix with the% prospective series of numbers in MatrixB% Calculate the size of the Matched Bins Matrix [Junk, SizeMatchedBins] = size (MatchedBins) ;% The advanced stitch mode optimizes search time by eliminating% bad stitch points that would result in the final concatenated% matrix being smaller than the last set of stitch points if isnan (OutputBinB) == 0,% A Stitch Point exists from a previous run. Elimiate bad stitch points% Calculate critical Stitch Point MatrixSize = OutputBinA + (SizeB-OutputBinB) + 1; CriticalBin = BinA + SizeB-MatrixSize-1;% Find maximum number in the MatchMatrix BadBin = find (MatchedBins> CriticalBin);% Eliminate Bad Bins (if there are any) if isempty (BadBin) == 0, MatchedBins = MatchedBins (1: BadBin (1)-1); end;% Calculate size of new Matched Bins Matrix [Junk, SizeMatchedBins] = size ( MatchedBins); end;% loop to cycle through initial matched bins for i = 1: SizeMatchedBins,% Che ck to make sure that there isn't a MatrixB overrun if (MatchedBins (i) + MatchNumber-1)> SizeB, break; end;% Assume that next few codes will match and set StitchBinGood = true StitchBinGood = 1;% Initialize MatchMatrixCounter Count = 1;% Cycle through MatrixB and compare Numbers with the MatchMatrix for j = MatchedBins (i) :( MatchedBins (i) + MatchNumber-1), if MatchMatrix (Count) == MatrixB (j),% Number is good, continue and check next number Count = Count + 1; else% Number is bad, break loop and try next sequence StitchBinGood = 0; break; end; end; if StitchBinGood == 1,% The optimal (first) stitch has been found% Record the End bin of MatrixA% Record the Start bin of MatrixB OutputBinA = BinA; OutputBinB = MatchedBins (i) + 1;% Calculate the size of the joined Matrix and a new BinStop # BinStop = OutputBinA-OutputBinB + 1; break; end ; end; if AdvancedStitchFindEnabled == 1,% Advanced Stitch Find is enabled and we should make a new match% matrix and search for these numbers BinA = BinA-1; e lse% Advanced Stitch Find is disabled and we should end the loop break; end; end;% Check to see if NO Bins Matched if isnan (OutputBinB) == 1,% NO Bins matched OutputBinA = NaN; end;

Big Water Tank Robot Vacuum Cleaners

Big Water Tank Robot Vacuum Cleaners,Ultrasonic Cleaner Water Tank,Robot Vacuum Cleaner,Virtual Blocker

NingBo CaiNiao Intelligent Technology Co., LTD , https://www.intelligentnewbot.com