diff --git a/Matlab Noise Analysis/CorrelatedNoiseSphericalGrid.m b/Matlab Noise Analysis/CorrelatedNoiseSphericalGrid.m new file mode 100644 index 0000000000000000000000000000000000000000..7cd755735573eb7fe80f92fd050605b8b5019e6c --- /dev/null +++ b/Matlab Noise Analysis/CorrelatedNoiseSphericalGrid.m @@ -0,0 +1,119 @@ +% Generate noise with spatial correlation in poloidal, radial and toroidal +% directions +% Sampling on spherical grid with spatial correlation +close all +clear all +clc + +Rmax = 500; +rmin = 100; +rstart = 10; + +L = 2*pi*Rmax; +% Parameters of the noise distribution +mu = 0; % mean of the noise (spatially constant) +sigma = 1; % standard deviation for the noise (spatially constant) +Lr = rmin/5; % correlation length in radial direction +Lp = 2*pi*rmin/10; % Correlation "length" in poloidal direction +Lt = 2*pi*Rmax/2; % Correlation "length" in toroidal direction + + +nr = 10; % number of grid points in x-direction +np = 5; % number of grid points in y-direction +nt = 10; + +r = (rstart/rmin:0.9/(nr-1):1)*rmin; +p = (0:1/(np-1):1)*2*pi; +[P,R] = meshgrid(p,r); + +% Vector of mean at each grid point +Mu = mu*ones(nr*np,1); + +% Construct covariance matrices +Sigma_corr = zeros(nr*np); +Sigma_no_corr = zeros(nr*np); + +for j = 1:np + for i = 1:nr + + k = i + (j-1)*nr; + + % Main diagonal: variance + Sigma_no_corr(k,k) = sigma^2; + Sigma_corr(k,k) = sigma^2; + + % Off-diagonal: spatial correlation + for n = 1:np + for m = 1:nr + l = m + (n-1)*nr; + if l ~= k + Sigma_corr(k,l) = sigma^2*exp(-sqrt((R(m,n)-R(i,j))^2)/Lr)*exp(-(abs(P(m,n)-P(i,j))*(R(m,n)+R(i,j))/2)/Lp); + end + end + end + end +end + +b = issymmetric(Sigma_corr) +d = eig(Sigma_corr) +% Generate the noise from multivariate normal distributions +noise_no_corr = mvnrnd(Mu,Sigma_no_corr); +noise_corr = mvnrnd(Mu,Sigma_corr); + +% Reshape onto mesh +noise_no_corr = reshape(noise_no_corr,nr,np); +noise_corr = reshape(noise_corr,nr,np); + +% Plot +figure;surf(R,P,noise_no_corr);title('Independent'); +figure;surf(R,P,noise_corr); title('Spatial correlation'); + +% Also check toroidal + +t = (0:1/(nt-1):1)*2*pi; +p = (0:1/(np-1):1)*2*pi; +[P,T] = meshgrid(p,t); + +% Vector of mean at each grid point +Mu = mu*ones(nt*np,1); + +% Construct covariance matrices +Sigma_corr = zeros(nt*np); +Sigma_no_corr = zeros(nt*np); + +for j = 1:np + for i = 1:nt + + k = i + (j-1)*nt; + + % Main diagonal: variance + Sigma_no_corr(k,k) = sigma^2; + Sigma_corr(k,k) = sigma^2; + + % Off-diagonal: spatial correlation + for n = 1:np + for m = 1:nt + l = m + (n-1)*nt; + if l ~= k + Sigma_corr(k,l) = sigma^2*exp(-(abs(T(m,n)-T(i,j))*(Rmax+R(m,n)*cos(P(m,n))+Rmax+R(i,j)*cos(P(i,j)))/2)/Lt) ... + *exp(-(abs(P(m,n)-P(i,j))*(R(m,n)+R(i,j))/2)/Lp); + end + end + end + end +end + +b = issymmetric(Sigma_corr) +d = eig(Sigma_corr) +% Generate the noise from multivariate normal distributions +noise_no_corr = mvnrnd(Mu,Sigma_no_corr); +noise_corr = mvnrnd(Mu,Sigma_corr); + +% Reshape onto mesh +noise_no_corr = reshape(noise_no_corr,nt,np); +noise_corr = reshape(noise_corr,nt,np); + +% Plot +figure;surf(T,P,noise_no_corr);title('Independent'); +figure;surf(T,P,noise_corr); title('Spatial correlation'); + diff --git a/Matlab Noise Analysis/CorrelatedNoiseSphericalGrid3D.m b/Matlab Noise Analysis/CorrelatedNoiseSphericalGrid3D.m new file mode 100644 index 0000000000000000000000000000000000000000..2e0e42fdafcfd1a19b1ba65d1dc14cf36178ffd9 --- /dev/null +++ b/Matlab Noise Analysis/CorrelatedNoiseSphericalGrid3D.m @@ -0,0 +1,81 @@ +% Generate noise with spatial correlation in poloidal, radial and toroidal +% directions +% Sampling on spherical grid with spatial correlation +% 3D case +close all +clear all +clc + +Rmax = 500; +rmin = 100; +rstart = 10; + +L = 2*pi*Rmax; +% Parameters of the noise distribution +mu = 0; % mean of the noise (spatially constant) +sigma = 1; % standard deviation for the noise (spatially constant) +Lr = rmin/10; % correlation length in radial direction +Lp = 2*pi*rmin/10; % Correlation "length" in poloidal direction +Lt = 2*pi*Rmax/10; % Correlation "length" in toroidal direction + + +nr = 5; +np = 10; +nt = 2; + +r = (rstart/rmin:0.9/(nr-1):1)*rmin; +p = (0:1/(np-1):1)*2*pi; +t = (0:1/(nt-1):1)*2*pi; +[P,R,T] = meshgrid(p,r,t); + +% Vector of mean at each grid point +Mu = mu*ones(nr*np*nt,1); + +% Construct covariance matrices +Sigma_corr = zeros(nr*np*nt); +Sigma_no_corr = zeros(nr*np*nt); + +for h = 1:nt + for j = 1:np + for i = 1:nr + + k = i + (j-1)*nr + (h-1)*nr*np; + + % Main diagonal: variance + Sigma_no_corr(k,k) = sigma^2; + Sigma_corr(k,k) = sigma^2; + + % Off-diagonal: spatial correlation + for p = 1:nt + for n = 1:np + for m = 1:nr + l = m + (n-1)*nr + (p-1)*nr*np; + if l ~= k + Sigma_corr(k,l) = sigma^2*exp(-sqrt((R(m,n,p)-R(i,j,h))^2)/Lr)... + *exp(-(abs(P(m,n,p)-P(i,j,h))*(R(m,n,p)+R(i,j,h))/2)/Lp) ... + *exp(-(abs(T(m,n,p)-T(i,j,h))*(Rmax+R(m,n,p)*cos(P(m,n,p))+Rmax+R(i,j,h)*cos(P(i,j,h)))/2)/Lt); + end + end + end + end + end + end +end + +b = issymmetric(Sigma_corr) +d = eig(Sigma_corr) +% Generate the noise from multivariate normal distributions +noise_no_corr = mvnrnd(Mu,Sigma_no_corr); +noise_corr = mvnrnd(Mu,Sigma_corr); + +% To extract the noise, store in same format as BFSTREN (1 noise value for +% every grid point) => then shift to cell centers + + +% Reshape onto mesh +noise_no_corr = reshape(noise_no_corr,nr,np,nt); +noise_corr = reshape(noise_corr,nr,np,nt); + +% Plot +%figure;surf(R,P,T);title('Independent'); +%figure;surf(R,P,T); title('Spatial correlation'); \ No newline at end of file diff --git a/Matlab Noise Analysis/Sampling_spatial_correlation.m b/Matlab Noise Analysis/Sampling_spatial_correlation.m new file mode 100644 index 0000000000000000000000000000000000000000..0f2948417a84d5204a9a97e1aee9d9788a55c35d --- /dev/null +++ b/Matlab Noise Analysis/Sampling_spatial_correlation.m @@ -0,0 +1,63 @@ +% Sampling on cartesian grid with spatial correlation +close all +clear all +clc + + +% Parameters of the noise distribution +mu = 0; % mean of the noise (spatially constant) +sigma = 1; % standard deviation for the noise (spatially constant) +L = 0.25; % correlation length (spatially constant) + + +% Grid to sample on +Lx = 1; % length of domain in x-direction +Ly = 1; % length of domain in y-direction + +nx = 10; % number of grid points in x-direction +ny = 10; % number of grid points in y-direction + +x = (0:1/(nx-1):1)*Lx; +y = (0:1/(ny-1):1)*Ly; +[X,Y] = meshgrid(x,y); + + +% Vector of mean at each grid point +Mu = mu*ones(nx*ny,1); + +% Construct covariance matrices +Sigma_corr = zeros(nx*ny); +Sigma_no_corr = zeros(nx*ny); + +for j = 1:ny + for i = 1:nx + + k = i + (j-1)*ny; + + % Main diagonal: variance + Sigma_no_corr(k,k) = sigma^2; + Sigma_corr(k,k) = sigma^2; + + % Off-diagonal: spatial correlation + for n = 1:ny + for m = 1:nx + l = m + (n-1)*ny; + if l ~= k + Sigma_corr(k,l) = sigma^2*exp(-((X(m,n)-X(i,j))^2 + (Y(m,n)-Y(i,j))^2)^0.5/L); + end + end + end + end +end + +% Generate the noise from multivariate normal distributions +noise_no_corr = mvnrnd(Mu,Sigma_no_corr); +noise_corr = mvnrnd(Mu,Sigma_corr); + +% Reshape onto mesh +noise_no_corr = reshape(noise_no_corr,nx,ny); +noise_corr = reshape(noise_corr,nx,ny); + +% Plot +figure;surf(X,Y,noise_no_corr);title('Independent'); +figure;surf(X,Y,noise_corr); title('Spatial correlation'); \ No newline at end of file