├── Conductivity.m ├── Eztr_lossy.m ├── Form_5_son_5.pdf ├── Material3D.m ├── Maxwell3D.m ├── README.md ├── TR.m ├── TR2D.m ├── TR_lin.m ├── WithTumor.m ├── WithoutTumor.m ├── ZAMANDA TERSİNE ÇEVİRME ALGORİTMALARI İLE KANSER TESPİTİ.pptx ├── bitirme1.m ├── bitirme2.m ├── bitirme3.m ├── bitirme4.m ├── bitirme5.m ├── bitirme5.mat ├── diel_no_tumor_lin.m ├── diel_tumor_lin.m ├── hytrf.m ├── kaynakTR_lossy.m ├── makale3d.m ├── matlab.mat └── maxwell3d.py /Conductivity.m: -------------------------------------------------------------------------------- 1 | %physical constants 2 | clear all; 3 | close all; 4 | c0 = 2.998e8; 5 | eta0 = 120*pi; 6 | mu0 = pi*4e-7; 7 | eps0 = 1e-9/(36*pi); 8 | %box dimensions 9 | width = 0.05; % cm 10 | height = 0.05; 11 | length = 0.002; % cm 12 | %source parameters 13 | f0 = 2e9; % GHz 14 | tw = 1e-8/pi; 15 | t0 = 4*tw; 16 | %spatial discretization 17 | adipose = 10; 18 | tumor = 60; 19 | sigma = 1; 20 | epsr = tumor; 21 | w = 2 * pi * f0; 22 | k = (w/c0)*sqrt(epsr-1j*sigma/(w*eps0)); 23 | beta = real(k); 24 | c = w / beta; 25 | lambda = c/f0; 26 | dxmax = lambda / 10; 27 | dx = dxmax; 28 | dy = dxmax; 29 | dz = dxmax; 30 | nx = round(width/dx); 31 | ny = round(height/dy); 32 | nz = round(length/dz); 33 | %source position 34 | srcx = round(nx / 2); 35 | srcy = round(ny / 2); 36 | srcz = round(3 * nz / 4); 37 | %material 38 | mx = 3 * nx / 8; 39 | my = ny / 8; 40 | mz = nz / 8; 41 | mw = nx / 4; % width 42 | mh = ny / 4; % height 43 | ml = nz / 4; % length 44 | al = ny / 2; 45 | eps = ones(nx,ny,nz) * eps0 * adipose; 46 | sigma = ones(nx,ny,nz) * f0 * 1e-9 * 0.5 - 0.5;; 47 | for i=1:1:nx 48 | for j=1:1:ny 49 | for k=1:1:nz 50 | % adipose tissue is located under z < al 51 | if (kmx && i<(mw+mx) && j>my && j<(mh+my) && k>mz && k<(ml+mz)) 56 | eps(i,j,k) = eps0 * tumor; 57 | sigma(i,j,k) = f0 * 1e-9 - 0.5; 58 | end 59 | end 60 | end 61 | end 62 | %time discretization 63 | dt = 0.99/(c0*sqrt(dx^-2+dy^-2+dz^-2)); 64 | n_iter = 10000; 65 | %receivers 66 | nrec = round(nx / 3)-1; 67 | recdy = round(ny / nrec); 68 | recx = srcx; 69 | recz = srcz; 70 | rec = zeros(nrec,n_iter); 71 | %EM field dimensions 72 | Hx = zeros(nx,ny,nz); 73 | Hy = zeros(nx,ny,nz); 74 | Hz = zeros(nx,ny,nz); 75 | Ex = zeros(nx,ny,nz); 76 | Ey = zeros(nx,ny,nz); 77 | Ez = zeros(nx,ny,nz); 78 | %iteration 79 | i = 0; 80 | for n=1:1:n_iter 81 | %magnetic field derivatives 82 | Hxy = diff(Hx,1,2); 83 | Hxz = diff(Hx,1,3); 84 | Hzx = diff(Hz,1,1); 85 | Hzy = diff(Hz,1,2); 86 | Hyx = diff(Hy,1,1); 87 | Hyz = diff(Hy,1,3); 88 | 89 | %electric field maxwell equations 90 | epsi = eps(:,2:end-1,2:nz-1); 91 | ksi = (dt * sigma(:,2:end-1,2:nz-1)) ./ ( 2 * epsi ); 92 | c2 = (1./(1+ksi)).*(dt./epsi); 93 | c1 = (1-ksi)./(1+ksi); 94 | Ex(:,2:end-1,2:end-1) = c1.*Ex(:,2:end-1,2:nz-1) + c2.*((1/dy)*Hzy(:,1:end-1,2:end-1) - (1/dz)*Hyz(:,2:ny-1,1:end-1)); 95 | 96 | epsi = eps(2:end-1,:,2:end-1); 97 | ksi = (dt * sigma(2:end-1,:,2:end-1)) ./ ( 2 * epsi ); 98 | c2 = (1./(1+ksi)).*(dt./epsi); 99 | c1 = (1-ksi)./(1+ksi); 100 | Ey(2:end-1,:,2:end-1) = c1.*Ey(2:end-1,:,2:end-1) + c2.*((1/dz)*Hxz(2:end-1,:,1:end-1) - (1/dx)*Hzx(1:end-1,:,2:end-1)); 101 | 102 | epsi = eps(2:end-1,2:end-1,:); 103 | ksi = (dt * sigma(2:end-1,2:end-1,:)) ./ ( 2 * epsi ); 104 | c2 = (1./(1+ksi)).*(dt./epsi); 105 | c1 = (1-ksi)./(1+ksi); 106 | Ez(2:end-1,2:end-1,:) = c1.*Ez(2:end-1,2:end-1,:) + c2.*((1/dx)*Hyx(1:end-1,2:end-1,:) - (1/dy)*Hxy(2:end-1,1:end-1,:)); 107 | 108 | %gaussian source 109 | f = sin(2*pi*f0*n*dt)*exp(-(n*dt-t0)^2/(tw^2))/dy; 110 | Ez(srcx,srcy,srcz) = Ez(srcx,srcy,srcz) + f; 111 | %Ezn(n)=Ez(srcx,srcy,srcz); 112 | 113 | %electric field derivatives 114 | Exy = diff(Ex,1,2); 115 | Exz = diff(Ex,1,3); 116 | Ezx = diff(Ez,1,1); 117 | Ezy = diff(Ez,1,2); 118 | Eyx = diff(Ey,1,1); 119 | Eyz = diff(Ey,1,3); 120 | 121 | %magnetic field maxwell equations 122 | Hx(:,1:end-1,1:end-1) = Hx(:,1:end-1,1:end-1) - (dt/(mu0*dy))*Ezy(:,:,1:end-1) + (dt/(mu0*dz))*Eyz(:,1:end-1,:); 123 | Hy(1:end-1,:,1:end-1) = Hy(1:end-1,:,1:end-1) - (dt/(mu0*dz))*Exz(1:end-1,:,:) + (dt/(mu0*dx))*Ezx(:,:,1:end-1); 124 | Hz(1:end-1,1:end-1,:) = Hz(1:end-1,1:end-1,:) - (dt/(mu0*dx))*Eyx(:,1:end-1,:) + (dt/(mu0*dy))*Exy(1:end-1,:,:); 125 | 126 | for k=1:1:nrec 127 | rec(k,n) = Ez(recx,recdy * k ,recz); 128 | end 129 | 130 | %display 131 | if (mod(i,5)==0) 132 | slice(:,:)=Ez(:,:,round(nz/2)); 133 | pcolor(slice'); 134 | colorbar; 135 | drawnow 136 | end 137 | i = i+1; 138 | disp(i) 139 | end 140 | 141 | close all 142 | hold on 143 | for k=1:1:nrec 144 | plot(rec(k,:)) 145 | end 146 | 147 | save('conductive-receivers.mat','rec','nrec','n_iter','recx','recdy','recz') 148 | 149 | 150 | -------------------------------------------------------------------------------- /Eztr_lossy.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overengineer/TR-FDTD/f08ef6c147c1d57713e9fc545c8510a50e516dd0/Eztr_lossy.m -------------------------------------------------------------------------------- /Form_5_son_5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overengineer/TR-FDTD/f08ef6c147c1d57713e9fc545c8510a50e516dd0/Form_5_son_5.pdf -------------------------------------------------------------------------------- /Material3D.m: -------------------------------------------------------------------------------- 1 | %physical constants 2 | clear all; 3 | close all; 4 | c = 2.998e8; 5 | eta0 = 120*pi; 6 | mu0 = pi*4e-7; 7 | eps0 = 1e-9/(36*pi); 8 | %box dimensions 9 | width = 1; 10 | height = 1; 11 | length = 1; 12 | %spatial discretization 13 | dx = 0.02; 14 | dy = dx; 15 | dz = dx; 16 | nx = width/dx; 17 | ny = height/dy; 18 | nz = length/dz; 19 | %source 20 | f0 =1e9; 21 | tw = 1e-8/pi; 22 | t0 = 4*tw; 23 | srcx = round(nx / 2); 24 | srcy = round(nz / 2); 25 | srcz = round(3 * ny / 4); 26 | %material 27 | adipose = 10; 28 | tumor = 60; 29 | mx = 3 * ny / 8; 30 | my = 0; 31 | mz = 0; 32 | mw = nx / 4; % width 33 | mh = ny / 4; % height 34 | ml = nz / 4; % length 35 | al = ny / 2; 36 | eps = ones(nx,ny,nz) * eps0; 37 | for i=1:1:nx 38 | for j=1:1:ny 39 | for k=1:1:nz 40 | % adipose tissue is located under z < al 41 | if (kmx && i<(mw+mx) && j>my && j<(mh+my) && k>mz && k<(ml+mz)) 45 | eps(i,j,k) = eps0 * tumor; 46 | end 47 | end 48 | end 49 | end 50 | %temporal discretization 51 | dt = 0.95/(c*sqrt(dx^-2+dy^-2+dz^-2)); 52 | n_iter = 5000; 53 | %EM field dimensions 54 | Hx = zeros(nx,ny,nz); 55 | Hy = zeros(nx,ny,nz); 56 | Hz = zeros(nx,ny,nz); 57 | Ex = zeros(nx,ny,nz); 58 | Ey = zeros(nx,ny,nz); 59 | Ez = zeros(nx,ny,nz); 60 | %iteration 61 | i = 0; 62 | for n=1:1:n_iter 63 | %magnetic field derivatives 64 | Hxy = diff(Hx,1,2); 65 | Hxz = diff(Hx,1,3); 66 | Hzx = diff(Hz,1,1); 67 | Hzy = diff(Hz,1,2); 68 | Hyx = diff(Hy,1,1); 69 | Hyz = diff(Hy,1,3); 70 | 71 | %electric field maxwell equations 72 | Ex(:,2:end-1,2:end-1) = Ex(:,2:end-1,2:nz-1) + (dt/(eps(:,2:end-1,2:nz-1)*dy)).*Hzy(:,1:end-1,2:end-1) - (dt/(eps(:,2:end-1,2:nz-1)*dz)).*Hyz(:,2:ny-1,1:end-1); 73 | Ey(2:end-1,:,2:end-1) = Ey(2:end-1,:,2:end-1) + (dt/(eps(2:end-1,:,2:end-1)*dz)).*Hxz(2:end-1,:,1:end-1) - (dt/(eps(2:end-1,:,2:end-1)*dx)).*Hzx(1:end-1,:,2:end-1); 74 | Ez(2:end-1,2:end-1,:) = Ez(2:end-1,2:end-1,:) + (dt/(eps(2:end-1,2:end-1,:)*dx)).*Hyx(1:end-1,2:end-1,:) - (dt/(eps(2:end-1,2:end-1,:)*dy)).*Hxy(2:end-1,1:end-1,:); 75 | 76 | %gaussian source 77 | f = sin(2*pi*f0*n*dt)*exp(-(n*dt-t0)^2/(tw^2))/dy; 78 | Ez(srcx,srcy,srcz) = Ez(srcx,srcy,srcz) + f; 79 | %Ezn(n)=Ez(srcx,srcy,srcz); 80 | 81 | %electric field derivatives 82 | Exy = diff(Ex,1,2); 83 | Exz = diff(Ex,1,3); 84 | Ezx = diff(Ez,1,1); 85 | Ezy = diff(Ez,1,2); 86 | Eyx = diff(Ey,1,1); 87 | Eyz = diff(Ey,1,3); 88 | 89 | %magnetic field maxwell equations 90 | Hx(:,1:end-1,1:end-1) = Hx(:,1:end-1,1:end-1) - (dt/(mu0*dy))*Ezy(:,:,1:end-1) + (dt/(mu0*dz))*Eyz(:,1:end-1,:); 91 | Hy(1:end-1,:,1:end-1) = Hy(1:end-1,:,1:end-1) - (dt/(mu0*dz))*Exz(1:end-1,:,:) + (dt/(mu0*dx))*Ezx(:,:,1:end-1); 92 | Hz(1:end-1,1:end-1,:) = Hz(1:end-1,1:end-1,:) - (dt/(mu0*dx))*Eyx(:,1:end-1,:) + (dt/(mu0*dy))*Exy(1:end-1,:,:); 93 | 94 | %display 95 | if (mod(i,10)==0) 96 | slice(:,:)=Ez(nx/2,:,:); 97 | pcolor(slice); 98 | colorbar; 99 | drawnow 100 | end 101 | i = i+1 102 | end 103 | 104 | -------------------------------------------------------------------------------- /Maxwell3D.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overengineer/TR-FDTD/f08ef6c147c1d57713e9fc545c8510a50e516dd0/Maxwell3D.m -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TR-FTDT 2 | > Time Reversal Algorithm with Finite-Difference Time-Domain Method 3 | Software implementation of a microwave imaging technique for breast cancer early diagnosis. 4 | 5 | This repo contains Matlab files I have wrote for my graduation project. This project is based on a paper by [P. Kosmas & C.M. Rappaport](https://ieeexplore.ieee.org/document/1463350). 6 | 7 | ## How it Works? 8 | 9 | - Run `WithTumor.m` and `WithoutTumor.m`. These will collect data from 3D simulated tissue. Collected data is exported to `withtumor.mat` and `withouttumor.mat` files. 10 | - Then run `TR.m` file. This is time reversal algorithm. It will take difference signals from previous two simulations. Filters the signal using some special filter, then propagates it in the same environment backwards in time. 2D slice of electrical Field in the 3D environment is visualised in every n iterations. Hopefully you can see tumor in the visual. 11 | 12 | ## Content 13 | 14 | ### diel_tumor_lin.m 15 | 16 | Tumor inside dielectric medium observed by linear antenna array 17 | 18 | ### diel_no_tumor_lin.m 19 | 20 | Dielectric medium without tumor observed by linear array 21 | 22 | ### TR_lin.m 23 | 24 | Time Reversal of linear array, dielectric medium 25 | 26 | ### TR.m 27 | 28 | Time Reversal of linear array, conductive medum 29 | 30 | ### WithTumor.m 31 | 32 | Tumor inside conductive medium observed by linear array 33 | 34 | ### WithoutTumor.m 35 | 36 | Conductive medium without tumor observed by linear array 37 | 38 | 39 | ## Old Content 40 | 41 | ### bitirme1.m 42 | 43 | 2D lossless FTDT causal-time simulation 44 | 45 | ### bitirme2.m 46 | 47 | same but with parameters choosen by Kosmas et al. 48 | 49 | ### bitirme3.m 50 | 51 | 2D lossy simulation 52 | 53 | ### bitirme4.m 54 | 55 | 2D lossy simulation with tissue material 56 | 57 | ### Maxwell3D.m 58 | 59 | 3D lossless sim 60 | 61 | ### Material3D.m 62 | 63 | 3D sim with material 64 | 65 | ### Conductivity.m 66 | 67 | 3D lossy with 68 | 69 | ### Other scripts 70 | 71 | Retrieved from Pelin Cerav's work. 72 | 73 | 74 | -------------------------------------------------------------------------------- /TR.m: -------------------------------------------------------------------------------- 1 | %physical constants 2 | clear all; 3 | close all; 4 | load 'withtumor.mat'; 5 | load 'withouttumor.mat'; 6 | 7 | c0 = 2.998e8; 8 | eta0 = 120*pi; 9 | mu0 = pi*4e-7; 10 | eps0 = 1e-9/(36*pi); 11 | %box dimensions 12 | width = 0.5; % 30cm 13 | height = 0.5; 14 | length = 0.5; % 1cm 15 | %source parameters 16 | f0 = 1e9; % GHz 17 | band = 2e9; 18 | tw = sqrt(-log(0.1)/(pi*band)^2);%1e-8/pi; 19 | t0 = 4*tw; 20 | %spatial discretization 21 | adipose = 5; 22 | tumor = 10; 23 | sigma = 5; 24 | epsr = tumor; 25 | w = 2 * pi * band; 26 | k = (w/c0)*sqrt(epsr-1j*sigma/(w*eps0)); 27 | beta = real(k); 28 | c = w / beta; 29 | lambda = c/f0; 30 | dxmax = lambda / 20; 31 | dx = dxmax; 32 | dy = dx; 33 | dz = dx; 34 | nx = round(width/dx); 35 | ny = round(height/dy); 36 | nz = round(length/dz); 37 | 38 | %source position 39 | srcx = round(nx / 2); 40 | srcy = round( 3 * ny / 4); 41 | srcz = round(nz / 2); 42 | 43 | % material 44 | eps = ones(nx,ny,nz) * eps0; %* adipose; 45 | sigma = zeros(nx,ny,nz);% * f0 * 1e-9 * 0.5 - 0.5; 46 | %temporal discretization 47 | dt = 0.99/(c0*sqrt(dx^-2+dy^-2+dz^-2)); 48 | 49 | rec1 = trec - rec; 50 | tau = 100e-12; 51 | [foo,tp] = max(abs(rec1),[],2); 52 | for k=1:1:nrec 53 | recn(k,:) = exp(-((dt*((1:1:n_iter)-tp(k)))/tau).^2) .* rec1(k,:); 54 | end 55 | % hold on 56 | % plot(rec(15,:)) 57 | % plot(exp(-((dt*((1:1:n_iter)-tp(15)))/tau).^2)) 58 | % draw now 59 | % 60 | % while 1 61 | % end 62 | 63 | 64 | %EM field dimensions 65 | Hx = zeros(nx,ny,nz); 66 | Hy = zeros(nx,ny,nz); 67 | Hz = zeros(nx,ny,nz); 68 | Ex = zeros(nx,ny,nz); 69 | Ey = zeros(nx,ny,nz); 70 | Ez = zeros(nx,ny,nz); 71 | %iteration 72 | i = 0; 73 | for n=1:1:n_iter 74 | %magnetic field derivatives 75 | Hxy = diff(Hx,1,2); 76 | Hxz = diff(Hx,1,3); 77 | Hzx = diff(Hz,1,1); 78 | Hzy = diff(Hz,1,2); 79 | Hyx = diff(Hy,1,1); 80 | Hyz = diff(Hy,1,3); 81 | %electric field maxwell equations 82 | epsi = eps(:,2:end-1,2:nz-1); 83 | ksi = (dt * sigma(:,2:end-1,2:nz-1)) ./ ( 2 * epsi ); 84 | c2 = (1./(1+ksi)).*(dt./epsi); 85 | c1 = (1-ksi)./(1+ksi); 86 | Ex(:,2:end-1,2:end-1) = c1.*Ex(:,2:end-1,2:nz-1) - c2.*((1/dy)*Hzy(:,1:end-1,2:end-1) - (1/dz)*Hyz(:,2:ny-1,1:end-1)); 87 | 88 | 89 | epsi = eps(2:end-1,:,2:end-1); 90 | ksi = (dt * sigma(2:end-1,:,2:end-1)) ./ ( 2 * epsi ); 91 | c2 = (1./(1+ksi)).*(dt./epsi); 92 | c1 = (1-ksi)./(1+ksi); 93 | Ey(2:end-1,:,2:end-1) = c1.*Ey(2:end-1,:,2:end-1) - c2.*((1/dz)*Hxz(2:end-1,:,1:end-1) - (1/dx)*Hzx(1:end-1,:,2:end-1)); 94 | 95 | epsi = eps(2:end-1,2:end-1,:); 96 | ksi = (dt * sigma(2:end-1,2:end-1,:)) ./ ( 2 * epsi ); 97 | c2 = (1./(1+ksi)).*(dt./epsi); 98 | c1 = (1-ksi)./(1+ksi); 99 | Ez(2:end-1,2:end-1,:) = c1.*Ez(2:end-1,2:end-1,:) - c2.*((1/dx)*Hyx(1:end-1,2:end-1,:) - (1/dy)*Hxy(2:end-1,1:end-1,:)); 100 | 101 | %TR sources 102 | for k=1:nrec 103 | Ez(recdx * k, recy, recz) = Ez(recdx * k, recy, recz) + recn(k, n_iter-n+1); 104 | end 105 | %Ez(recx, recdy , recz) 106 | %rec(1,n_iter-n) 107 | %electric field derivatives 108 | Exy = diff(Ex,1,2); 109 | Exz = diff(Ex,1,3); 110 | Ezx = diff(Ez,1,1); 111 | Ezy = diff(Ez,1,2); 112 | Eyx = diff(Ey,1,1); 113 | Eyz = diff(Ey,1,3); 114 | 115 | %magnetic field maxwell equations 116 | Hx(:,1:end-1,1:end-1) = Hx(:,1:end-1,1:end-1) + (dt/(mu0*dy))*Ezy(:,:,1:end-1) - (dt/(mu0*dz))*Eyz(:,1:end-1,:); 117 | Hy(1:end-1,:,1:end-1) = Hy(1:end-1,:,1:end-1) + (dt/(mu0*dz))*Exz(1:end-1,:,:) - (dt/(mu0*dx))*Ezx(:,:,1:end-1); 118 | Hz(1:end-1,1:end-1,:) = Hz(1:end-1,1:end-1,:) + (dt/(mu0*dx))*Eyx(:,1:end-1,:) - (dt/(mu0*dy))*Exy(1:end-1,:,:); 119 | 120 | %display 121 | if (mod(n,10)==0) 122 | slice(:,:)=Ez(60:100,round(ny/2)-20:round(ny/2)+20,srcz); 123 | pcolor(slice.'); 124 | colorbar; 125 | shading interp 126 | drawnow 127 | end 128 | i = i+1; 129 | disp(i) 130 | 131 | R(n) = varimax_norm(Ez(60:100,round(ny/2)-20:round(ny/2)+20,srcz)); 132 | end 133 | 134 | figure;plot(R) 135 | 136 | function R = varimax_norm(Ez) 137 | R = sum(sum(sum(Ez.^2)))^2 / sum(sum(sum(Ez.^4))); 138 | end 139 | -------------------------------------------------------------------------------- /TR2D.m: -------------------------------------------------------------------------------- 1 | clear all 2 | close all 3 | load 'bitirme5.mat' 4 | %TMz Polarization 5 | %physical constants 6 | c = 2.998e8; 7 | eta0 = 120*pi; 8 | mu0 = pi*4e-7; 9 | eps0 = 1e-9/(36*pi); 10 | %environment parameters 11 | nx = 249; 12 | ny = 249; 13 | delta = 1.2e-2; %1.2cm 14 | dx = delta; 15 | dy = delta; 16 | dt = 20e-12; %0.95/(c*sqrt(dx^-2+dy^-2)); 17 | %f0 = 2e9; %2GHz 18 | tw = 16*dt; 19 | t0 = 200*dt; 20 | srcx = round(nx/2); 21 | srcy = round(ny/2); 22 | eps_r = 1; 23 | sigma = 0; 24 | ksi = (dt * sigma) / ( 2 * eps0* eps_r ); 25 | %calculation parameters 26 | n_iter = 500; 27 | %initalization 28 | Hx = zeros(nx,ny); 29 | Hy = zeros(nx,ny); 30 | Ez = zeros(nx,ny); 31 | %iteration 32 | for n=n_iter:-1:1 33 | %Maxwell Equations (TMz) 34 | Ezx = diff(Ez,1,1); 35 | Ezy = diff(Ez,1,2); 36 | Hx(2:nx-1,2:ny) = Hx(2:nx-1,2:ny) + (dt/(mu0*dy))*Ezy(2:nx-1,:); 37 | Hy(2:nx,2:ny-1) = Hy(2:nx,2:ny-1) - (dt/(mu0*dx))*Ezx(:,2:ny-1); 38 | Hxy = diff(Hx,1,2); 39 | Hyx = diff(Hy,1,1); 40 | Ez(2:nx-1,2:ny-1) = ((1-ksi)/(1+ksi))*Ez(2:nx-1,2:ny-1) - ((1/(1+ksi))*(dt/(eps0*eps_r)))*((1/dx)*Hyx(2:nx-1,2:ny-1) - (1/dy)*Hxy(2:nx-1,2:ny-1)); 41 | 42 | for i=1:1:23 43 | Ez(i*10,srcy) = Ez(i*10,srcy) + receivers(i,n); 44 | end 45 | %Neuman Condition 46 | Ez(:,2) = -Ez(:,1); 47 | Ez(2,:) = -Ez(1,:); 48 | Ez(:,ny-1) = -Ez(:,ny); 49 | Ez(nx-1,:) = -Ez(nx,:); 50 | %display 51 | pcolor(Ez') 52 | shading interp 53 | colorbar 54 | title(n) 55 | drawnow 56 | end 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /TR_lin.m: -------------------------------------------------------------------------------- 1 | %physical constants 2 | clear all; 3 | close all; 4 | load 'withtumor.mat'; 5 | load 'withouttumor.mat'; 6 | 7 | c0 = 2.998e8; 8 | eta0 = 120*pi; 9 | mu0 = pi*4e-7; 10 | eps0 = 1e-9/(36*pi); 11 | %box dimensions 12 | width = 0.5; % 30cm 13 | height = 0.5; 14 | length = 0.5; % 1cm 15 | %source parameters 16 | f0 = 1e9; % GHz 17 | band = 2e9; 18 | tw = sqrt(-log(0.1)/(pi*band)^2);%1e-8/pi; 19 | t0 = 4*tw; 20 | %spatial discretization 21 | adipose = 5; 22 | tumor = 10; 23 | sigma = 0; 24 | epsr = tumor; 25 | w = 2 * pi * band; 26 | k = (w/c0)*sqrt(epsr-1j*sigma/(w*eps0)); 27 | beta = real(k); 28 | c = w / beta; 29 | lambda = c/f0; 30 | dxmax = lambda / 20; 31 | dx = dxmax; 32 | dy = dx; 33 | dz = dx; 34 | nx = round(width/dx); 35 | ny = round(height/dy); 36 | nz = round(length/dz); 37 | 38 | %source position 39 | srcx = round(nx / 2); 40 | srcy = round( 3 * ny / 4); 41 | srcz = round(nz / 2); 42 | 43 | % material 44 | eps = ones(nx,ny,nz) * eps0; %* adipose; 45 | sigma = zeros(nx,ny,nz);% * f0 * 1e-9 * 0.5 - 0.5; 46 | %temporal discretization 47 | dt = 0.99/(c0*sqrt(dx^-2+dy^-2+dz^-2)); 48 | 49 | rec1 = trec - rec; 50 | tau = 20e-12; 51 | [foo,tp] = max(abs(rec1),[],2); 52 | for k=1:1:nrec 53 | recn(k,:) = exp(-((dt*((1:1:n_iter)-tp(k)))/tau).^2) .* rec1(k,:); 54 | end 55 | % hold on 56 | % plot(rec(15,:)) 57 | % plot(exp(-((dt*((1:1:n_iter)-tp(15)))/tau).^2)) 58 | % draw now 59 | % 60 | % while 1 61 | % end 62 | 63 | 64 | %EM field dimensions 65 | Hx = zeros(nx,ny,nz); 66 | Hy = zeros(nx,ny,nz); 67 | Hz = zeros(nx,ny,nz); 68 | Ex = zeros(nx,ny,nz); 69 | Ey = zeros(nx,ny,nz); 70 | Ez = zeros(nx,ny,nz); 71 | %iteration 72 | i = 0; 73 | for n=1:1:n_iter 74 | %magnetic field derivatives 75 | Hxy = diff(Hx,1,2); 76 | Hxz = diff(Hx,1,3); 77 | Hzx = diff(Hz,1,1); 78 | Hzy = diff(Hz,1,2); 79 | Hyx = diff(Hy,1,1); 80 | Hyz = diff(Hy,1,3); 81 | %electric field maxwell equations 82 | epsi = eps(:,2:end-1,2:nz-1); 83 | ksi = (dt * sigma(:,2:end-1,2:nz-1)) ./ ( 2 * epsi ); 84 | c2 = (1./(1+ksi)).*(dt./epsi); 85 | c1 = (1-ksi)./(1+ksi); 86 | Ex(:,2:end-1,2:end-1) = c1.*Ex(:,2:end-1,2:nz-1) - c2.*((1/dy)*Hzy(:,1:end-1,2:end-1) - (1/dz)*Hyz(:,2:ny-1,1:end-1)); 87 | 88 | 89 | epsi = eps(2:end-1,:,2:end-1); 90 | ksi = (dt * sigma(2:end-1,:,2:end-1)) ./ ( 2 * epsi ); 91 | c2 = (1./(1+ksi)).*(dt./epsi); 92 | c1 = (1-ksi)./(1+ksi); 93 | Ey(2:end-1,:,2:end-1) = c1.*Ey(2:end-1,:,2:end-1) - c2.*((1/dz)*Hxz(2:end-1,:,1:end-1) - (1/dx)*Hzx(1:end-1,:,2:end-1)); 94 | 95 | epsi = eps(2:end-1,2:end-1,:); 96 | ksi = (dt * sigma(2:end-1,2:end-1,:)) ./ ( 2 * epsi ); 97 | c2 = (1./(1+ksi)).*(dt./epsi); 98 | c1 = (1-ksi)./(1+ksi); 99 | Ez(2:end-1,2:end-1,:) = c1.*Ez(2:end-1,2:end-1,:) - c2.*((1/dx)*Hyx(1:end-1,2:end-1,:) - (1/dy)*Hxy(2:end-1,1:end-1,:)); 100 | 101 | %TR sources 102 | for k=1:nrec 103 | Ez(recdx * k, recy, recz) = Ez(recdx * k, recy, recz) + recn(k, n_iter-n+1); 104 | end 105 | %Ez(recx, recdy , recz) 106 | %rec(1,n_iter-n) 107 | %electric field derivatives 108 | Exy = diff(Ex,1,2); 109 | Exz = diff(Ex,1,3); 110 | Ezx = diff(Ez,1,1); 111 | Ezy = diff(Ez,1,2); 112 | Eyx = diff(Ey,1,1); 113 | Eyz = diff(Ey,1,3); 114 | 115 | %magnetic field maxwell equations 116 | Hx(:,1:end-1,1:end-1) = Hx(:,1:end-1,1:end-1) + (dt/(mu0*dy))*Ezy(:,:,1:end-1) - (dt/(mu0*dz))*Eyz(:,1:end-1,:); 117 | Hy(1:end-1,:,1:end-1) = Hy(1:end-1,:,1:end-1) + (dt/(mu0*dz))*Exz(1:end-1,:,:) - (dt/(mu0*dx))*Ezx(:,:,1:end-1); 118 | Hz(1:end-1,1:end-1,:) = Hz(1:end-1,1:end-1,:) + (dt/(mu0*dx))*Eyx(:,1:end-1,:) - (dt/(mu0*dy))*Exy(1:end-1,:,:); 119 | 120 | %display 121 | if 1 %n>120 && n<160) 122 | %slice(:,:)=Ez(30:60,round(ny/2)-20:round(ny/2)+3,srcz); 123 | slice(:,:)=Ez(35:55,35:55,srcz); 124 | pcolor(slice.'); 125 | colorbar; 126 | shading interp 127 | drawnow 128 | end 129 | i = i+1; 130 | disp(i) 131 | 132 | %R(n) = varimax_norm(Ez(30:56,round(ny/2)-20:round(ny/2)+3,srcz)); 133 | R(n) = varimax_norm(Ez(35:55,35:55,srcz)); 134 | end 135 | 136 | figure;plot(R) 137 | 138 | function R = varimax_norm(Ez) 139 | R = sum(sum(sum(Ez.^2)))^2 / sum(sum(sum(Ez.^4))); 140 | end 141 | -------------------------------------------------------------------------------- /WithTumor.m: -------------------------------------------------------------------------------- 1 | %physical constants 2 | clear all; 3 | close all; 4 | c0 = 2.998e8; 5 | eta0 = 120*pi; 6 | mu0 = pi*4e-7; 7 | eps0 = 1e-9/(36*pi); 8 | %box dimensions 9 | width = 0.5; % cm 10 | height = 0.5; 11 | length = 0.5; % cm 12 | %source parameters 13 | f0 = 1e9; % GHz 14 | band = 2e9; 15 | %tw = sqrt(-log(0.1)/(pi*band)^2);%1e-8/pi; 16 | %spatial discretization 17 | adipose = 1; %5; 18 | tumor = 10; 19 | sigma = 5; 20 | epsr = tumor; 21 | w = 2 * pi * band; 22 | k = (w/c0)*sqrt(epsr-1j*sigma/(w*eps0)); 23 | beta = real(k); 24 | c = w / beta; 25 | lambda = c/f0; 26 | dxmax = lambda / 20; 27 | dx = dxmax; 28 | dy = dxmax; 29 | dz = dxmax; 30 | nx = round(width/dx); 31 | ny = round(height/dy); 32 | nz = round(length/dz); 33 | %source position 34 | srcx = round(nx / 2); 35 | srcy = round( 3 * ny / 4); 36 | srcz = round(nz / 2); 37 | %material 38 | mw = 4; % width 39 | mh = 4; % height 40 | ml = 4; % length 41 | %mx = nx / 4-10-mw/2; 42 | mx = nx / 2-10-mw/2; 43 | my = ny / 2-mh/2; 44 | mz = nz / 2-ml/2; 45 | 46 | al = 0; 47 | 48 | eps = ones(nx,ny,nz) * eps0 ; 49 | sigma = zeros(nx,ny,nz);%*f0 * 1e-9 * 0.5 - 0.5; 50 | for i=1:1:nx 51 | for j=1:1:ny 52 | for k=1:1:nz 53 | % adipose tissue is located under z < al 54 | if (kmx && i<(mw+mx) && j>my && j<(mh+my) && k>mz && k<(ml+mz)) 59 | eps(i,j,k) = eps0 * tumor; 60 | sigma(i,j,k) = f0 * 1e-9 - 0.5; 61 | end 62 | end 63 | end 64 | end 65 | %time discretization 66 | dt = 0.99/(c0*sqrt(dx^-2+dy^-2+dz^-2)); 67 | 68 | tw=16*dt; 69 | t0=3*tw; 70 | 71 | n_iter = 250; 72 | %receivers 73 | nrec = round(nx / 3)-1; 74 | recdx = round(nx / nrec); 75 | recy = srcy-20; 76 | recz = srcz; 77 | rec = zeros(nrec,n_iter); 78 | %EM field dimensions 79 | Hx = zeros(nx,ny,nz); 80 | Hy = zeros(nx,ny,nz); 81 | Hz = zeros(nx,ny,nz); 82 | Ex = zeros(nx,ny,nz); 83 | Ey = zeros(nx,ny,nz); 84 | Ez = zeros(nx,ny,nz); 85 | %iteration 86 | i = 0; 87 | for n=1:1:n_iter 88 | %magnetic field derivatives 89 | Hxy = diff(Hx,1,2); 90 | Hxz = diff(Hx,1,3); 91 | Hzx = diff(Hz,1,1); 92 | Hzy = diff(Hz,1,2); 93 | Hyx = diff(Hy,1,1); 94 | Hyz = diff(Hy,1,3); 95 | 96 | %electric field maxwell equations 97 | epsi = eps(:,2:end-1,2:nz-1); 98 | ksi = (dt * sigma(:,2:end-1,2:nz-1)) ./ ( 2 * epsi ); 99 | c2 = (1./(1+ksi)).*(dt./epsi); 100 | c1 = (1-ksi)./(1+ksi); 101 | Ex(:,2:end-1,2:end-1) = c1.*Ex(:,2:end-1,2:nz-1) + c2.*((1/dy)*Hzy(:,1:end-1,2:end-1) - (1/dz)*Hyz(:,2:ny-1,1:end-1)); 102 | 103 | epsi = eps(2:end-1,:,2:end-1); 104 | ksi = (dt * sigma(2:end-1,:,2:end-1)) ./ ( 2 * epsi ); 105 | c2 = (1./(1+ksi)).*(dt./epsi); 106 | c1 = (1-ksi)./(1+ksi); 107 | Ey(2:end-1,:,2:end-1) = c1.*Ey(2:end-1,:,2:end-1) + c2.*((1/dz)*Hxz(2:end-1,:,1:end-1) - (1/dx)*Hzx(1:end-1,:,2:end-1)); 108 | 109 | epsi = eps(2:end-1,2:end-1,:); 110 | ksi = (dt * sigma(2:end-1,2:end-1,:)) ./ ( 2 * epsi ); 111 | c2 = (1./(1+ksi)).*(dt./epsi); 112 | c1 = (1-ksi)./(1+ksi); 113 | Ez(2:end-1,2:end-1,:) = c1.*Ez(2:end-1,2:end-1,:) + c2.*((1/dx)*Hyx(1:end-1,2:end-1,:) - (1/dy)*Hxy(2:end-1,1:end-1,:)); 114 | 115 | %gaussian source 116 | %f(n) = sin(2*pi*f0*n*dt)*exp(-(n*dt-t0)^2/(tw^2))/dy; 117 | f(n) = -2*(n*dt-t0)/tw*exp(-(n*dt-t0)^2/(tw^2))/dy; 118 | Ez(srcx,srcy,srcz) = Ez(srcx,srcy,srcz) + f(n); 119 | %Ezn(n)=Ez(srcx,srcy,srcz); 120 | 121 | %electric field derivatives 122 | Exy = diff(Ex,1,2); 123 | Exz = diff(Ex,1,3); 124 | Ezx = diff(Ez,1,1); 125 | Ezy = diff(Ez,1,2); 126 | Eyx = diff(Ey,1,1); 127 | Eyz = diff(Ey,1,3); 128 | 129 | %magnetic field maxwell equations 130 | Hx(:,1:end-1,1:end-1) = Hx(:,1:end-1,1:end-1) - (dt/(mu0*dy))*Ezy(:,:,1:end-1) + (dt/(mu0*dz))*Eyz(:,1:end-1,:); 131 | Hy(1:end-1,:,1:end-1) = Hy(1:end-1,:,1:end-1) - (dt/(mu0*dz))*Exz(1:end-1,:,:) + (dt/(mu0*dx))*Ezx(:,:,1:end-1); 132 | Hz(1:end-1,1:end-1,:) = Hz(1:end-1,1:end-1,:) - (dt/(mu0*dx))*Eyx(:,1:end-1,:) + (dt/(mu0*dy))*Exy(1:end-1,:,:); 133 | 134 | for k=1:1:nrec 135 | rec(k,n) = Ez(recdx * k, recy, recz); 136 | end 137 | 138 | %display 139 | if (mod(i,5)==0) 140 | slice(:,:)=Ez(:,:,srcz); 141 | pcolor(slice'); 142 | colorbar; 143 | shading interp 144 | drawnow 145 | end 146 | i = i+1; 147 | disp(i) 148 | end 149 | 150 | close all 151 | hold on 152 | for k=1:1:nrec 153 | plot(rec(k,:)) 154 | end 155 | 156 | trec = rec; 157 | save('withtumor.mat','trec','nrec','n_iter','recy','recdx','recz') 158 | 159 | 160 | -------------------------------------------------------------------------------- /WithoutTumor.m: -------------------------------------------------------------------------------- 1 | %physical constants 2 | clear all; 3 | close all; 4 | c0 = 2.998e8; 5 | eta0 = 120*pi; 6 | mu0 = pi*4e-7; 7 | eps0 = 1e-9/(36*pi); 8 | %box dimensions 9 | width = 0.5; % cm 10 | height = 0.5; 11 | length = 0.5; % cm 12 | %source parameters 13 | f0 = 1e9; % GHz 14 | band = 2e9; 15 | tw = sqrt(-log(0.1)/(pi*band)^2);%1e-8/pi; 16 | t0 = 4*tw; 17 | %spatial discretization 18 | adipose = 1; %5; 19 | sigma = 5; 20 | epsr = 10; 21 | w = 2 * pi * band; 22 | k = (w/c0)*sqrt(epsr-1j*sigma/(w*eps0)); 23 | beta = real(k); 24 | c = w / beta; 25 | lambda = c/f0; 26 | dxmax = lambda / 20; 27 | dx = dxmax; 28 | dy = dxmax; 29 | dz = dxmax; 30 | nx = round(width/dx); 31 | ny = round(height/dy); 32 | nz = round(length/dz); 33 | %source position 34 | srcx = round(nx / 2); 35 | srcy = round( 3 * ny / 4); 36 | srcz = round(nz / 2); 37 | %material 38 | al = 0; 39 | 40 | eps = ones(nx,ny,nz) * eps0 ; 41 | sigma = zeros(nx,ny,nz);%*f0 * 1e-9 * 0.5 - 0.5; 42 | for i=1:1:nx 43 | for j=1:1:ny 44 | for k=1:1:nz 45 | % adipose tissue is located under z < al 46 | if (kmx && i<(mw+mx) && j>my && j<(mh+my) && k>mz && k<(ml+mz)) 59 | eps(i,j,k) = eps0 * tumor; 60 | sigma(i,j,k) = 0; 61 | end 62 | end 63 | end 64 | end 65 | %time discretization 66 | dt = 0.99/(c0*sqrt(dx^-2+dy^-2+dz^-2)); 67 | 68 | tw=16*dt; 69 | t0=3*tw; 70 | 71 | n_iter = 250; 72 | %receivers 73 | nrec = round(nx / 3)-1; 74 | recdx = round(nx / nrec); 75 | recy = srcy-15; 76 | recz = srcz; 77 | rec = zeros(nrec,n_iter); 78 | %EM field dimensions 79 | Hx = zeros(nx,ny,nz); 80 | Hy = zeros(nx,ny,nz); 81 | Hz = zeros(nx,ny,nz); 82 | Ex = zeros(nx,ny,nz); 83 | Ey = zeros(nx,ny,nz); 84 | Ez = zeros(nx,ny,nz); 85 | %iteration 86 | i = 0; 87 | for n=1:1:n_iter 88 | %magnetic field derivatives 89 | Hxy = diff(Hx,1,2); 90 | Hxz = diff(Hx,1,3); 91 | Hzx = diff(Hz,1,1); 92 | Hzy = diff(Hz,1,2); 93 | Hyx = diff(Hy,1,1); 94 | Hyz = diff(Hy,1,3); 95 | 96 | %electric field maxwell equations 97 | epsi = eps(:,2:end-1,2:nz-1); 98 | ksi = (dt * sigma(:,2:end-1,2:nz-1)) ./ ( 2 * epsi ); 99 | c2 = (1./(1+ksi)).*(dt./epsi); 100 | c1 = (1-ksi)./(1+ksi); 101 | Ex(:,2:end-1,2:end-1) = c1.*Ex(:,2:end-1,2:nz-1) + c2.*((1/dy)*Hzy(:,1:end-1,2:end-1) - (1/dz)*Hyz(:,2:ny-1,1:end-1)); 102 | 103 | epsi = eps(2:end-1,:,2:end-1); 104 | ksi = (dt * sigma(2:end-1,:,2:end-1)) ./ ( 2 * epsi ); 105 | c2 = (1./(1+ksi)).*(dt./epsi); 106 | c1 = (1-ksi)./(1+ksi); 107 | Ey(2:end-1,:,2:end-1) = c1.*Ey(2:end-1,:,2:end-1) + c2.*((1/dz)*Hxz(2:end-1,:,1:end-1) - (1/dx)*Hzx(1:end-1,:,2:end-1)); 108 | 109 | epsi = eps(2:end-1,2:end-1,:); 110 | ksi = (dt * sigma(2:end-1,2:end-1,:)) ./ ( 2 * epsi ); 111 | c2 = (1./(1+ksi)).*(dt./epsi); 112 | c1 = (1-ksi)./(1+ksi); 113 | Ez(2:end-1,2:end-1,:) = c1.*Ez(2:end-1,2:end-1,:) + c2.*((1/dx)*Hyx(1:end-1,2:end-1,:) - (1/dy)*Hxy(2:end-1,1:end-1,:)); 114 | 115 | %gaussian source 116 | %f(n) = sin(2*pi*f0*n*dt)*exp(-(n*dt-t0)^2/(tw^2))/dy; 117 | f(n) = -2*(n*dt-t0)/tw*exp(-(n*dt-t0)^2/(tw^2))/dy; 118 | Ez(srcx,srcy,srcz) = Ez(srcx,srcy,srcz) + f(n); 119 | %Ezn(n)=Ez(srcx,srcy,srcz); 120 | 121 | %electric field derivatives 122 | Exy = diff(Ex,1,2); 123 | Exz = diff(Ex,1,3); 124 | Ezx = diff(Ez,1,1); 125 | Ezy = diff(Ez,1,2); 126 | Eyx = diff(Ey,1,1); 127 | Eyz = diff(Ey,1,3); 128 | 129 | %magnetic field maxwell equations 130 | Hx(:,1:end-1,1:end-1) = Hx(:,1:end-1,1:end-1) - (dt/(mu0*dy))*Ezy(:,:,1:end-1) + (dt/(mu0*dz))*Eyz(:,1:end-1,:); 131 | Hy(1:end-1,:,1:end-1) = Hy(1:end-1,:,1:end-1) - (dt/(mu0*dz))*Exz(1:end-1,:,:) + (dt/(mu0*dx))*Ezx(:,:,1:end-1); 132 | Hz(1:end-1,1:end-1,:) = Hz(1:end-1,1:end-1,:) - (dt/(mu0*dx))*Eyx(:,1:end-1,:) + (dt/(mu0*dy))*Exy(1:end-1,:,:); 133 | 134 | for k=1:1:nrec 135 | rec(k,n) = Ez(recdx * k, recy, recz); 136 | end 137 | 138 | %display 139 | if (mod(i,5)==0) 140 | slice(:,:)=Ez(:,:,srcz); 141 | pcolor(slice'); 142 | colorbar; 143 | shading interp 144 | drawnow 145 | end 146 | i = i+1; 147 | disp(i) 148 | end 149 | 150 | close all 151 | hold on 152 | for k=1:1:nrec 153 | plot(rec(k,:)) 154 | end 155 | 156 | trec = rec; 157 | save('withtumor.mat','trec','nrec','n_iter','recy','recdx','recz') 158 | 159 | 160 | -------------------------------------------------------------------------------- /hytrf.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overengineer/TR-FDTD/f08ef6c147c1d57713e9fc545c8510a50e516dd0/hytrf.m -------------------------------------------------------------------------------- /kaynakTR_lossy.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overengineer/TR-FDTD/f08ef6c147c1d57713e9fc545c8510a50e516dd0/kaynakTR_lossy.m -------------------------------------------------------------------------------- /makale3d.m: -------------------------------------------------------------------------------- 1 | %physical constants 2 | clear all; 3 | close all; 4 | c0 = 2.998e8; 5 | eta0 = 120*pi; 6 | mu0 = pi*4e-7; 7 | eps0 = 1e-9/(36*pi); 8 | %box dimensions 9 | nx = 249; 10 | ny = 249; 11 | delta = 1.2e-2; %1.2cm 12 | dx = delta; 13 | dy = delta; 14 | dt = 20e-12; %0.95/(c*sqrt(dx^-2+dy^-2)); 15 | f0 = 2e9; %2GHz 16 | tw = 16*dt; 17 | t0 = 200*dt; 18 | %spatial discretization 19 | adipose = 4.58; 20 | tumor = 60; 21 | sigma = 0.52; 22 | epsr = tumor; 23 | w = 2 * pi * f0; 24 | k = (w/c0)*sqrt(epsr-1j*sigma/(w*eps0)); 25 | beta = real(k); 26 | c = w / beta; 27 | lambda = c/f0; 28 | dxmax = lambda / 10; 29 | dx = dxmax; 30 | dy = dxmax; 31 | dz = dxmax; 32 | nx = round(width/dx); 33 | ny = round(height/dy); 34 | nz = round(length/dz); 35 | %source position 36 | srcx = round(nx / 2); 37 | srcy = round(ny / 2); 38 | srcz = round(3 * nz / 4); 39 | %material 40 | mx = 3 * nx / 8; 41 | my = ny / 8; 42 | mz = nz / 8; 43 | mw = nx / 4; % width 44 | mh = ny / 4; % height 45 | ml = nz / 4; % length 46 | al = ny / 2; 47 | eps = ones(nx,ny,nz) * eps0 * adipose; 48 | sigma = ones(nx,ny,nz) * f0 * 1e-9 * 0.5 - 0.5;; 49 | for i=1:1:nx 50 | for j=1:1:ny 51 | for k=1:1:nz 52 | % adipose tissue is located under z < al 53 | if (kmx && i<(mw+mx) && j>my && j<(mh+my) && k>mz && k<(ml+mz)) 58 | eps(i,j,k) = eps0 * tumor; 59 | sigma(i,j,k) = f0 * 1e-9 - 0.5; 60 | end 61 | end 62 | end 63 | end 64 | %time discretization 65 | dt = 0.99/(c0*sqrt(dx^-2+dy^-2+dz^-2)); 66 | n_iter = 10000; 67 | %receivers 68 | nrec = round(nx / 3)-1; 69 | recdy = round(ny / nrec); 70 | recx = srcx; 71 | recz = srcz; 72 | rec = zeros(nrec,n_iter); 73 | %EM field dimensions 74 | Hx = zeros(nx,ny,nz); 75 | Hy = zeros(nx,ny,nz); 76 | Hz = zeros(nx,ny,nz); 77 | Ex = zeros(nx,ny,nz); 78 | Ey = zeros(nx,ny,nz); 79 | Ez = zeros(nx,ny,nz); 80 | %iteration 81 | i = 0; 82 | for n=1:1:n_iter 83 | %magnetic field derivatives 84 | Hxy = diff(Hx,1,2); 85 | Hxz = diff(Hx,1,3); 86 | Hzx = diff(Hz,1,1); 87 | Hzy = diff(Hz,1,2); 88 | Hyx = diff(Hy,1,1); 89 | Hyz = diff(Hy,1,3); 90 | 91 | %electric field maxwell equations 92 | epsi = eps(:,2:end-1,2:nz-1); 93 | ksi = (dt * sigma(:,2:end-1,2:nz-1)) ./ ( 2 * epsi ); 94 | c2 = (1./(1+ksi)).*(dt./epsi); 95 | c1 = (1-ksi)./(1+ksi); 96 | Ex(:,2:end-1,2:end-1) = c1.*Ex(:,2:end-1,2:nz-1) + c2.*((1/dy)*Hzy(:,1:end-1,2:end-1) - (1/dz)*Hyz(:,2:ny-1,1:end-1)); 97 | 98 | epsi = eps(2:end-1,:,2:end-1); 99 | ksi = (dt * sigma(2:end-1,:,2:end-1)) ./ ( 2 * epsi ); 100 | c2 = (1./(1+ksi)).*(dt./epsi); 101 | c1 = (1-ksi)./(1+ksi); 102 | Ey(2:end-1,:,2:end-1) = c1.*Ey(2:end-1,:,2:end-1) + c2.*((1/dz)*Hxz(2:end-1,:,1:end-1) - (1/dx)*Hzx(1:end-1,:,2:end-1)); 103 | 104 | epsi = eps(2:end-1,2:end-1,:); 105 | ksi = (dt * sigma(2:end-1,2:end-1,:)) ./ ( 2 * epsi ); 106 | c2 = (1./(1+ksi)).*(dt./epsi); 107 | c1 = (1-ksi)./(1+ksi); 108 | Ez(2:end-1,2:end-1,:) = c1.*Ez(2:end-1,2:end-1,:) + c2.*((1/dx)*Hyx(1:end-1,2:end-1,:) - (1/dy)*Hxy(2:end-1,1:end-1,:)); 109 | 110 | %gaussian source 111 | f = sin(2*pi*f0*n*dt)*exp(-(n*dt-t0)^2/(tw^2))/dy; 112 | Ez(srcx,srcy,srcz) = Ez(srcx,srcy,srcz) + f; 113 | %Ezn(n)=Ez(srcx,srcy,srcz); 114 | 115 | %electric field derivatives 116 | Exy = diff(Ex,1,2); 117 | Exz = diff(Ex,1,3); 118 | Ezx = diff(Ez,1,1); 119 | Ezy = diff(Ez,1,2); 120 | Eyx = diff(Ey,1,1); 121 | Eyz = diff(Ey,1,3); 122 | 123 | %magnetic field maxwell equations 124 | Hx(:,1:end-1,1:end-1) = Hx(:,1:end-1,1:end-1) - (dt/(mu0*dy))*Ezy(:,:,1:end-1) + (dt/(mu0*dz))*Eyz(:,1:end-1,:); 125 | Hy(1:end-1,:,1:end-1) = Hy(1:end-1,:,1:end-1) - (dt/(mu0*dz))*Exz(1:end-1,:,:) + (dt/(mu0*dx))*Ezx(:,:,1:end-1); 126 | Hz(1:end-1,1:end-1,:) = Hz(1:end-1,1:end-1,:) - (dt/(mu0*dx))*Eyx(:,1:end-1,:) + (dt/(mu0*dy))*Exy(1:end-1,:,:); 127 | 128 | for k=1:1:nrec 129 | rec(k,n) = Ez(recx,recdy * k ,recz); 130 | end 131 | 132 | %display 133 | if (mod(i,5)==0) 134 | slice(:,:)=Ez(:,:,round(nz/2)); 135 | pcolor(slice'); 136 | colorbar; 137 | drawnow 138 | end 139 | i = i+1; 140 | disp(i) 141 | end 142 | 143 | close all 144 | hold on 145 | for k=1:1:nrec 146 | plot(rec(k,:)) 147 | end 148 | 149 | save('conductive-receivers.mat','rec','nrec','n_iter','recx','recdy','recz') 150 | 151 | 152 | -------------------------------------------------------------------------------- /matlab.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overengineer/TR-FDTD/f08ef6c147c1d57713e9fc545c8510a50e516dd0/matlab.mat -------------------------------------------------------------------------------- /maxwell3d.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from math import sin, exp, sqrt, pi 3 | 4 | def get_device(): 5 | try: 6 | device = torch.device('cuda') 7 | assert device 8 | except: 9 | device = torch.device('cpu') 10 | return torch.device('cpu') #device 11 | 12 | def zeros(m,n,k): 13 | return torch.zeros((m,n,k), device=get_device(), dtype=torch.double) 14 | 15 | def diff(a,dim): 16 | if dim == 0: 17 | return a[1:,:,:] - a[:-1,:,:] 18 | elif dim == 1: 19 | return a[:,1:,:] - a[:,:-1,:] 20 | elif dim == 2: 21 | return a[:,:,1:] - a[:,:,:-1] 22 | 23 | #physical constants 24 | c = 2.998e8 25 | eta0 = 120*pi 26 | mu0 = pi*4e-7 27 | eps0 = 1e-9/(36*pi) 28 | #environment parameters 29 | width = 1 30 | height = 1 31 | depth = 1 32 | f0 = 1e9 33 | tw = 1e-8/pi 34 | t0 = 4*tw 35 | #discretization parameters 36 | dx = 0.01 37 | dy = 0.01 38 | dz = 0.01 39 | nx = width / dx 40 | ny = height / dy 41 | nz = depth / dz 42 | dt = 0.95 / (c*sqrt(dx**-2+dy**-2+dz**-2)) 43 | #calculation parameters 44 | n_iter = 100 45 | #initalization 46 | Hx = zeros(nx,ny,nz) 47 | Hy = zeros(nx,ny,nz) 48 | Hz = zeros(nx,ny,nz) 49 | Ex = zeros(nx,ny,nz) 50 | Ey = zeros(nx,ny,nz) 51 | Ez = zeros(nx,ny,nz) 52 | #iteration 53 | i = 0 54 | 55 | for n in range(n_iter): 56 | 57 | #derivatives 58 | 59 | Hxy = diff(Hx,1); 60 | Hxz = diff(Hx,2); 61 | Hzx = diff(Hz,0); 62 | Hzy = diff(Hz,1); 63 | Hyx = diff(Hy,0); 64 | Hyz = diff(Hy,2); 65 | 66 | #Maxwell Equations 67 | 68 | Ex[:,1:-1,1:-1] += (dt/(eps0*dy))*Hzy[:,:-1,1:-1] - (dt/(eps0*dz))*Hyz[:,1:-1,:-1] 69 | Ey[1:-1,:,1:-1] += (dt/(eps0*dz))*Hxz[1:-1,:,:-1] - (dt/(eps0*dx))*Hzx[:-1,:,1:-1] 70 | Ez[1:-1,1:-1,:] += (dt/(eps0*dx))*Hyx[:-1,1:-1,:] - (dt/(eps0*dy))*Hxy[1:-1,:-1,:] 71 | 72 | #Gaussian Source 73 | 74 | Ez[int(nx/2),int(ny/2),int(nz/2)] += sin(2*pi*f0*n*dt)*exp(-(n*dt-t0)**2/(tw**2))/dy 75 | 76 | #derivatives 77 | 78 | Exy = diff(Ex,1); 79 | Exz = diff(Ex,2);############################!!!!!!!!!!! 80 | Ezx = diff(Ez,0); 81 | Ezy = diff(Ez,1); 82 | Eyx = diff(Ey,0); 83 | Eyz = diff(Ey,2); 84 | 85 | #Maxwell Equations 86 | 87 | Hx[:,:-1,:-1] += -(dt/(mu0*dy))*Ezy[:,:,:-1] + (dt/(mu0*dz))*Eyz[:,:-1,:] 88 | Hy[:-1,:,:-1] += -(dt/(mu0*dz))*Exz[:-1,:,:] + (dt/(mu0*dx))*Ezx[:,:,:-1] 89 | Hz[:-1,:-1,:] += -(dt/(mu0*dx))*Eyx[:,:-1,:] + (dt/(mu0*dy))*Exy[:-1,:,:] 90 | 91 | ####################### I AM HERE ######################### 92 | 93 | """ 94 | #display 95 | if not i%5: 96 | pcolor(Ez[:,int(ny/2),:]) 97 | drawnow 98 | """ 99 | 100 | i += 1 101 | print(i) 102 | 103 | 104 | --------------------------------------------------------------------------------