Разверните, чтобы удалить разрыв - PullRequest
0 голосов
/ 07 мая 2018

Я застрял в этой проблеме надолго. Я был бы очень признателен за любую помощь, которую я могу получить. У меня есть сложное уравнение, которое имеет срезы ветвей (4 из них, но в прилагаемом коде у меня только один). Это показывает скачки фазы по оси Y. Я пытаюсь использовать фазовую развёртку, чтобы у меня не было срезов ветвей на моем контурном графике. Когда я обрезаю ветку горизонтально, проблему легко решить с помощью функции unwrap в MATLAB. Я полагаю, это потому, что срезы ветвей расположены в горизонтальных / вертикальных строках / столбцах, поэтому их легко удалить Когда ветви расположены под углом, я больше не могу использовать функцию unwrap (поскольку ветви будут наклонены, например, под углом 30 градусов, 45 градусов и т. Д.). Итак, мне было интересно, есть ли в любом случае развернуть фазу, чтобы избавиться от сокращений ветви. Это случай горизонтального с разрывом по горизонтали с горизонтальным разрывом:

Это относится к горизонтали без разрыва ветвей после разворачивания фазы, без разрыва:

Угол 30 градусов, оригинал, прерывистый:

Угол 30, завернутая фаза, все еще прерывистый:

enter image description here

Пожалуйста, смотрите прикрепленный код. Угол и разрывность определяется гаммой.

Поскольку функция разворачивания применяется к столбцам, а для случаев с углами (отличными от 0) разрыв проявляется в гамма-градусах (поэтому для 30 он будет отображаться под углом 30 и т. Д.), разрыв не снимается. Есть ли способ извлечь элементы из матрицы из сетки, используя угол? Буду очень признателен за любую помощь.

%create mesh
x = [-10:0.1:10];
y = [-10:0.1:10];
[X,Y] = meshgrid(x,y);

%create plane
z =X+1i.*Y;

%constants

zc = [0 ];
xc= real(zc);
yc=imag(zc);
gamma =[30]./360*2*pi;   % this determines where the phase jump occurs
L = [ 4];
W = [ 2];
beta = [90]./360*2*pi;
STREN =4.7532e-08.*ones(size(zc,2),1)'; 

%constants

za1 =zc-exp(1i.*gamma).*(0.5.*L+0.5.*W.*exp(1i.*beta));

x1= real(za1); 
y1= imag(za1); 

A = -(-X.*cos(gamma)+x1.*cos(gamma)+y1.*sin(gamma)-Y.*sin(gamma));

%phase

f11 = angle(exp(-1i.*gamma).*(za1-z));

P_f_ =A.*f11+real(STREN.*z);

figure
contourf(X,Y,P_f_,25)
colorbar
hold on

anglef1_unwrapped = f11;

%Then sequentially unwrap all the columns one at a time
for i=1:length(A)
anglef1_unwrapped(:,i) = unwrap(f11(:,i));
end

P_single = real(STREN.*z)+A.*anglef1_unwrapped;
figure
contourf(X,Y,P_single,25)
colorbar
...