关键词: 数码拼接, 逻辑分析仪, 存储器限制, 离散, 连接, 基本数码拼接, 超前数码拼接, 反转数码拼接, 连续, INL, DNL, 积分非线性, 微分非线性 関連製品

# 逻辑分析仪内存不足? “拼”出解决之道!

## 介绍

 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%

*采用上述拼接技术对两组8K (8192个)数据进行拼接。为确保准确性，采用四组8192点数据(分别编号为1至4)重复本测试。每组测试所合成的数据取平均后列于测试数据的右侧。
† 直接连接总能得到100%的数据。
‡ 无法拼接数据。

## 结论

```function [StitchedMatrix, StitchBins] = StitchMatrices(MatrixA, ...
MatrixB, StitchNumber, PrevStitchBins, ...
AdvCodeStitchEnabled, ReverseStitchEnabled);
%Stitch Matrices Function
%Revision 1.0
%
%By Donald Schelle, May 2005
%Maxim Integrated
%160 Rio Robles
%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 stitch 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 snipped 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 stitches
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;
```

### 附录B：FindStitchPoint例程(FindStitchPoint.m)

```function [OutputBinA, OutputBinB]=FindStitchPoint(MatrixA, MatrixB, ...
MatchNumber, AdvancedStitchFindEnabled)
%Find Stitch Points Function
%Revision 1.0
%
%By Donald Schelle, May 2005
%Maxim Integrated
%160 Rio Robles
%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;
OutputBinB = 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 = find(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,
%Check 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;
else
%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;
```

 相关型号 MAX1213 免费样品 MAX1121 免费样品 MAX19542 免费样品 MAX19541 免费样品 MAX1123 免费样品 MAX1122 免费样品 MAX1215 免费样品 MAX1124 免费样品 MAX1214 免费样品
 下一步 EE-Mail 订阅EE-Mail，接收关于您感兴趣的新文档的自动通知。
 © , Maxim Integrated Products, Inc.
The content on this webpage is protected by copyright laws of the United States and of foreign countries. For requests to copy this content, contact us.
 APP 3557: 应用笔记 3557,AN3557, AN 3557, APP3557, Appnote3557, Appnote 3557