摘要

这篇博客主要介绍DMD作为闪耀光栅的衍射效应。首先我们介绍单缝衍射、多缝衍射和光栅方程,然后讨论闪耀光栅,最后仿真给出不同入射角下的闪耀判据和光栅光谱的二维模拟。

DMD微镜翻转状态

现在wavefront shaping (WFS) 的实验多采用数字微镜阵列(DMD),可用于快速波前整形。DMD是一种二元衍射光学元件,本质是个反射型闪耀光栅,可用于振幅的周期性调制。以DLP7000[1]芯片为例,其1024×7681024\times7681024×768的微镜阵列相对flat state可翻转 ±120\pm12^{0}±120(对应“on-state”和“off-state”),刷新率可高达23KHz,见下图[1]:

单缝衍射

先简单提一下单缝衍射。考虑如下装置,单缝宽为a,在θ方向可以将单缝面元n等分,则相邻面元之间的光程差为Δδ=asinθ/n\Delta\delta=asin\theta/nΔδ=asinθ/n,相位差为Δϕ=2πasinθλn\Delta\phi=\frac{2\pi asin\theta}{\lambda n}Δϕ=λn2πasinθ​,所有面元在FFF点产生的扰动振幅为ΔAsin(nΔϕ/2)sin(Δϕ/2)\Delta A\frac{sin(n\Delta\phi /2)}{sin(\Delta\phi /2)}ΔAsin(Δϕ/2)sin(nΔϕ/2)​。由于Δϕ\Delta\phiΔϕ很小,有sin(Δϕ)≈Δϕsin(\Delta\phi)\approx\Delta\phisin(Δϕ)≈Δϕ。因此FFF点振幅为Asin(α)αA\frac{sin(\alpha)}{\alpha}Aαsin(α)​,其中A=nΔAA=n\Delta AA=nΔA,α=πasinθ/λ\alpha=\pi asin\theta/\lambdaα=πasinθ/λ.

多缝衍射 (光栅衍射)[2]

对于光栅衍射,多缝按缝距d将入射光波前分为N个部分,每个部分成为缝宽为a的单缝而发生夫琅禾费衍射。这样多个单缝衍射复振幅场发生缝间干涉而形成多缝衍射。

由单缝衍射理论可知,对于波长为λ\lambdaλ、θ\thetaθ角入射光,中心单缝衍射在透镜后焦面上一点P的复振幅为
E~(P)=A(sinαα)\widetilde{E}(P)=A(\frac{sin\alpha}{\alpha})E(P)=A(αsinα​)其中振幅AAA为常数,α=πλasinθ\alpha=\frac{\pi}{\lambda}asin\thetaα=λπ​asinθ。则相邻单缝在P点的衍射幅值与中心单缝的相同,只是产生一个相位差:
δ=2πλdsinθ\delta=\frac{2\pi}{\lambda}dsin\thetaδ=λ2π​dsinθ由此多缝在P点的复振幅为N个振幅相同、相邻相位差恒定的多光束干涉结果。
E~(P)=A(sinαα){1+exp(iδ)+...+exp(i(N−1)δ}=A(sinαα)(sinNδ/2sinδ/2)exp(i(N−1)δ/2)\widetilde{E}(P)=A(\frac{sin\alpha}{\alpha})\{1+exp(i\delta)+...+exp(i(N-1)\delta\}\\ =A(\frac{sin\alpha}{\alpha})(\frac{sinN\delta/2}{sin\delta/2})exp(i(N-1)\delta/2)E(P)=A(αsinα​){1+exp(iδ)+...+exp(i(N−1)δ}=A(αsinα​)(sinδ/2sinNδ/2​)exp(i(N−1)δ/2)

因此P点光强为I(P)=I0(sinαα)2(sinNδ/2sinδ/2)2I(P)=I_0(\frac{sin\alpha}{\alpha})^2(\frac{sinN\delta/2}{sin\delta/2})^2I(P)=I0​(αsinα​)2(sinδ/2sinNδ/2​)2

其中I0=∣A∣2I_0 = \left| A \right|^2I0​=∣A∣2是单缝在P点的光强,(sinαα)2(\frac{sin\alpha}{\alpha})^2(αsinα​)2为单缝衍射因子,(sinNδ/2sinδ/2)2(\frac{sinN\delta/2}{sin\delta/2})^2(sinδ/2sinNδ/2​)2为多光束干涉因子。

分析
每个单缝的衍射光强来自于各单缝的光振幅矢量I0I_0I0​的大小,并随衍射角 θ\thetaθ而变化。而多缝干涉主极大的光强为 N2I0(sinαα)2N^2I_0(\frac{sin\alpha}{\alpha})^2N2I0​(αsinα​)2,因此光栅衍射图样是多缝干涉光强分布受单缝衍射光强分布调制的结果

光栅方程

衍射光栅可对入射光波的振幅或相位进行空间周期性调制,按工作方式可分为透射式和反射式。光栅最重要的性能就是用作分光元件,值得一提的是近些年空间光调制器 (SLM, DMD & DM)用于波前整形有系列应用前景。一般讨论光栅的分光性能包括光栅方程、光栅的色散和色分辨本领,这里单讲光栅方程。

由光栅衍射的多光束干涉因子可知,当
δ=2πλdsinθ=2mπm=0,±1,±2,⋯\delta=\frac{2\pi}{\lambda}dsin\theta=2m\pi \quad m=0,\pm1,\pm2,\cdotsδ=λ2π​dsinθ=2mπm=0,±1,±2,⋯即dsinθ=mλm=0,±1,±2,⋯dsin\theta=m\lambda \quad m=0,\pm1,\pm2,\cdotsdsinθ=mλm=0,±1,±2,⋯,相邻光束相位差为2π2\pi2π整数倍时发生干涉叠加,形成主极大,该式子决定各级干涉主极大位置,称为光栅方程。

上式为垂直光栅入射的情形,下面分析更为一般的斜入射情形,导出光栅方程。


平行光以 α\alphaα 角斜入射时,考察的衍射光与入射光分别位于光栅法线的两侧(左图)或同侧(右图)。无论光栅为透射式还是反射式,两相邻光束的光程差为Δ=dsinα±dsinβ\Delta=dsin\alpha \pm dsin\betaΔ=dsinα±dsinβ,因此光栅方程的一般形式为d(sinα±sinβ)=mλm=0,±1,±2,⋯d(sin\alpha \pm sin\beta)=m\lambda \quad m=0,\pm1,\pm2,\cdotsd(sinα±sinβ)=mλm=0,±1,±2,⋯若衍射光与入射光在光栅法线同侧上式取正号,异侧取负号。

事实上,斜入射时多缝夫琅禾费衍射的强度分布公式[3]也随之为:I(θi,θo)=I0(sinα′α′)2(sinNδ′/2sinδ′/2)2I_(\theta_i,\theta_o)=I_0(\frac{sin{\alpha}'}{{\alpha}'})^2(\frac{sinN{\delta}'/2}{sin{\delta}'/2})^2I(​θi​,θo​)=I0​(α′sinα′​)2(sinδ′/2sinNδ′/2​)2其中 α′=πaλ(sinθi±sinθo){\alpha}'=\frac{\pi a}{\lambda}(sin\theta_i \pm sin\theta_o)α′=λπa​(sinθi​±sinθo​), δ′=2πdλ(sinθi±sinθo){\delta}'=\frac{2\pi d}{\lambda}(sin\theta_i \pm sin\theta_o)δ′=λ2πd​(sinθi​±sinθo​)

闪耀光栅[2,3]

前面讲到的光栅有一个很大缺点,作为分光元件,无色散的0级主极大占了总光能很大一部分,而其余每级光谱的强度很弱。这是由于单缝衍射中央极大与缝间干涉0级重叠造成的。实际上光栅使用时可能只利用它的某一级光谱。下面介绍的闪耀光栅能把单缝衍射0级与缝间干涉0级错开,将光能转移并集中到所需的某一级光谱上,实现该级光谱的闪耀。

目前闪耀光栅多是平面反射光栅。在平坦光栅面上刻划出一系列锯齿状槽面。刻槽面与光栅面的夹角称为闪耀角 θB\theta_BθB​,如下图[4]所示

有两种典型照明方式:

  • 平行光沿刻槽面法线入射(Littrow自准式入射)
    这时单缝衍射主极大方向为几何光学的反射方向,即沿着原方向返回。而对缝间干涉,以光栅面法线为基准,入射角和反射角都为 θB\theta_BθB​。由斜入射情形的光栅方程可知,决定各级干涉主极大的式子(闪耀条件)为2dsinθB=mλ2dsin\theta_B=m\lambda2dsinθB​=mλ

当 m=1m=1m=1时,满足该式子的λ1\lambda_{1}λ1​为1级闪耀波长,光栅的单缝衍射0级主极大正好落在λ1\lambda_{1}λ1​光波的干涉1级谱线上。此外,通过设计闪耀角,可以改变干涉级 mmm,使光栅适用于某一特定波段的某级光谱的闪耀。

  • 平行光沿光栅面法线入射
    这时入射角为000,反射角为 2θB2\theta_B2θB​,这时相邻两束光的光程差为ΔL=dsin2θB\Delta L = dsin2\theta_BΔL=dsin2θB​。类似的,可用斜入射情形的光栅方程分析该情况。

需要指出的是,
(1) 单缝衍射主极大方向就是入射光的反射方向,若该方向上相邻两束光的光程差满足光栅方程的 mmm 级,就能实现单缝衍射0级与缝间干涉 mmm 级的重合。
(2)在闪耀光栅不变且入射光为某一特定波段的情况下,由于上述照明方式规定了入射角,只可能激发某级光谱的闪耀;而通过改变入射角 α\alphaα 可改变相邻光束相位差,实现不同干涉级光谱的闪耀。

Python仿真[5,6]

这里主要参考的是Sebastien在他的Wavefront Shaping网站给出的Setting up a DMD: Diffraction effects[5],事实上也是这篇教程激励我去重新回顾光栅衍射的知识并总结成博客。感谢大佬为Wavefront Shaping社区开源贡献,也希望光学社区多学习一下CS的开源精神(狗头)

不同入射角下的闪耀判据

仿真时需要注意以下几点:

  1. 观察最开始的DMD微镜翻转状态示意图,由于微镜朝45度轴向排列,因此正常在冠状面内定义的闪耀角、入射角和反射角都需要按照正切值除以2\sqrt{2}2​的方式进行校正(图解如下)

  2. 观察闪耀光栅的示意图,考虑衍射光与入射光在光栅面法线同/异侧光程差取正负号的问题,一般情形下的入射角 α\alphaα 和反射角 β\betaβ 有如下关系:α+β=2θB\alpha+\beta = 2\theta_Bα+β=2θB​ 这样两相邻光束的光程差可直接写为Δ=dsinα+dsinβ\Delta=dsin\alpha + dsin\betaΔ=dsinα+dsinβ

  3. 考虑一般情形的闪耀条件:m=d(sinα+sin(2θB−α))λm=\frac{d(sin\alpha+sin(2\theta_B-\alpha))}{\lambda}m=λd(sinα+sin(2θB​−α))​在闪耀光栅不变且入射光为某一特定波段时,通过改变入射角 α\alphaα 可改变衍射方向上相邻光束的相位差,若 mmm 为整数,可实现mmm级光谱的闪耀。因此可定义闪耀判据为:μ=∣m%1−0.5∣\mu=\left|m\%1-0.5 \right|μ=∣m%1−0.5∣ μ\muμ 在0∼0.50\sim0.50∼0.5之间,当μ\muμ接近 0.50.50.5 时, mmm 接近整数达到闪耀条件,该级光谱闪耀;当μ\muμ接近 000 时, mmm 接近整数+0.5+0.5+0.5,光能分散在多级光谱上。

  4. 由于对称性,仿真时只考虑X或Y轴的入射角,这样转变为一个1维问题。

以 532nm532nm532nm 激光,DMD芯片DLP7000(微镜间距d=13.68μmd=13.68\mu md=13.68μm,闪耀角θB=120\theta_B=12^{0}θB​=120)为例,不同入射角下的闪耀判据绘成曲线如下:
这里我们给出了几种入射情况:
a. α=0\alpha=0α=0,沿光栅面法线入射,此时衍射方向为从光栅面法线到刻槽面法线方向再偏离1个闪耀角;
b. α=θB\alpha=\theta_Bα=θB​,沿刻槽面法线入射,此时衍射方向为原路反向;
c. α=2θB\alpha=2\theta_Bα=2θB​,从光栅面法线到刻槽面法线方向再偏离1个闪耀角入射,此时衍射方向为沿光栅面法线出射
d. α=41.920\alpha=41.92^{0}α=41.920,做校准后α1D=32.410\alpha_{1D}=32.41^{0}α1D​=32.410,闪耀角θ1D=8.550\theta_{1D}=8.55^{0}θ1D​=8.550,该入射方向能实现m=d(sinα1D+sin(2θ1D−α1D))λ≈7m=\frac{d(sin\alpha_{1D}+sin(2\theta_{1D}-\alpha_{1D}))}{\lambda}\approx7m=λd(sinα1D​+sin(2θ1D​−α1D​))​≈7级干涉光谱的闪耀。这是该DMD对特定波段532nm532nm532nm激光在入射角由0∼9000\sim90^{0}0∼900增加过程中的实现的第一次光谱闪耀,干涉级m=7m=7m=7。

光栅光谱的二维模拟

有了上述分析,这里直接给出入射角为 α=240\alpha=24^{0}α=240和 α=41.920\alpha=41.92^{0}α=41.920 两种情况的DMD衍射光场分布和对应的光栅衍射图样。

(1)入射角为 α=240\alpha=24^{0}α=240,光能分散在各级光谱

(2)入射角为α=41.920\alpha=41.92^{0}α=41.920 ,第一次光谱闪耀,干涉级m=7m=7m=7

Source code[6]

# -*- coding: utf-8 -*-
# Written by Sebastien Popoff, adapted by Shengfu Cheng
# 08/06/2020
import matplotlib.pyplot as plt
import numpy as npimport matplotlib as mpl
from matplotlib import rc## Parameters of DMD
d = 13.68 #micromirror pitch
gamma = 12./180*np.pi  #micromirror tilt angle relative to flat state#Use sqrt(2) to calibrate the incident angle and tilt angle
#the angle of rotation of the mirrors is at 45 degrees compared to the axis of the pixels
gamma_1D = np.arctan(np.tan(gamma)/np.sqrt(2))
_lambda = 532e-3 #wavelength## A simple criterion matching the diffraction angle and the reflection angle
_beta = lambda x: 2*gamma_1D-x
m = lambda x: 1.*d/_lambda * (np.sin(x)+np.sin(_beta(x)))## Test different incident angles
# when m is an integer, we are at a blazing angle with a maximum of energy at the order along the optical axis
# whem m is n+1/2, the enregy is spread over many diffraction orders not aligned with the optical axis
alpha_vec = np.linspace(-np.pi/2,np.pi/2,1000)
alpha_1D_vec = np.arctan(np.tan(alpha_vec)/np.sqrt(2))
criterion = np.abs(np.mod([m(a) for a in alpha_1D_vec],1)-0.5)
#find blaze angle
alpha_loc = np.linspace(0,5*np.pi/18,100)
blaze_angle = 0
for a in alpha_loc:if np.abs(np.mod(m(np.arctan(np.tan(a)/np.sqrt(2))),1)-0.5) > np.abs(np.mod(m(np.arctan(np.tan(blaze_angle)/np.sqrt(2))),1)-0.5):blaze_angle = aplt.figure()
plt.plot(alpha_vec*180/np.pi,criterion,linewidth = 1)plt.plot([0,0],[0.,0.5],color = 'C3',label = r'$\alpha = 0, \mu = %.4f$' \% np.abs(np.mod(m(0),1)-0.5), linewidth = 1) #At Normal line of grating surface plt.plot([gamma*180/np.pi,gamma*180/np.pi],[0.,0.5],color = 'C1',label = r'$\alpha = \theta_B, \mu = %.4f$' \% np.abs(np.mod(m(gamma_1D),1)-0.5),linewidth = 1) #At Normal line of groove surface plt.plot([2*gamma*180/np.pi,2*gamma*180/np.pi],[0.,0.5],color = 'C2',label = r'$\alpha = 2\theta_B, \mu = %.4f$' \% np.abs(np.mod(m(2*gamma_1D),1)-0.5), linewidth = 1) #2-time angles away from the normal of grating surfaceplt.plot([blaze_angle*180/np.pi,blaze_angle*180/np.pi],[0.,0.5],color = 'C4',label = r'$\alpha = %.2f^{0}, \mu = %.4f$' \% (blaze_angle*180/np.pi, np.abs(np.mod(m(np.arctan(np.tan(blaze_angle)/np.sqrt(2))),1)-0.5)), linewidth = 1) #blaze angleplt.xticks(np.arange(-90,90,10))
plt.yticks(np.arange(0,0.55,0.05))
plt.title(r'Blazing condition when $d=%.1f\mu m, \lambda =%g nm$' % (d,1e3*_lambda))
plt.legend(loc='center right')
plt.ylabel(r'Blazing criterion $\mu$')
plt.xlabel(r'Incident angle $\alpha$')## A full numerical simulation of the Fourier plane for an all-on configuration
# alpha = 24/180*np.pi # Incident angle
alpha = blaze_angle
alpha_1D = np.arctan(np.tan(alpha)/np.sqrt(2))
beta = -alpha +2*gamma # reflection angle
alpha_1D = np.arctan(np.tan(alpha)/np.sqrt(2))
beta_1D = 2*gamma_1D-alpha_1D#np.arctan(np.tan(beta)/np.sqrt(2))
N = 20 # number of mirrors in each direction
g = 2 # gap between mirrors in micron
res = 10 # pixels per mirror
Nx = N*res## Pixelate image function
f = np.ones([N,N]) # all-on configuration
## Phase slope due to incident and reflection angle
X,Y = np.meshgrid(np.arange(N),np.arange(N))
phi = np.exp((X-Y)*1j*2*np.pi/_lambda*d*(np.sin(alpha_1D)+np.sin(beta_1D))) ## cell unit
Cell = np.zeros([res,res])
gpix = int(np.round(g/(2.*d)*res))
Cell[gpix:res-gpix,gpix:res-gpix] = 1.
## Mirror image
MI = np.zeros([Nx,Nx],dtype='complex')
for i in range(N):for j in range(N):MI[i*res:(i+1)*res,j*res:(j+1)*res]= f[i,j]*phi[i,j]*Cell
plt.figure()
plt.imshow(np.real(MI),interpolation = 'None')## In the Fourier plane
coeff = 5
FP = np.fft.fftshift(np.fft.fft2(MI,s=[coeff*Nx,coeff*Nx]))
ROIsize = 500
ROI = 1
plt.figure()
plt.imshow((np.abs(FP[coeff*Nx//2-ROIsize//2:coeff*Nx//2+ROIsize//2,coeff*Nx//2-ROIsize//2:coeff*Nx//2+ROIsize//2])),interpolation = 'None')
plt.clim([0,(np.max(np.abs(FP)))/1.5])
plt.scatter(ROIsize//2, ROIsize//2, s=200, edgecolors='red',alpha = 0.5,c='yellow',linewidths= 1.,  marker='x')plt.show()

Reference

[1] DLP7000芯片手册
[2] 郁道银等.《工程光学》第4版
[3] 赵凯华 《新概念物理教程-光学》
[4] Wikipedia: Blazed_grating
[5] [tutorial] Setting up a DMD: Diffraction effects
[6] blazing_angle_DMD.ipynb

闪耀光栅 (DMD) 的衍射效应相关推荐

  1. 干涉测量中的衍射效应

    1.引言 干涉测量中的误差包含随机误差与系统误差.通过多次测量取平均值可以减少随机误差,但是系统误差无法平均.衍射效应引起的误差,如几何误差,是系统性的,不能通过取平均的方式来减少.如果未校准,他们将 ...

  2. 光的干涉衍射计算机模拟仿真技术,单缝衍射的计算机仿真模拟研究

    采用多个动态窗口,对单缝衍射实验的内容进行摸拟和分析,从衍射装置.衍射效果到结果分析分别演示,实现了实验.分析的全过程.对夫琅禾费衍射实验的结果分析采用半波带分析法,在夫琅禾费衍射示意图中实现了如下动 ...

  3. 如何利用场追迹控制衍射的包含

    1. 摘要 VirtualLab Fusion包括一系列建模方法便于用户可以地调整光学仿真的精度级别和时间.不仅如此,这种功能还有助于隔离物理原因产生的不同影响.在本示例中,我们提出了一个清晰的工作流 ...

  4. 高光谱知识(1)-高光谱成像技术的理解

    系列文章目录 高光谱技术可以获得待观测目标或场景的连续单色光谱图像,并通过空间维(x, y)数据和光谱维(λ)数据共同组成三维观测数据立方体,从而为研究人员提供探测目标或场景中的每一个点的空间和光谱特 ...

  5. 计算鬼成像学习笔记一:简介

    这里写目录标题 1 何为鬼成像? 1.1 传统光学成像:所见即所得 1.2 鬼成像:又称关联成像 1.2.1 桶探测器: 1.2.2 CCD 1.2.3 空间分辨率: 1.2.4 光源 1.2.5 纠 ...

  6. 超衍射极限分辨率-STED,SIM,PALM,FPM等

    目录 1.突破衍射极限的方法.. 3 1.1受激发射损耗荧光显微成像技术(STED).. 3 1.2结构光照明超分辨光学显微成像技术(SIM) 6 2绕开衍射极限的方法... 11 2.1随机光学重构 ...

  7. 学习全基因组测序数据分析1:测序技术

    本文转载自微信公众号解螺旋的矿工,作者为黄树嘉,已获得授权.黄树嘉写了WGS系列的文章,堪称教科书级别的生物信息学习材料.虽然本平台只关注宏基因组领域,但此系列文章知识体系完善.干货满满,是值得每位专 ...

  8. 揭晓你所不了解的第三代测序技术

    揭晓你所不了解的第三代测序技术 浏览 5440 ·讨论 1 biozy楼主 发布于 2015-07-10 只看楼主 什么是第三代测序技术? 第三代测序技术是指单分子测序技术.DNA测序时,不需要经过P ...

  9. bsp模型适用于图计算_CODE V微信简报:光束合成传播算法(BSP)

    强大.高效的衍射分析工具 无论你设计的是哪种光学系统--激光.微透镜阵列.自由空间光子器件.CCD,或者一些天文应用--CODE V的光束合成传播工具(BSP)比任何其他商业工具更准确和高效地进行光束 ...

  10. 《ZEMAX光学设计超级学习手册》一一2.2 几何光学像质量评价

    本节书摘来自异步社区出版社<ZEMAX光学设计超级学习手册>一书中的第2章,第2.2节,作者: 林晓阳 更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 几 ...

最新文章

  1. JQuery EasyUi之界面设计——前言与界面效果(一)
  2. python使用matplotlib可视化线图(line plot)、设置X轴坐标的下限和上限数值(setting the lower and upper bound of the x axis)
  3. iframe,window,滚动栏的一些问题
  4. python数据挖掘主要特点_【Python数据挖掘】第六篇--特征工程
  5. ifconfig 命令找不到解决
  6. 操作主机 Infrastructure Master[为企业维护windows server 2008系列八]
  7. 【51单片机快速入门指南】2.2:任意位/任意长度数码管显示数字、小数
  8. 天地图卫星地图_AutoCAD使用卫星地图
  9. R7-12 h0008.卡片延伸长度 (15 分)
  10. Python模块 - itertools循环器模块
  11. 课程设计2 终结版-未测试
  12. HTTP权威指南笔记
  13. java毕业设计仓库管理系统Mybatis+系统+数据库+调试部署
  14. treemap倒叙_lua 模拟Treemap 排序
  15. cesium实现面状要素的立体拉伸效果
  16. 大三第一次参加ACM ICPC Regional打了两块铁,怎么办?
  17. 如何使用mp4v2解析mp4文件,抽取音视频数据帧【源码】【mp4】【NVR】
  18. 三菱转以太网模块快速应用起步对产品的初步测试
  19. nginx+tomcat动态代理
  20. 前端实现图片悬浮_前端技巧集:三步制作图片悬浮文字

热门文章

  1. 在线Api接口,网易云音乐api数据完整接口文档,QQ音乐在线api接口文档,电商api开放数据接口文档分享,小说ap接口,漫画api接口
  2. cjson构建_cJSON结构体构建
  3. Qt中使用QtDataVisualization实时绘制雷达点云三维散点图
  4. upf模板,来自synopsys rm golden.upf
  5. m3u8播放器-DPlayer,P2P加速 记忆播放
  6. 老男孩python作业题_老男孩python学习第一天作业
  7. 2015校招某度WEB前端笔试题
  8. Windows11系统下解压文件后缀为.tar(.gz)的压缩文件
  9. 超靠谱,一文教会你如何注册申请安徽省实用新型专利
  10. Java基础——链表