本文基于光波的叠加原理。
两列单色波的产生
- 单色波的产生函数:
function y = F_product_wave(A,k,w,t,x)
% 函数功能:产生波动函数
% A:波的振幅 k:空间角频率或波数 w:(振动)角频率
% t:时间 x:x方向空间坐标
% ***************************************************
y = A*cos(k*x-w*t);
end
- Project Code:
% 作者:ZQJ
% 日期:2021.1.4 星期一
%***********************模拟产生两列单色平面波**************************
clear,clc,close all;
t = 0.1:0.2:1.3; %时间区间
x = 0:0.001:5; %空间区间
wave1 = F_product_wave(1,5,50,t(end),x);
wave2 = F_product_wave(1,4,60,t(end),x);
plot(x,wave1,'-',x,wave2,':');
% figure处理*****************************
set(gca,'YTick',(-1:0.4:1));
set(gca,'XTick',(0:5));
xlabel('空间坐标x'), ylabel('振幅');
title('两列单色平面波模拟生成');
legend('光波1','光波2');
- 仿真结果图:
两列单色波合成光学拍:
- 光学拍的产生函数:
function [Beat,A_beat] = F_product_Optical_beat(A,k1,k2,w1,w2,t,x)
% 函数功能:产生光学拍函数
% A:两列波的振幅(相同) k1:光波1空间角频率或波数 k2:光波2空间角频率或波数
% w1:光波1的(振动)角频率 w2:光波1的(振动)角频率
% t:时间 x:x方向空间坐标
% ***************************************************
Beat = A*cos(k1*x-w1*t) + A*cos(k2*x-w2*t); %拍的函数
A_beat = 2*A*cos((k1-k2)/2*x-(w1-w2)/2*t); %拍的振幅函数
end
- Project Code:
% 作者:ZQJ
% 日期:2021.1.4 星期一
%***********************模拟产生光波拍**************************
%光学拍的条件:两列波的振幅相同,振动方向相同,频率接近,同一方向进行传播
clear,clc,close all;
k = 0;
m = moviein(length(0.1:0.2:1.3)); %生成动画存储矩阵的预空间
x = 0:0.01:30; %空间区间
for t=0.1:0.2:1.3 %时间区间
k = k+1;
[Beat,A_beat] = F_product_Optical_beat(1,5,4,50,60,t,x);
plot(x,Beat,'-',x,A_beat,'m:',x,-A_beat,'m:');
% figure处理*****************************
axis([0,30,-2,2]); %坐标x和y的最小最大范围限定
set(gca,'YTick',(-2:0.5:2));
set(gca,'XTick',(0:5:30));
xlabel('空间坐标x'), ylabel('光学拍振幅');
title('光学拍');
legend('光学拍函数','拍的振幅包络1','拍的振幅包络2');
m(:,k) = getframe; %getframe将这一帧画面以列向量的形式反馈
end
%movie(m,3); %动画播放这个矩阵(帧画信息),3次
% video存储处理(4个步骤)*****************************
write_movie = VideoWriter('Optical_beat.avi'); %创建文件及空间
open(write_movie); %打开
writeVideo(write_movie,m); %写入帧画信息
close(write_movie); %关闭
- 仿真结果图:
专栏内容供作者本人或大家学习使用,多多指教 ~