高速串行信号测试中的眼图分析与应用

需积分: 9 6 下载量 59 浏览量 更新于2024-08-02 收藏 1.6MB PDF 举报
" Eye-mask test 是一项关于在数据通信测试中应用眼图分析的专业技术,主要针对测试工程师,如DM高级应用工程师黄腾,其电子邮件为thuang@tek.com,相关资料可访问www.tek.com。这项技术的发展源于通信技术的进步,如SONET和SDH在广域传输中的广泛应用,以及以太网的迅速崛起,推动了电子系统从传统的并行总线向高速串行总线的转变,以实现高度可扩展和点对点的接口技术,如点对点连接、交换式技术以及分包化协议。 高速串行总线与传统并行总线相比,具有显著的优势,例如光纤通道(FibreChannel)可以达到4.25 Gb/s甚至超过500 Gb/s的数据速率。眼图在这些高速通信中扮演关键角色,它定义了信号质量的可视化指标,通过比较实际信号波形(一般信号)与理想无噪声波形(眼图)来评估信号完整性。眼图特征包括上升沿和下降沿的陡峭程度、眼图的开放度以及噪声容限等,这些参数直接影响信号的误码率。 眼图的形成是一个过程,通过示波器进行观测,特别是在采样示波器(如Tektronix TDS8200ET和TDS6154C)上。这些仪器通常能利用用户提供的时钟、恢复时钟或与数据同步的码同步信号来捕获眼图。实时示波器如RT-Eye软件通过软件锁相环(PLL)技术实现时钟恢复,无需额外的同步信号或触发信号。 随着时钟速率的提升,如125 MCLK、250 MCLK到500 MCLK,眼图的质量会受到挑战,因为更高的时钟速度可能导致信号失真,从而影响眼图的清晰度。因此,在实际测试中,优化眼图质量对于确保高速串行通信的稳定性和可靠性至关重要。 本资源详细介绍了眼图分析的原理、应用、高速串行总线的特性,以及如何在示波器上准确测量和解读眼图,这对于理解并解决数据通信中的信号质量问题具有极高的实用价值。"

import idx2numpy import numpy as np from functions import * from two_layer_network import * #导入训练集和训练集对应的标签并将其初始化 X_train,T_train=idx2numpy.convert_from_file('emnist/emnist-letters-train-images-idx3-ubyte'),idx2numpy.convert_from_file('emnist/emnist-letters-train-labels-idx1-ubyte') X_train,T_train=X_train.copy(),T_train.copy() X_train=X_train.reshape((X_train.shape[0],-1)) T_train=T_train-1 T_train=np.eye(26)[T_train] #导入测试集和测试集对应的标签标签并将其初始化 X_test,T_test=idx2numpy.convert_from_file('emnist/emnist-letters-test-images-idx3-ubyte'),idx2numpy.convert_from_file('emnist/emnist-letters-test-labels-idx1-ubyte') X_test,T_test=X_test.copy(),T_test.copy() X_test=X_test.reshape((X_test.shape[0],-1)) T_test=T_test-1 T_test=np.eye(26)[T_test] network=TwoLayerNet(input_size=784,hidden_size=45,output_size=26) train_size=X_train.shape[0] batch_size=100 iters_num=100000 learning_rate=0.01 train_loss_list=[] train_acc_list=[] test_acc_list=[] iter_per_epoch=max(train_size/batch_size,1) for i in range(iters_num): batch_mask=np.random.choice(train_size,batch_size) X_batch=X_train[batch_mask] T_batch=T_train[batch_mask] #从数据集里抽取batch_size笔数据 #grad=network.numerical_gradient(X_batch,T_batch)(跑不出来,卡在None None) grad=network.gradient(X_batch,T_batch) #计算梯度 for key in ('W1','b1','W2','b2') : network.params[key]-=learning_rate*grad[key] #误差反向传播法调整参数 loss=network.loss(X_batch,T_batch) train_loss_list.append(loss) #记录学习过程 if i % iter_per_epoch==0: train_acc=network.accuracy(X_train,T_train) test_acc=network.accuracy(X_test,T_test) train_acc_list.append(train_acc) test_acc_list.append(test_acc) print(train_acc,test_acc) #调整学习率 if i > 0 and i % 1000 == 0 and i<3000: learning_rate *= 0.1 print("learning rate reduced to " + str(learning_rate)) print(network.params) print(train_acc_list[-1],test_acc_list[-1])如果我想存储参数,该怎么做

2023-05-29 上传