diff --git a/RTX class/BalazsAperture.m b/RTX class/BalazsAperture.m index f4f737b04ecbe9b9b909532f5304b7461a4d0ef3..b8ccb7bbbe4d5528996f97c7090ba24afe41713e 100644 --- a/RTX class/BalazsAperture.m +++ b/RTX class/BalazsAperture.m @@ -24,6 +24,15 @@ classdef BalazsAperture < Aperture obj.collisions(i) = obj.collisions(i) + exp(1i*phase); end end - + + function plotApertureField(obj) + histogram = obj.getCollisionHistogram(); + figure; + x = linspace(-obj.size/2, obj.size/2, length(histogram)); + plot(x, abs(histogram)); + title("Apertúrán áthaladó sugarak eloszlása"); + xlabel("Pozíció"); + ylabel("Sugarak száma"); + end end end diff --git a/RTX class/FarField.m b/RTX class/FarField.m index 78f176b3d2600c5932d12b631335f629f35bf99e..f736e1fda7b6a3e0107cf9b50e746170f7815376 100644 --- a/RTX class/FarField.m +++ b/RTX class/FarField.m @@ -1,42 +1,68 @@ -classdef FarField +classdef FarField < handle properties - + field = []; + aperture Aperture; + wavelength; + theta; + nFi; end - methods (Static) - function field = CalculateFarField(ntheta, nfi, apertureSize, wavelength, histogram) + methods + function obj = FarField(aperture, theta, nFi, wavelength) + obj.aperture = aperture; + obj.wavelength = wavelength; + obj.theta = theta; + obj.nFi = nFi; + end + + function field = calculate(obj) progressBar2 = waitbar(0,'Calculating far field...','Name','Calculating far field...',... 'CreateCancelBtn','setappdata(gcbf,''canceling'',1)'); setappdata(progressBar2,'canceling',0); - stepSize = ntheta/100; + nTheta = length(obj.theta); + stepSize = nTheta/100; - field = zeros(1, ntheta); - theta = linspace(-pi/6, pi/6, ntheta); - fi = linspace(0, 2*pi, nfi); + histogram = obj.aperture. getCollisionHistogram(); + field = zeros(1, nTheta); + fi = linspace(0, 2*pi, obj.nFi); nr = floor(length(histogram)/2); - r = linspace(0, apertureSize/2, nr); - c1 = (apertureSize/(2*nr))*2*pi/nfi; - c2 = 1i*2*pi/wavelength; + r = linspace(0, obj.aperture.size/2, nr); + c1 = (obj.aperture.size/(2*nr))*2*pi/obj.nFi; + c2 = 1i*2*pi/obj.wavelength; - for i = 1:ntheta + for i = 1:nTheta if getappdata(progressBar2,'canceling') break; end if mod(i, stepSize) == 0 - waitbar(i/ntheta,progressBar2,sprintf('Calculating far field... [%0.0f%%]',i/ntheta*100)); + waitbar(i/nTheta,progressBar2,sprintf('Calculating far field... [%0.0f%%]',i/nTheta*100)); end - c3 = c2*sin(theta(i)); + c3 = c2*sin(obj.theta(i)); for j = 1:nr area = r(j) * c1; c4 = c3*r(j); ind = 2*nr-j+1; - for k = 1:nfi + for k = 1:obj.nFi field(i) = field(i) + histogram(ind)*exp(c4*sin(fi(k)))*area; end end end + obj.field = field; delete(progressBar2) end + + function plot(obj) + if isempty(obj.field) + obj.calculate(); + end + figure; + y = abs(obj.field); + y = y/max(y); + plot(obj.theta*180/pi, 20*log10(y)); + title("Távoltér"); + xlabel("\Theta [°]"); + ylabel("S [dB]"); + end end end diff --git a/RTX class/RTX.m b/RTX class/RTX.m index 0f5e4faef7f7115c91762390e7c22049f029da62..5666fd637140dbeb324c80b19330cba8ed0c6299 100644 --- a/RTX class/RTX.m +++ b/RTX class/RTX.m @@ -6,12 +6,11 @@ classdef RTX < handle reflectors Barrier; aperture Aperture; antenna Antenna = Antenna(Vect(1, 0)); + farField FarField; wavelength double = 1; nRay = 10000; rays Ray; traces Trace; - histogram; - field; end methods @@ -47,14 +46,13 @@ classdef RTX < handle end obj.traces(j) = Trace(j, obj.rays(j), obj.wavelength, [obj.reflectors obj.aperture], maxCollision); end - obj.histogram = obj.aperture.getCollisionHistogram(); traces = obj.traces; delete(progBar); end - function field = calculateFarField(obj, nTheta, nFi) + function field = calculateFarField(obj, theta, nFi) if nargin < 2 - nTheta = 1000; + theta = linspace(-pi/6, pi/6, 1000); end if nargin < 3 nFi = 500; @@ -62,32 +60,25 @@ classdef RTX < handle if isempty(obj.traces) obj.trace(); end - obj.field = FarField.CalculateFarField(nTheta, nFi, obj.aperture.size, obj.wavelength, obj.histogram); - field = obj.field; + obj.farField = FarField(obj.aperture, theta, nFi, obj.wavelength); + field = obj.farField.calculate(); end function plotApertureField(obj) - if isempty(obj.histogram) + if isempty(obj.aperture.getCollisionHistogram()) obj.trace(); - end - figure; - x = linspace(-obj.aperture.size/2, obj.aperture.size/2, length(obj.histogram)); - plot(x, abs(obj.histogram)); - title("Apertúrán áthaladó sugarak eloszlása"); - xlabel("Pozíció"); - ylabel("Sugarak száma"); + end + obj.aperture.plotApertureField(); end function plotFarField(obj) - if isempty(obj.traces) + if isempty(obj.aperture.getCollisionHistogram()) obj.trace(); end - if isempty(obj.field) + if isempty(obj.farField) obj.calculateFarField(); end - y = abs(obj.field); - y = y/max(y); - plot(20*log10(y)); + obj.farField.plot() end function plotSetup(obj) diff --git a/RTX class/rtx_test.m b/RTX class/rtx_test.m index 444bfb5c2f812b530ef29834081ecb89e45c4f13..661afd23d5d9f267cb8bfa2ea3176365861ec52c 100644 --- a/RTX class/rtx_test.m +++ b/RTX class/rtx_test.m @@ -8,6 +8,4 @@ wavelength = 3e8/1e9; nRay = 1000; rtx = RTX(reflectors, aperture, antenna, wavelength, nRay); -rtx.trace(); -rtx.plotApertureField(); rtx.plotFarField();