首页 > 光子学 > 相位编码光子ADC

相位编码光子ADC

2013年6月17日 发表评论 阅读评论

好吧,你说我果然是闲的胃疼没事干是吧,老师只是布置了一个类似读书报告一样的东西当做期末的成绩,只要读上几篇相关paper,然后翻译一下就可以了,结果我果然醉翁之意不在酒,文章读不下去,跑去研究模型的仿真,而且那个结果还是显而易见的,仿真的意义并不大,但是,我闲的胃疼嘛。。。

说正题前,先说几句题外话,在某大牛的提醒下,突然发现博客里面的图片都应该是要用png才对的,尤其是关于那些学术性的东西,我之前一直担心贴图公式不好看,所以一直没这么干,老想尽办法用html来敲公式,像矩阵那些,每次都搞到胃疼,不贴图的原因很简单,图片白底,博客背景不是白底,所以这样就不好看,但是现在发现png是可以搞透明背景后,果断搞来了个photoshop。。。步骤简要说明,读取图片,双击背景图层,保存为普通图层,然后点击魔术棒工具,点击背景颜色,菜单里面的“选择”-》选区相似,然后delete,存储为web和设备所用格式,存为png24即可。
下面,正题。。。性质依旧,科普向。ADC,模数转换器,好吧,如果阁下不知道什么是ADC,那么赶紧右上角,因为如果这个也要详细说明的话,我这里的篇幅会急剧加长,而且离题较远。。。

然后,继续,我们知道电的ADC一般随着模拟频率越高越难做【这不是废话么!?!】,根据Robert H. Walden 于1999年对商用和实验室用的电子ADC分析结果表示,采样速率小于2MS/s时,精度取决于热噪声,精度在2MS/s到4GS/s范围内时,采样速率每增加一倍,精度就会降低一位,当模拟信号的频率一直提高的时候,传统的基于电的模数转换器的现有性能将会成为数字信号处理技术发展的瓶颈,现在的电子模数转换器难以获得数十Gb/s的采样速率和高的量化精度,传闻最高的电ADC的采样速率可以达到20GSPS, 其模拟带宽达到4GHz, 商用的电ADC的有效位数只有4至5位;【废话了这么多,就是说,高频率的电子ADC,不好搞。。】

然后呢?那怎么处理?光子学,或者叫微波光子学就出场了~我们可以把电信号调制到光信号上面,对光信号做一些神奇的处理,出来的结果可以是电信号经过ADC转换后的结果,也就是变成数字信号。

其实我微波光子学真的很弱,所以这里就说一种最基最弱,最简单,早在1975年就被提出的方法。。。【这么弱的方法,足够我上来水上一篇了~嘛,没办法嘛,因为是为了科普嘛,如果是要那些学了专业的光子学“姿势”才能懂的话,就不能叫科普了是么?】

原理图如下图所示:

adc1这幅图描述的是一个三位的ADC,作为科普,请听我把器件一个个说来:

Laser Light就是光源嘛,这里我们可以直接理解成它输出的就是很纯的正弦波(虽然现实中这种东西并不纯在),只是这个正弦波的频率很高,THZ级别的;上图中的每个采样脉冲其实只是一个包络,里面有几百个正弦波周期。

然后橙色衬底(Substrate)上面有红紫蓝三个东西,学名虽然是马赫-曾德尔调制器(Mach-Zehnder Modulator),简称MZM,不用了解太多,看上图,光从左边送进去,然后分成两路,两路光信号原本是一样的,就是光源的频率和幅度,但是呢,上面有两小横看见没?那个是电极,干什么用的呢?上面施加电压,就会使两路出现相位差,不同的电压会出现不同的相位差,然后再看右边,两路又合在一起了,我们可以理解成两路相加(虽然其实是叫干涉)。我们可以想象,如果两路没有相位差,那么出来的信号就是所谓的“同相相加”,如果相位差180度,那么MZM右边出来的就是什么也没有,嗯,那个东西就是这么简单,虽然现实中并不完全是这样。。。

然后MZM右边出来的那三个东西,其实不用管,detector直接理解成那里有一个PD就好了,PD是什么?就是说,有个光信号进来了,它就可以输出电流,电流正比于光的强度,强度是啥?你就这么想吧,输进来的是交流电,然后输出的是有效值。

Amplifier,放大器,作为分析原理,你可以完全忽略它,但是现实中做实验就要加上。

Comparator,比较器,反正就是输入电流大于一个值输出为1,小于那个值输出为0就是了。

我们可以想象,如果MZM的电极让相位差了180度,那么PD出来的电流自然就是0,如果是0度,那就有电流I,当相位差在0到180度中间的时候,输出的电流也应该是0安培到I安培之间的对吧。

左上那个Analog Signal就是我们的电信号,我们的目的就是希望得到它数字化的结果。

那究竟是怎么做ADC的呢?细心的人应该发现了,上面那幅图每个电极的长度不一样,这会导致什么结果呢?其实,电极长度不一样,结果就是同样的电压导致的相位改变不一样,点击越长,同样的电压可以改变更大的相位。

介绍完毕,然后再看看连接,我们的模拟信号连接到每个电极上,每个电极长度不一样,然后我们把每个点击的长度呈2的指数增长,也就是说,假设输入的模拟强度为V1的时候,可以让最上面那个MZM两路产生10°的相位差的话,那么在第二路就可以产生20°的相位差,第三路就是30°。

然后我们再说一件事情,我们假设MZM两路信号分别是sin(ωt)和sin(ωt+Φ),Φ就是因为电极产生的相位差,那么MZM输出就是E=sin(ωt)+sin(ωt+Φ),然后PD得到的结果I应该等于mean(E2),mean就是matlab语句,取均值的意思,那当Φ从0慢慢加大,因为三角函数的周期性,大家可以自己证明,PD的输出也就会呈正弦波变化的。当Φ=0的时候,PD输出的电流I在正弦波的峰值,Φ=π的时候,PD输出为0。

那我们再看下面这幅图:
adc2
它表示的是什么意思呢?三条曲线表示三个MZM,横坐标是电压,也就是输入的模拟信号的强度,纵坐标就是每个PD输出的电流的强度啦。再重申一边,输入的模拟信号的电压正比于MZM产生的相位差Φ,而Φ和I是正弦波关系,所以电压和I也应该是正弦波关系。

周期不同是因为电极长度不同嘛~

接下来上面说的那个比较器登场了,当输出的电流小于正弦波的偏置的时候,输出是0,大于的话输出是1,那么对于输进来的电压不就可以进行编码了么?

现在懂了?所以最后的结果就是,输进来的电压的强度不同的时候,输出的三位数字码就是它的数字量化的结果。

不过要注意,原理上是这么讲没错,但是事实上,MZM本身就要自带一个相位差,也就是说真正的相位差是电极电压产生的相位差加上自带的那个相位差,但是这并不影响对原理的理解,会影响的只有最后输出的编码的结果而已,比如说这个例子,三位的二进制数的大小代表信号的强弱,但是并不是什么情况下都是这样的,有时候编码的结果是格雷码,也就是说相邻的两个二进制数只差一位,那么二进制数的大小就不代表模拟信号的大小的,需要再做一步映射。比如说下面这幅图显示的就是四位格雷码的编码结果。

gelaima4最后,就是我吃饱了撑着没事干做的仿真,结果如下面两图所示,一个是四位的ADC,一个是三位的,其实只是改了代码的第一行而已。

不过呢,我这里采用的是格雷码的编码,所以最后的结果为了从格雷码映射回一个量化电压,写了个通用的格雷码产生函数。。。(囧)
bit33bit44代码在下面,最后再说两句:

一个是,因为科普目的,这里挑了个最简单的来说,虽然比较好理解,但是实际上并不太实用,因为可以想象,为了更高的精度,那么就要相位变化更加得快,那么就要更加长的电极长度,最后的结果就是尺寸过大,不适合于集成。另外就是长度加长,响应时间会变慢,这样就会影响性能,造成瓶颈。再再者,还有一个半波电压的问题,不过这个东西不需要出现在原理里面,而是MZM的工艺上的问题,这里就不说了。反正嘛,只是介绍一下简单的光子学怎么给电子做ADC。

第二个,哈哈哈哈哈哈哈。。。换了png感觉效果好很多有木有啊。。。

话说不需要敲什么公式,文字表达的话很痛快! 


Code:

function Taylor79()
bits = 3;

fc = 3*10^12;%光频率
fs = fc*10;%采样率
f_rf = 100 * 10^9;%射频频率
t = 0 : 1/fs : 1e-10/4;%时间

E0 = cos(2*pi*fc*t); %光信号
Vrf = cos(2*pi*f_rf*t)+1; %射频信号
Vmax = max(Vrf); %最大电压

result = zeros(1,length(t));
for i = 1 : length(t)
 code = zeros(1,bits);
 for B = 1:bits %每个MZM
 delta_fai = Vrf(i)/Vmax*pi*2^(B-1);%电压引起的相位偏置
 E1 = cos(2*pi*fc*t+delta_fai-pi);
 E = E0+E1;
 code(B) = (mean(E.^2)>1);
 end
 result(i) = decode(bits,code)/(2^bits-1)*Vmax;
end
plot(t,Vrf,'k--');
hold on;
plot(t,result,'r');
axis([min(t) max(t) 0 Vmax]);
legend('射频信号','采样信号');

%格雷码译码
function r = decode(bits,code)
geleicode =zeros(2^bits,bits);
geleicode = floor(repmat((1:2^bits)'-1,1,bits)./repmat(2.^(bits-(1:bits)),2^bits,1));
geleicode = 1-floor(abs(geleicode-(1.5+floor(geleicode/4)*4)));%生成格雷码

tt = sum(abs(geleicode-repmat(code,2^bits,1)),2);
[r k] = find(tt==0);
r = r-1;

【完】

本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com

分类: 光子学 标签: