نویز سفید: شبیه‌سازی و تحلیل با استفاده از متلب

 

 

تعریف

 

یک فرآیند تصادفی (یا سیگنال به لحاظ بصری) با تابع چگالی طیف توان (Power Spectral Density – PSD) ثابت، یک فرآیند نویز سفید است.

 

 

چگالی طیف توان

 

تابع چگالی طیف توان (PSD)، میزان توان موجود در هر جزء طیفی را نشان میدهد. مثلا برای یک موج سینوسی با فرکانس ثابت، شکل PSD فقط شامل یک جزء طیفی در فرکانس مشخص میشود. PSD یک تابع زوج است و بنابراین اجزاء فرکانسی حول محور y به شکل قرینه ظاهر میشوند. به همین دلیل، برای یک موج سینوسی با فرکانس ثابت، شکل دوطرفه PSD شامل دو جزء فرکانسی – یکی در بخش مثبت و دیگری در بخش منفی – خواهد بود.

 

 

نویز سفید گوسین و یکنواخت

 

یک سیگنال (فرآیند) نویز سفید، بوسیله مجموعه‌ای از متغیرهای تصادفی مستقل و با توزیع یکنواخت (i.i.d) ساخته میشود. در حوزه زمان-گسسته، سیگنال نویز سفید یک سری از نمونه‌های مستقل و تولید شده از تابع توزیع احتمال یکسان، است. برای مثال، شما میتوانید یک سیگنال نویز سفید را با استفاده از یک مولد اعداد تصادفی که تمامی نمونه‌های آن از توزیع گوسین مشخصی تولید شده‌اند، بسازید. این سیگنال، نویز گوسین سفید (WGN) نام دارد. به طور مشابه، یک سیگنال نویز سفید تولید شده از تابع توزیع احتمال یکنواخت، نویز سفید یکنواخت نام دارد.

نویز گوسین و نویز یکنواخت معمولا در مدل کردن سیستمها استفاده میشوند. در مدل کردن یا شبیه‌سازی، نویز سفید با استفاده از یک مولد اعداد تصادفی مناسب قابل تولید است. نویز گوسین سفید بوسیله تابع randn در متلب که اعداد تصادفی با توزیع گوسین تولید میکند، ایجاد میشود. به طور مشابه، تابع rand میتواند برای تولید نویز سفید یکنواخت در متلب استفاده شود. زمانیکه از مولد اعداد تصادفی استفاده میشود، یک سری از اعداد تصادفی از یک توزیع مشخص، ایجاد میشوند. فرض کنید میخواهیم نویز گوسین سفید به طول 10 را با استفاده از تابع randn در متلب تولید کنیم به نحوی که میانگین آن صفر و انحراف معیار آن یک باشد:

 

کد متلب:

 

>> mu=0;sigma=1;

>> noise= sigma *randn(1,10)+mu

خروجی:

 

noise =   -1.5121    0.7321   -0.1621    0.4651    1.4284    1.0955   -0.5586    1.4362   -0.8026    0.0949

 

 

i.i.d چیست؟

 

کد بالا، 10 عدد تصادفی از توزیع نرمال استاندارد تولید میکند. همانطور که میدانیم، یک فرآیند سفید به شکل یک فرآیند تصادفی دیده میشود که از چندین متغیر تصادفی با تابع توزیع احتمال یکسان (Probability Density Function – PDF)، تشکیل شده است. 10 عدد تصادفی بالا، از یک PDF یکسان تولید شده‌اند. این شرط، همان شرط توزیع شده به طور یکسان (identically distributed – i.d) است. از طرفی، نمونه‌های بالا به صورت مستقل از هم نیز هستند. علاوه بر این، هر نمونه میتواند به شکل یک متغیر تصادفی نیز دیده شود. در واقع، ما یک فرآیند تصادفی تولید کرده‌ایم که از تحقق 10 متغیر تصادفی، تشکیل شده است. به همین دلیل میتوان گفت که فرآیند بالا از متغیرهای تصادفی مستقل از هم و توزیع شده به طور یکسان یا i.i.d ساخته شده است.

 

 

نویز سفید تعریف شده به طور اکید و ضعیف

 

از آنجاییکه فرآیند نویز سفید از متغیرها یا نمونه‌های تصادفی i.i.d ساخته شده است، تمامی نمونه‌ها از تابع توزیع احتمال (PDF) یکسان پیروی میکنند. بنابراین، تابع توزیع احتمال توأم فرآیند با جابه‌جایی زمانی، تغییر نخواهد کرد. چنین فرآیندی را فرآیند ایستان (stationary) گویند. به همین دلیل، این نویز، یک فرآیند ایستان است. همچنان که فرآیند ایستان قابل دسته‌بندی به دو گروه ایستان اکید یا دقیق (Strictly Sense Stationary – SSS) و ایستان ضعیف یا عام (Wide Sense Stationary – WSS) است، نویز سفید نیز میتواند SSS یا WSS باشد. به طور متناظر، این نویز را به ترتیب میتوان سیگنال نویز سفید تعریف شده به طور اکید و سیگنال نویز سفید تعریف شده به طور ضعیف نامید.

 

 

تابع یا ماتریس کواریانس چگونه است؟

 

یک سیگنال نویز سفید، به شکل x(t)، که به طور ضعیف تعریف میشود، شرایط کاربردی بهتری دارد. در اینجا، نمونه‌ها به لحاظ آماری، ناهمبسته (uncorrelated) و توزیع شده به طور یکسان (i.d) با واریانس \sigma^2 هستند. این شرط با استفاده از تابع کواریانس قابل بیان است:

 

COV(x_i,x_j)=\left\{\begin{matrix} \sigma^2, &i=j \\ 0,&i\neq j \end{matrix}\right.

 

اما چرا به تابع کواریانس نیاز داریم؟ زیرا، با فرآیند تصادفی سروکار داریم که از n متغیر تصادفی (n=10 در مثال بالا) تشکیل شده است. چنین فرآیندی به شکل یک بردار تصادفی چند متغیره یا متغیر تصادفی چند متغیره دیده میشود.

برای متغیرهای تصادفی چند متغیره، تابع کواریانس، نحوه رفتار هر کدام از n متغیر تصادفی را در یک فرآیند، نسبت به سایر متغیرها نشان میدهد. تابع کواریانس، مفهوم واریانس را به ابعاد چندگانه تعمیم و گسترش میدهد.

معادله بالا وقتی به شکل ماتریسی نمایش داده شود، ماتریس کواریانس فرآیند نویز سفید را ارائه میدهد. از آنجاییکه متغیرهای تصادفی در این فرآیند به طور آماری ناهمبسته هستند، ماتریس کواریانس تنها بر روی قطر اصلی خود مقدار غیرصفر دارد.

 

C_{xx}=\begin{bmatrix} \sigma^2 &... &0 \\\vdots &\sigma^2 & \vdots \\ 0&... &\sigma^2 \end{bmatrix}

 

ماتریس بالا نشان میدهد که برای هر متغیر تصادفی، فقط تابع خودهمبستگی (auto-correlation) وجود دارد. مقادیر همبستگی متقابل (cross-correlation)، صفر هستند (نمونه‌ها یا متغیرها نسبت به هم به طور آماری ناهمبسته هستند). المانهای قطری برابر با واریانس هر متغیر است و سایر المانهای ماتریس نیز صفر هستند. تابع خودهمبستگی گروهی نویز سفید تعریف شده به طور ضعیف به این شکل، نشان میدهد که تابع خودهمبستگی نویز سفید تعریف شده به طور ضعیف همه جا صفر است به جز در تاخیر \tau=0:

 

R_{xx}(\tau)=E[x(t)x^*(t-\tau)]=\sigma^2 \delta(\tau)

 

 

خصوصیات حوزه فرکانس

 

قضیه وینر-کینشین (Wiener-Khintchine) میگوید: برای فرآیند ایستان ضعیف (WSS)، تابع چگالی طیف توان S_{xx}(f) یک فرآیند تصادفی، از طریق تبدیل فوریه تابع خودهمبستگی آن فرآیند قابل محاسبه است. در حوزه زمان-پیوسته، این مفهوم به شکل زیر بیان میشود:

 

S_{xx}(f)=F[R_{xx}(\tau)]=\int_{-\infty}^{+\infty}R_{xx}(\tau)e^{-j2\pi f\tau}d \tau

 

برای فرآیند نویز سفید تعریف شده به طور ضعیف، میانگین، ثابت است و کواریانس آن با زمان تغییر نمیکند. این شرایط کافی، برای فرآیند WSS است. بنابراین میتوانیم قضیه وینر-کینشین را اعمال کنیم. تابع چگالی طیف توان فرآیند نویز سفید تعریف شده به طور ضعیف در کل بازه فرکانسی، ثابت و به شکل خط صاف است (شکل پایین). این مقدار ثابت برابر با واریانس یا توان سیگنال نویز است:

 

\\ S_{xx}(f)=F[R_{xx}(\tau)]=\int_{-\infty}^{+\infty}\sigma^2 \delta(\tau)e^{-j2\pi f\tau}d \tau \\ =\sigma ^2 \int_{-\infty}^{+\infty} \delta(\tau)e^{-j2\pi f\tau}d \tau = \sigma^2

 

 

شکل 1- نمایش قضیه وینر-کینشین

 

 

بررسی خصوصیات نویز سفید در متلب

 

با استفاده از تابع randn، یک سیگنال نویز سفید گوسین به طول L=100000 در نرم‌افزار متلب تولید کرده و آن را رسم میکنیم. فرض میکنیم که تابع توزیع احتمال گوسین و با میانگین \mu=0 و انحراف معیار \sigma=2 است. بنابراین واریانس برابر با \sigma^2=4 است. تابع PDF متغیر تصادفی گوسین به صورت تئوری به شکل زیر است:

 

f_X(x)=\frac{1}{\sigma \sqrt{2\pi}}.exp[-\frac{(x-\mu)^2}{2 \sigma^2}]

 

 

clear all; clc; close all;

L=100000; %Sample length for the random signal

mu=0;

sigma=2;

X=sigma*randn(L,1)+mu;

figure();

subplot(2,1,1)

plot(X);

title([‘White noise : \mu_x=’,num2str(mu),’ \sigma^2=’,num2str(sigma^2)])

xlabel(‘Samples’)

ylabel(‘Sample Values’)

grid on;

شکل 2- نمونه‌های نویز شبیه‌سازی شده

 

هیستوگرام سیگنال نویز تولید شده را رسم کرده و با رسم PDF تئوری در کنار آن، هیستوگرام نویز را اعتبارسنجی میکنیم:

 

subplot(2,1,2)

n=100; %number of Histrogram bins

[f,x]=hist(X,n);

bar(x,f/trapz(x,f)); hold on;

%Theoretical PDF of Gaussian Random Variable

g=(1/(sqrt(2*pi)*sigma))*exp(-((x-mu).^2)/(2*sigma^2));

plot(x,g);hold off; grid on;

title(‘Theoretical PDF and Simulated Histogram of White Gaussian Noise’);

legend(‘Histogram’,‘Theoretical PDF’);

xlabel(‘Bins’);

ylabel(‘PDF f_x(x)’);

شکل 3- رسم pdf شبیه‌سازی شده و تئوری متغیر تصادفی گوسین

 

تابع خودهمبستگی نویز سفید را محاسبه میکنیم. تابع محاسبه شده به طور صحیح مقیاس‌دهی میشود. اگر تابع xcorr متلب را برای محاسبه خودهمبستگی به کار میبرید، بهتر است از حالت biased در ورودی تابع برای مقایس‌دهی صحیح استفاده کنید:

 

figure();

Rxx=1/L*conv(flipud(X),X);

lags=(-L+1):1:(L-1);

%Alternative method

%[Rxx,lags] =xcorr(X,’biased’);

%The argument ‘biased’ is used for proper scaling by 1/L

%Normalize auto-correlation with sample length for proper scaling

plot(lags,Rxx);

title(‘Auto-correlation Function of white noise’);

xlabel(‘Lags’)

ylabel(‘Correlation’)

grid on;

شکل 4- تابع خودهمبستگی نویز تولید شده

 

 

شبیه‌سازی PSD

 

شبیه‌سازی چگالی طیف توان (PSD) نویز سفید، نکات ریزی دارد. در اینجا دو مشکل وجود دارد: 1- نمونه‌های تولید شده، طول محدودی دارند. این مساله مترادف با کوتاه‌سازی نمونه‌های تصادفی نامحدود است. از این مساله چنین استنباط میشود که تاخیرها بر روی یک بازه ثابت تعریف شده‌اند. 2- مولد اعداد تصادفی مورد استفاده در شبیه‌سازی، در واقع شبه-تصادفی هستند. بنا به همین دو موضوع، با اعمال تبدیل فوریه به مقادیر خودهمبستگی بدست آمده، یک طیف PSD صاف و کاملا ثابت حاصل نخواهد شد. حالت تزلزل موجود در شکل PSD، با تولید سیگنال تصادفی به اندازه کافی طولانی و میانگین‌گیری بر روی سیگنالهای تصادفی تولید شده در دفعات متعدد، قابل کاهش است.

 

 

شبیه‌سازی نویز سفید گوسین به شکل یک بردار تصادفی گوسین چندمتغیره

 

برای تصدیق چگالی طیف توان نویز سفید، از رویکرد تعبیر نویز به شکل ترکیبی از N متغیر تصادفی گوسین استفاده میکنیم. میخواهیم میانگین PSD را بر روی L تکرار، بدین شکل محاسبه کنیم. از آنجاییکه N متغیر تصادفی گوسین (N نمونه) در هر تکرار وجود دارد، ماتریس کواریانس C_{xx} با ابعاد N در N حاصل خواهد شد. بردار متوسط این حالت چندمتغیره نیز به ابعاد N در 1 است.

تجزیه چولسکی (Cholesky Decomposition) ماتریس کواریانس، انحراف معیار معادل برای حالت چندمتغیره را ارائه میکند. تجزیه چولسکی میتواند به صورت یک عمل ریشه مجذور دیده شود. تابع randn متلب در اینجا برای تولید فرآیند تصادفی گوسین چندبعدی با ماتریس میانگین و کواریانس مشخص، استفاده میشود:

 

%Verifying the constant PSD of White Gaussian Noise Process

%with arbitrary mean and standard deviation sigma

mu=0; %Mean of each realization of Noise Process

sigma=2; %Sigma of each realization of Noise Process

L = 1000; %Number of Random Signal realizations to average

N = 1024; %Sample length for each realization set as power of 2 for FFT

%Generating the Random Process – White Gaussian Noise process

MU=mu*ones(1,N); %Vector of mean for all realizations

Cxx=(sigma^2)*diag(ones(N,1)); %Covariance Matrix for the Random Process

R = chol(Cxx); %Cholesky of Covariance Matrix

%Generating a Multivariate Gaussian Distribution with given mean vector and

%Covariance Matrix Cxx

z = repmat(MU,L,1) + randn(L,N)*R;

PSD فرآیند تصادفی چندبعدی بالا محاسبه شده و برای داشتن یک نمودار صاف، میانگین‌گیری روی تکرارهای مختلف انجام میشود:

 

 

%By default, FFT is done across each column – Normal command fft(z)

%Finding the FFT of the Multivariate Distribution across each row

%Command – fft(z,[],2)

Z = 1/sqrt(N)*fft(z,[],2); %Scaling by sqrt(N);

Pzavg = mean(Z.*conj(Z));%Computing the mean power from fft

normFreq=[-N/2:N/2-1]/N;

Pzavg=fftshift(Pzavg); %Shift zero-frequency component to center of spectrum

plot(normFreq,10*log10(Pzavg),‘r’);

axis([-0.5 0.5 0 10]); grid on;

ylabel(‘Power Spectral Density (dB/Hz)’);

xlabel(‘Normalized Frequency’);

title(‘Power spectral density of white noise’);

 

 

شکل 5- چگالی طیف توان نویز تولید شده

 

نمودار PSD نویز تولیدی، توان تقریبا ثابت در تمام فرکانسها را نشان میدهد. به عبارت دیگر، برای یک سیگنال نویز سفید، PDF ثابت (صاف) روی تمامی فرکانسها (-\infty تا +\infty) بدست می‌آید. محور y در شکل بالا، واحد dB/Hz دارد. میتوان ملاحظه کرد که مقدار توان ثابت برابر است با:

 

constant power =10log_{10}(\sigma^2)=10log_{10}(4)=6\ dB

 

 

 

 

 

منبع: www.gaussianwaves.com