function Xn=Noise(X,noise,snr) % AUTHOR : SHAHIS HASHIM (Research Scholar, IIT Madras) % INPUT % X : Signal (arrey 1xn) % noise : type of noise ('pink', 'blue', 'red', 'violet', 'white') % snr ; required SNR level in dB % OUTPUT % Xn : signal added with noise % Part of this code contains codes written by Dr. Eng. Hristo Zhivomirov % Hristo Zhivomirov (2022). Pink, Red, Blue and Violet Noise Generation with Matlab % (https://www.mathworks.com/matlabcentral/fileexchange/42919-pink-red-blue-and-violet-noise-generation-with-matlab), % MATLAB Central File Exchange. switch noise case 'pink' N_ = pinknoise(length(X)); case 'blue' N_ = bluenoise(length(X)); case 'red' N_ = rednoise(length(X)); case 'violet' N_ = violetnoise(length(X)); case 'white' N_ = whitenoise(length(X)); end A=db2mag(snr); rt=rssq(X)/(rssq(N_)*A); N=N_.*rt; Xn=X+N'; end function x = pinknoise(N) validateattributes(N, {'double'}, ... {'scalar', 'integer', 'nonnan', 'finite'}, ... '', 'N', 1) alpha = -1; alpha = alpha/2; x = randn(1, N); NumUniquePts = ceil((N+1)/2); X = fft(x); X = X(1:NumUniquePts); n = 1:NumUniquePts; X = X.*(n.^alpha); if rem(N, 2) X = [X conj(X(end:-1:2))]; x = real(ifft(X)); else X = [X conj(X(end-1:-1:2))]; x = real(ifft(X)); end x = x - mean(x); x = x/std(x, 1); x = x(:); end function x = bluenoise(N) validateattributes(N, {'double'}, ... {'scalar', 'integer', 'nonnan', 'finite'}, ... '', 'N', 1) alpha = 1; alpha = alpha/2; x = randn(1, N); NumUniquePts = ceil((N+1)/2); X = fft(x); X = X(1:NumUniquePts); n = 1:NumUniquePts; X = X.*(n.^alpha); if rem(N, 2) X = [X conj(X(end:-1:2))]; x = real(ifft(X)); else X = [X conj(X(end-1:-1:2))]; x = real(ifft(X)); end x = x - mean(x); x = x/std(x, 1); x = x(:); end function x = rednoise(N) validateattributes(N, {'double'}, ... {'scalar', 'integer', 'nonnan', 'finite'}, ... '', 'N', 1) alpha = -2; alpha = alpha/2; x = randn(1, N); NumUniquePts = ceil((N+1)/2); X = fft(x); X = X(1:NumUniquePts); n = 1:NumUniquePts; X = X.*(n.^alpha); if rem(N, 2) X = [X conj(X(end:-1:2))]; x = real(ifft(X)); else X = [X conj(X(end-1:-1:2))]; x = real(ifft(X)); end x = x - mean(x); x = x/std(x, 1); x = x(:); end function x = violetnoise(N) validateattributes(N, {'double'}, ... {'scalar', 'integer', 'nonnan', 'finite'}, ... '', 'N', 1) alpha = 2; alpha = alpha/2; x = randn(1, N); NumUniquePts = ceil((N+1)/2); X = fft(x); X = X(1:NumUniquePts); n = 1:NumUniquePts; X = X.*(n.^alpha); if rem(N, 2) X = [X conj(X(end:-1:2))]; x = real(ifft(X)); else X = [X conj(X(end-1:-1:2))]; x = real(ifft(X)); end x = x - mean(x); x = x/std(x, 1); x = x(:); end function x = whitenoise(N) x=wgn(N,1,1); end