matlab产生OAM相位图

本文详细描述了如何使用Matlab编程语言读取Excel中的单元相位数据,进行相位补偿计算,并将结果整理成矩阵形式,最后将这些数据写入新的Excel文件中,用于OAM模式的超表面设计。
摘要由CSDN通过智能技术生成

clc;
clear all;

%读取单元相位数据
filename = ‘phase.xlsx’;
serial_num = xlsread(filename, ‘A2:A9’); % 读取序列号,
phase_lib = xlsread(filename, ‘B2:B9’); % 读取相位
angleall = xlsread(filename, ‘C2:C9’); % 读取angleall
angle = xlsread(filename, ‘D2:D9’); % 读取angle
r = xlsread(filename, ‘E2:E9’); % 读取r
w = xlsread(filename, ‘F2:F9’); % 读取w
phase_lib = mod(phase_lib + 360, 360); %加360,保证相位为正

freq = 0.9; %频率
lam = 300/freq; %波长
k = 2*pi/lam; %波数

p = 110; %超表面单元周期
num = 11; %一排单元数量num+1

x = -num/2p:p:nump/2;
y = x;
[X,Y] = meshgrid(x,y); %生成坐标网格

fx=0;
fy=0;
fz=-1500; %焦点位置

l = 1; %OAM模式

phase_need = (sqrt((X-fx).2+(Y-fy).2+fz^2)-fz)k/pi180+latan2(Y,X)/pi180+l360; %每个单元所需补偿的相位
phase_need = phase_need - (phase_need > 360).
floor(phase_need/360) *360; %归一到0~360°范围内

f1 = figure;
imagesc(phase_need); %相位图绘图

%以下是生成一个单元数据信息,记录相位图每个位置需要那个单元结构
SERIAL_NUM = zeros(size(phase_need)); %生成和phase_need大小相同的零矩阵
ANGLEALL = zeros(size(phase_need));
ANGLE = zeros(size(phase_need));
R = zeros(size(phase_need));
W = zeros(size(phase_need));

%生成矩阵

for i = 1:1:(num+1)^2
SERIAL_NUM(i) = serial_num(find((abs(phase_need(i) - phase_lib) == min(abs(phase_need(i) - phase_lib)))));
%在对应位置记录所需相位和相位表最接近的那个单元序号
ANGLE(i) = angle(find((abs(phase_need(i) - phase_lib) == min(abs(phase_need(i) - phase_lib)))));
ANGLEALL(i) = angleall(find((abs(phase_need(i) - phase_lib) == min(abs(phase_need(i) - phase_lib)))));
R = r(find((abs(phase_need(i) - phase_lib) == min(abs(phase_need(i) - phase_lib)))));
W = w(find((abs(phase_need(i) - phase_lib) == min(abs(phase_need(i) - phase_lib)))));
end

f2 = figure;
imagesc(SERIAL_NUM); %绘图

ANGLE=reshape(ANGLE,[],1);
ANGLEALL=reshape(ANGLEALL,[],1);
R=reshape(R,[],1);
W=reshape(W,[],1);
%数据整形

xlswrite([‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],ANGLE,‘A1:A144’);
xlswrite([‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],ANGLEALL,‘B1:B144’);
xlswrite([‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],R,‘C1:C144’);
xlswrite([‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],W,‘D1:D144’);
%写入xlsx文档

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值