- 这是一道很彻底的光学题,可以参考
- 5.7 振幅型平面透射光栅 光学(第三版)郭永康 主编 朱建华 副主编
-
CUPT前国赛队员倾情写作
英文题目
When a compact disc or DVD is illuminated with light coming from a filament lamp in such a way that only rays with large angles of incidence are selected, a clear green line can be observed. The colour varies upon slightly changing the angle of the disc. Explain and investigate this phenomenon.
- 不翻译了,搞物理的同学不需要别人的翻译
符号规定
符号 | 含义 |
D | 观察点 |
S | 光源 |
P | 反射点 |
O | 光盘的圆心 |
a | 光盘刻槽宽度 |
𝑑 | O点到SD的距离 |
𝑟 | SP之间的距离 |
光盘中心环半径 | |
𝛼 | 角SPD的一半 |
𝛽 | 光盘与 水平方向的夹角 |
理论推导01
装置示意图(由一美丽的工科女提供):
程序模拟
- 先确认一些事情:
- 你点赞,收藏没有?
- 可见光的波长怎么样?
- color = ["红光","橙光","黄光","绿光","青色","蓝光","紫光"]
- color_wavelength = [[760*10**-9,622*10**-9],[622*10**-9,597*10**-9],\
[597*10**-9,577*10**-9],[577*10**-9,492*10**-9],\
[492*10**-9,450*10**-9],[450*10**-9,435*10**-9],\
[435*10**-9,390*10**-9]]
源代码
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.rcParams["font.sans-serif"] = ["SimHei"]
matplotlib.rcParams["axes.unicode_minus"] = False
#120型号光盘
C = 1
a = 1.5 * 10**-6
N = int((120-15)* 10**-3/a)
alpha = 0.22 #(arccos alpha \apx 30)
beta = 0.32
plt.title("归一化前特定角度下观察到的可见光光强分布")
color = ["红光","橙光","黄光","绿光","青色","蓝光","紫光"]
color_wavelength = [[760*10**-9,622*10**-9],[622*10**-9,597*10**-9],\
[597*10**-9,577*10**-9],[577*10**-9,492*10**-9],\
[492*10**-9,450*10**-9],[450*10**-9,435*10**-9],\
[435*10**-9,390*10**-9]]
for i in range(7):
plt.scatter(color_wavelength[i],[0,0],c="black",s=3)
plt.text(color_wavelength[i][0]*1/4+color_wavelength[i][1]*3/4,0,color[i],size=5)
Lambda = np.linspace(390*10**-9,780*10**-9,1000)
I = np.zeros(1000)
for i in range(1000):
I[i] = C*np.sin((N+1)*np.pi*a*np.cos(beta)/Lambda[i]/np.cos(alpha))**2/np.sin(np.pi*a*np.cos(beta)/Lambda[i]/np.cos(alpha))**2
plt.plot(Lambda,I,label="alpha:"+str(round(alpha,2))+"beta:"+str(round(beta,2)),c="red")
plt.legend()
plt.show()
效果图
- 显然,我们认为,光强最强的地方,就是我们所见到的光盘衍射出的颜色。
理论02
- 显然这是一个闪耀光栅,我们必须要考虑到这个什么分辨率,色散率,色分辨率的问题
- 第一点,我们要看到这个闪耀波长的问题:
- 在单槽衍射主极大方向上衍射光最强,在此方向上产生多槽干涉的主极大的光谱级次K:
- 第二点,我们要看到从白光到分析这个哪个成分最强肯定是小有难度的
实验设计
- 那怎么设计呢?好问题,你看我们给出的公式(5),是不是很明显了。
- 搞个CCD,放在一个圆形滑轨上
- 给光盘放在一个可倾斜的平面上,让光盘可以做我们所给出的那种倾斜
- 然后就测数据吧
- 说正经的
- 实验,就是得去测量光的波长。
- 问题来了,实验怎么做的?
- 思路*2
- 测量光的波长
- 测量光的波长可以用光波测量仪
- 光波测量仪的效果可能不太行,范围太广
- 可以用分光谱仪器,但是效果都比较差,理论要求我们的 alpha 值尽可能小,掠射光的入射角尽可能大,所以我们至少得搞到一个什么电动马达带着传感器在我们自己拼接的轨道上运动,然后准确得测量。嗯,氪金佬+电子佬+技术佬可以考虑
- 测量光的波长
- 现象复现
- 如果我们不能测量光的波长,那么可以根据我们的理论,改造这个仪器。
- 我们将预测新的现象,怎么说呢,我们现在是可以改变两个参数,事实上,我们可以通过换光盘实现这个问题啊。比如说,这里有一些光盘参数:
国标:
CD光盘中两个相邻螺旋光道之间的间距为 1.5 微米
DVD光盘中两个相邻螺旋光道之间的间距为 0.74 微米
120型光盘(内外径):15mm----120mm
小型光盘(内外径):21mm----80mm
- 如果需要现象明显的话,我们只需要找到 不同光盘 相同的两个角参数 不同的反射光 即可说明
- 其实这样依然是不严谨的,必须用CCD才能很好的说明这个问题
实验数据与验证
- 按照CUPT的一般操作,你懂的。。。。
- 其实,从统计学的角度来看,如果你的数据是通过取了一大堆平均之后得出的一个很合理的值,比如 预期(0.5) 实测(0.2,0.3,0.7,0.8),那么大概率是伪造的或者有操作错误的
数据归一化处理
- 其实这一步可做可不做,但是为了比分好看一点,最好还是做一下的
import matplotlib.pyplot as plt
from numba import jit
import numpy as np
import matplotlib
matplotlib.rcParams["font.sans-serif"] = ["SimHei"]
matplotlib.rcParams["axes.unicode_minus"] = False
@jit
def fun120(alpha,beta,C=1,a = 1.5 * 10**-6):
#120型号光盘
N = int((120-15)* 10**-3/a)
plt.title("归一化后特定角度下观察到的可见光光强分布")
color = ["红光","橙光","黄光","绿光","青色","蓝光","紫光"]
color_wavelength = [[760*10**-9,622*10**-9],[622*10**-9,597*10**-9],\
[597*10**-9,577*10**-9],[577*10**-9,492*10**-9],\
[492*10**-9,450*10**-9],[450*10**-9,435*10**-9],\
[435*10**-9,390*10**-9]]
for i in range(7):
plt.scatter(color_wavelength[i],[0,0],c="black",s=3)
plt.text(color_wavelength[i][0]*1/4+color_wavelength[i][1]*3/4,0,color[i],size=5)
Lambda = np.linspace(390*10**-9,780*10**-9,1000)
I = np.zeros(1000)
for i in range(1000):
I[i] = C*np.sin((N+1)*np.pi*a*np.cos(beta)/Lambda[i]/np.cos(alpha))**2/np.sin(np.pi*a*np.cos(beta)/Lambda[i]/np.cos(alpha))**2
SUM = sum(I)
I = [i/SUM for i in I]
plt.plot(Lambda,I,label="alpha:"+str(round(alpha,2))+"beta:"+str(round(beta,2)),c="red")
plt.legend()
plt.pause(0.2)
plt.cla()
if __name__ == "__main__":
for i in np.linspace(0.1,0.8,40):
for j in np.linspace(0.1,0.8,40):
fun120(i,j)
效果
归一化光强 22年12月2日 CUPT |