matlab产生相位图

9588

导入excel表,计算梯度图,导出单元数据

clc; clear all;

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

p = 110; %超表面单元周期 num =7;

phases_rad = [0, pi/4, pi/2, 3pi/4, pi, 5pi/4, 3pi/2, 7pi/4]; phases_deg = rad2deg(phases_rad);

phase_need = zeros(8, 8); for i = 1:8 % 这里我们实际上不需要循环,因为每行都是相同的 % 但为了清晰起见,我还是展示了它 phase_need(i, 1:8) = phases_deg; % 将相位值放入每行的前8个位置 end

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

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

% 使用两个循环遍历phase_need矩阵的每个元素 [rows, cols] = size(phase_need); for i = 1:rows for j = 1:cols % 提取当前元素 current_phase = phase_need(i, j);

% 找到phase_lib中与当前相位最接近的索引

[~, idx] = min(abs(phase_lib - current_phase));

% 填充SERIAL_NUM, ALPHA, BETA, R, W矩阵

SERIAL_NUM(i, j) = serial_num(idx);

BETA(i, j) = beta(idx);

ALPHA(i, j) = alpha(idx);

R(i, j) = r(idx);

W(i, j) = w(idx);

end

end

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

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

xlswrite( [‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],ALPHA,‘A1:A64’); xlswrite( [‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],BETA,‘B1:B64’); xlswrite( [‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],R,‘C1:C64’); xlswrite( [‘./单元数据’ num2str(num+1) ‘x’ num2str(num+1) ‘.xlsx’],W,‘D1:D64’); %写入xlsx文档