EDA365电子工程师网

标题: 请教关于MATLAB读入外部数据进行眼图分析的过程的问题 [打印本页]

作者: mengzhuhao    时间: 2012-7-4 18:17
标题: 请教关于MATLAB读入外部数据进行眼图分析的过程的问题
请教关于MATLAB读入外部数据进行眼图分析的过程的问题; |+ V: |3 ^4 n. h/ G+ O
1 l+ U3 k% x$ ]/ ^$ @0 i( [% Q0 v' ]
使用的是MATLAB2012A的环境
$ N9 Z6 L% ~6 a. D* s; ], p+ M" i" `+ r% B) g+ |; g
1 ^# R. T9 C  u( {- T  g
现在有2组数据,clk与data7 C5 J' K, \# z6 c5 O9 ^# V
时钟的频率是400MHz(周期是5ns,脉宽是2.5ns),取样频率5ps,此时采集时间为500ns,共有数据点10万个
) @# k9 d  m8 n5 H时钟沿在每个码元的中间进行触发,时序关系是间隔2.5ns4 K5 _6 k2 i$ i% I# j/ P

8 M7 H! b% O: c# c但是使用“commscope.eyediagram”进行测量时提示错误:
1 @6 L6 j' r# r$ Z) k& [, q
, ]: u% b/ I& MWarning: The eye diagram does not have enough data. Analysis results may not be+ f5 d5 C$ g1 A5 e
accurate. To improve accuracy, enter more data using the UPDATE method.
/ S1 ?2 o; @: z  |) L- n, k> In commscope.eyemeasurements.analyze at 70
0 R. ?0 F; N; [/ i  In commscope.eyediagram.analyze at 859 d! V4 N, U' M, h( v+ P+ E( K7 H
  In Untitled at 24 0 _6 j9 n7 x/ E
Error using calcEyeCrossingTime (line 67)1 s0 q: Y, H; S+ O' {6 e
The ANALYZE method cannot determine crossing times. Check measurement setup values in9 v$ X  l% e1 W/ r' N
the MeasurementsSetup property. Also, the collected data may not be valid. See7 ^6 v. i' x5 V& O; c' n2 ]
documentation for description of valid eye diagrams.
7 B. F5 [. M4 G4 ]; s% X; s# {  ]
Error in commscope.eyemeasurements/analyze (line 85)/ a  P9 ^2 K8 K: F
calcEyeCrossingTime(this,.... {' E$ J" f: A5 O

" y8 v" V) d, b% w7 B( O+ |Error in commscope.eyediagram/analyze (line 85)
7 f  k. f6 V) y$ v& x% ]" d% g    this.Measurements.analyze(this);. y. i- w+ {' I$ f$ v

9 s' b! y3 ?( a- f( RError in Untitled (line 24)  M3 D, T9 c; q; G6 E% z- M
analyze(eyeObj);
/ C2 O+ K% s  D; }* Q/ |7 x7 ^% E6 _/ z1 w8 t

& C- X7 f! R. i3 v3 g. \怎么理解“The eye diagram does not have enough data”,按照时钟数据,波形有100个,为何还不够?
. ^( S( ?( D1 I. ~3 L& A+ s+ n9 k- `7 l' w# k- R- o
而且读入clk后显示的眼图感觉也不太对) q! F3 J' H; q% B: D

4 d6 C7 N/ k: L请熟悉眼图的朋友帮分析一下错误的地方在哪里3 [* `% u* p# P0 E! W) n9 D) K
6 W  W3 ?7 r4 h9 q
简单的代码如下:# J6 E! V" N# w) E3 ?
clear& o2 R9 c  H) x# o) p
close all$ B2 J- e' S5 `7 s. e% b/ J( p

: J( Q+ e9 }- C2 ^% h%filename ='F:\clk.txt';5 g0 F) \2 r7 Y+ ]4 m' e! H6 e$ E" O
filename ='F:\data.txt';
% _1 H7 p) `0 F2 O/ K, Ffid=fopen(filename,'r');" ?5 ^2 e- ~$ i3 x, s. w5 U8 }
[code,count]=fscanf(fid,'%f',100000);) M& n, {7 D( ^% B- i
plot(code);
1 t; _. p0 n* u; p% n+ o$ R; m! R# K) {3 c3 |  g
% Create an eye diagram and display properties) y! R+ {; m) I- m/ D( O- ?1 p
eyeObj = commscope.eyediagram(...# }$ e7 O; n: c$ E& ~- l0 s
    'SamplingFrequency', 200000000000, ...+ a  l' _6 Z6 u
    'SamplesPerSymbol', 500, ...) ]. U. F: ]7 P% @& }) P% n& F
    'SymbolsPerTrace',2,..., g+ V2 m. u& W6 t
    'MinimumAmplitude', 0.4, .... \1 j& H" a# |6 K9 H& z
    'MaximumAmplitude', 1.4, ..., j" ?3 d+ n0 s6 p$ A5 g2 H# C
    'PlotTimeOffse',0,...
% f) A, J! n4 o    'PlotType','2D Colo',...
/ p, w2 i9 E5 h* r9 B7 S5 p2 [" L    'ColorScale', 'log') %#ok' w! C9 Y# n: }( p  B

, q; x+ [( [+ [8 i8 m
% {- D5 v  Q; L6 j+ [  @  o, o; m. supdate(eyeObj, code);
8 T4 u" v/ W! @* h! S* f7 M3 Stitle('Noisy NRZ signal');xlabel('Time (sec)');ylabel('Amplitude');grid on;7 |+ b3 s1 R2 e5 D
analyze(eyeObj);0 n  ~1 l: K! J* ~
eyeObj.Measurements/ h$ R  K  P7 d- _) m6 {4 \

* a$ f  Z9 }" X% _ & E2 ?9 O. V: W! ]0 N2 B2 ]) K. R
' `4 p2 b' o" }. d
clk.rar (239.37 KB, 下载次数: 12) ! i3 O' W9 m5 H7 y6 X4 x$ ]
data.rar (232.47 KB, 下载次数: 11)
作者: yejialu    时间: 2012-7-5 15:18
楼主,有问题:
- S2 [2 N0 O$ f( W5 f! I2 l4 b1,400MHz 的时钟是差分信号吗?
. n% O8 ^3 F! c5 s5 W; ?' @; K* F2,你的数据中UI才100个, 确实短了。
. R; f( K, A$ Z3,主要问题出在 commscope.eyediagram,而这个函数你未提供。分析该函数,就应该能找到问题的根源。
作者: mengzhuhao    时间: 2012-7-5 18:07
yejialu 发表于 2012-7-5 15:18 ( S. @5 m" q1 P
楼主,有问题:
+ `, t  u' t9 n) a5 Q6 g6 S1,400MHz 的时钟是差分信号吗?
2 f" x/ A4 U4 G. g, O9 b2,你的数据中UI才100个, 确实短了。

+ C" g! j+ b. P! _) q+ J) Ccommscope.eyediagram( d7 H; q5 a" m+ H  t$ f
是在2012版本才有的 ,旧版本估计没有这个函数$ V. [3 Y% Q7 W* l# l$ d
3 G/ N' d$ |9 I9 Q

作者: mengzhuhao    时间: 2012-7-5 18:55
不太情况是哪里的设置问题,首先我用MATLAB自带的函数产生了一个码元数据,然后丢给眼图分析函数0 M8 a1 `) K  A
8 U1 y# J2 [3 m4 x: f9 |, I& c; B6 _
代码如下:
! Z9 {+ w4 J% `& I0 P& x5 S///////////////////////////////////////////////////////////////////////////////////////////////0 c8 f8 v7 k# A5 t( K8 O; q$ K
clear" W) L' a0 }+ i: w; W
close all5 x& G8 Y# u9 J2 ~6 ]3 _
   
6 H! M9 r8 a" t5 }, L% Initialize system parameters
0 E: z+ j( f2 n. _6 \1 j) O0 N, WFs = 10000000000; Rs = 200000000; nSamps = Fs/Rs; rollOff = 0.8; M=4;8 [2 _* u3 `" l7 b4 S6 U2 \1 m8 \: [: y
hMod = comm.QPSKModulator; % comm.QPSKModulator System object
5 _$ K3 A  T& Q6 p
/ b: ^' r, c8 J( N2 Z% Square root raised cosine filters8 |7 g  W9 {: \; J4 G' K
filtSpec = fdesign.pulseshaping(nSamps,'Square root raised cosine',...
: }0 M# X! w8 q) V' d; l$ c    'Nsym,Beta',6,rollOff);
8 {- Y) y4 _' L4 jhTxFlt = design(filtSpec); hTxFlt.PersistentMemory = true;
) ?+ p# O* s9 {0 n2 NhRxFlt = copy(hTxFlt); hTxFlt.Numerator = hTxFlt.Numerator*nSamps;
9 q3 O( z* v9 i5 @4 j, B
% J- K* y6 K' r) h* u8 \% Generate modulated and pulse shaped signal
  M. A( r' m1 ]/ O: }2 M3 QframeLen = 1258;, o2 y% e6 ?. p0 h* K! c, Y6 B# H6 Z
msgData = randi([0 M-1],frameLen,1);. `1 {$ w2 j+ M" h, P- x1 N; v" h
msgSymbols = step(hMod, msgData);
0 m/ Z0 N) j/ o/ omsgTx = hTxFlt.filter(upsample(msgSymbols, nSamps));) z. w9 x; Y8 J& I
2 J0 j! j) G- X# w! U0 B6 Q
t = 0:1/Fs:100/Rs-1/Fs; idx = round(t*Fs+1);! i1 w# ~! c, P9 M9 W
hFig = figure; plot(t, real(msgTx(idx)));& K  ~1 F9 {3 y7 N9 ^5 C
title('Modulated, filtered in-phase signal');
/ E8 D* G7 I  j" S& vxlabel('Time (sec)'); ylabel('Amplitude'); grid on;& h* q3 P! J2 T/ \/ Y
1 h) m& t$ Q9 c/ z3 ~" x) r
save('pqfile1.txt', 'msgTx','-ASCII')! }, i0 H0 D  S7 r$ i' R3 o+ s+ O

: K  h5 h2 T: A) M% Manage the figures
6 B. t6 G0 x; hmanagescattereyefig(hFig);3 \2 E, m0 j$ a; ]6 ?
( }' W  ?7 y$ o0 z+ H1 x
9 L5 S; t# w  I1 ~
% Create an eye diagram object1 ~# T4 S0 a3 b
eyeObj = commscope.eyediagram(...! I$ f- h; h; Z- p/ y* i
    'SamplingFrequency', Fs, ...
4 B* Z' C0 @/ C9 x7 T6 C; D% M. J    'SamplesPerSymbol', nSamps, ...
. s9 E  j# t' y4 |' a' s  Q8 x    'MinimumAmplitude', -1.4, ...9 H  q' z6 H) p8 o& u8 z9 A
    'MaximumAmplitude', 1.4, ...
, [4 A+ j0 d7 t! C) q1 A0 h    'SamplingFrequency', Fs, ...4 Z' S7 r3 J) s3 x; T. @6 Q) ^  ^
    'SamplesPerSymbol', nSamps, ...! _  S8 C% e) |) m) a
    'OperationMode', 'Complex Signal')
7 B/ ~7 |" S6 e% A" ^4 m* I, I. I. Y! ?5 e' A1 f
% Update the eye diagram object with the transmitted signal' T% g4 t$ p9 Q' w. y
eyeObj.update(msgTx);
4 R7 w5 f  G9 S! N: ^. p. o3 {( Y' o  M  N- t7 V
% Manage the figures
. j4 P$ P* K9 `0 W8 U% ?* D  [9 x! N4 @
analyze(eyeObj);1 x8 n; |1 p+ a+ d3 L
eyeObj.Measurements1 w" w6 y9 d/ W
///////////////////////////////////////////////////////////////////////////////////////////////
" X' {0 [2 U" b- b$ `" k6 S! s( n& l1 g" Y5 C. q. s( J( j/ ~8 k
然后读入pqfile1.txt文件,代码如下:1 e9 v" b& [/ h2 T
//////////////////////////////////////////////////////////////////////////////////////////////
7 e/ J, y, s, I. B6 A8 s, T. vclear
7 B6 u& J+ E( D' bclose all$ @' ~3 D# i" W% S* u
- x. N/ {5 L' M
Fs = 10000000000; Rs = 200000000; nSamps = Fs/Rs;
, r8 G* w! @% l0 l, H5 r7 v- Z3 [+ A8 L4 [3 ^& {3 |
filename ='pqfile1.txt';
7 @2 y8 \' _7 U: G( h5 F2 {# ffid=fopen(filename,'r');
4 o8 e4 K1 Y3 u6 M+ ~7 B[code,count]=fscanf(fid,'%f',62900);  t4 d# S0 e, i+ @2 F- N; t

; X: n7 x! _. z; M/ R& i' o5 b% Create an eye diagram and display properties
" w. @  D  e0 `eyeObj = commscope.eyediagram(...) X- i( J3 i9 R9 N9 o) x
    'SamplingFrequency', Fs, ...9 n# a1 T2 z! \
    'SamplesPerSymbol', nSamps, ...1 {' i9 v% K; U$ h$ R7 P
    'SymbolsPerTrace',2,...
& W5 }; n0 [. d    'MinimumAmplitude', -1.4, .... p: p' B+ Q4 ]4 E& v8 W
    'MaximumAmplitude', 1.4, ...4 h& D! x0 R' C' M
    'PlotTimeOffse',0,...  k' ~! W/ S4 R! v1 d
    'PlotType','2D Colo',...5 b; M* _/ G. y$ i1 |# M4 B; y3 v
    'ColorScale', 'log') %#ok; ^( |& ?! s+ r/ M2 b- o2 s
% }1 L- k  V3 Y. r* F

  M$ S$ s! S- f  Lupdate(eyeObj, code);6 K) Z) B) |% r9 O
title('Noisy NRZ signal');xlabel('Time (sec)');ylabel('Amplitude');grid on;* ]' _0 L5 U' p" P2 O: w+ p( q3 B
analyze(eyeObj);
4 R0 ?5 w$ e2 B) o* @# H7 Z6 k" FeyeObj.Measurements
, f* T; z5 U* |5 r, e9 T: v, R1 w//////////////////////////////////////////////////////////////////////////////////////////////# b5 g* J1 }3 N& i4 T
测量结果是:
. c- A( D4 {0 K3 Z                     Type: 'Eye Diagram Measurements') A3 `% \0 L* J1 o
              DisplayMode: 'Optimized for Real Signal', M: i+ B2 }) E8 Z8 _
          EyeCrossingTime: [2.4972e-09 7.5006e-09]
' G9 ^$ P$ W" [! j     EyeCrossingAmplitude: [-0.0109 -0.0117]& @- D) Q4 u* n
                 EyeDelay: 4.9989e-09
1 x; n) R# c! S3 D3 J                 EyeLevel: [-0.8496 0.8484]/ x6 E8 X0 a6 F, A
             EyeAmplitude: 1.6980" w0 j( d! g8 u$ _1 a( ~
                EyeHeight: 1.02870 y1 ?: b( O/ M: X5 v
    EyeCrossingPercentage: 49.3703
) U2 w8 j) C- ]) [       EyeOpeningVertical: 0.6723) ~. @+ h8 p5 V1 K5 e
                   EyeSNR: 7.6107' t. D9 Q, W& N+ I, q
            QualityFactor: 13.1948$ [0 t: T- J" @7 D
                 EyeWidth: 4.3069e-09
" I9 t% c8 O2 B, `! t6 t' @     EyeOpeningHorizontal: 4.8000e-09* q/ y/ W- T8 h9 F, u' o6 ^
             JitterRandom: 00 h$ g1 _! e" X6 d9 y0 g# ]
      JitterDeterministic: 2.0000e-10
) {) a% ]' V" }6 o9 R' g+ L              JitterTotal: 2.0000e-10# \2 L7 U/ c3 q7 W9 c+ y
                JitterRMS: 1.0180e-10& U4 k$ |6 p* s# |
         JitterPeakToPeak: 2.4000e-09
% i5 b. E& \# ]- b0 k0 j              EyeRiseTime: 2.1848e-091 B: _! C& @& o4 L
              EyeFallTime: 2.1804e-09
作者: mengzhuhao    时间: 2012-7-5 18:57
yejialu 发表于 2012-7-5 15:18
+ n; m0 J4 S/ J楼主,有问题:
8 |$ {0 X4 e& s) W1,400MHz 的时钟是差分信号吗?
$ u- e2 d4 w, I4 ]! r: C4 E2,你的数据中UI才100个, 确实短了。
- F+ \6 ~% Y7 [
例如在ansoft designer 里面
4 ~: `* d7 g2 ?& Q0 ]$ |
& g, O1 }/ B+ I/ e+ @0 N: v# R数据码元用的是 V_PRBS_JITTER
- U0 X! d# {, ^TR=TF=5E-11+ B( [0 M* \, r: S6 e' R# w( c
BITWIDTH=2.5E-9
. R- M7 t, e! X* F7 l0 Q! k' j( Y0 D4 f, h
仿真时间长度5us* r. q0 \2 D0 F8 I# r9 `- Q

& f6 V5 q7 W8 a: L2 p9 q导出数据的时候选择的step=100ps
, X" y' L( I* c4 W. n
& u2 f9 N$ `5 h9 @7 E是否这里的采样频率就可以理解为 Fs=100ps?# F* \* ]* g; y
因为DQS的时钟周期长度是5ns,每个码元的时间是2.5ns,所以每个码元的采样点数为2500/100=25个" t' J2 R1 f8 w1 `/ t1 |4 Z

; L9 B" r* O0 n9 i: e* L8 Z% r: _  g目前这样的数据导出再导入到matlab里面无法计算
作者: yejialu    时间: 2012-7-6 09:23
导出数据的时候选择的step=100ps! |% H1 F5 N. S! b4 @
是否这里的采样频率就可以理解为 Fs=100ps?3 c$ F! e8 M+ U+ t
step是采样的步长吧。采样频率应该是步长的倒数。. j9 C" }& g! w: n. F

作者: yejialu    时间: 2012-7-6 09:33
估计牵涉的函数也有好几个。 这样吧,你看提示错误在哪个函数, 去查代码。
$ n* T" X! ]- b+ S+ |2 CError using calcEyeCrossingTime (line 67)4 b- J% c, K$ \& I$ T" o1 y
Error in commscope.eyemeasurements/analyze (line 85)
$ }: w7 e# C# C+ JError in commscope.eyediagram/analyze (line 85)# r, _0 F( @, V5 t/ ~! p
Error in Untitled (line 24)。- R8 f/ S3 {- q, P& }  e4 J
The ANALYZE method cannot determine crossing times. Check measurement setup values in the MeasurementsSetup property. Also, the collected data may not be valid. See& w( O; F) h" L! b% z' {
documentation for description of valid eye diagrams.
. U  D5 W1 I1 M! N. l) w从这句话分析,我认为触发信号由于一个UI中的采样点过少,或者说采样频率过低。造成差分触发的P和N的交点无法判断, 也就 无法确定触发时间,无法去切割数据信号的UI,所以报错了。以上分析仅供参考。
作者: yejialu    时间: 2012-7-13 16:30
楼主人丢了吗?




欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2