自定义高斯白噪声功率和带宽
1、目标
在通信、雷达和计量等领域,在仿真、测试和计量过程中,常常需要使用信号源产生高斯白噪声信号,而且,重要的是,准确定义的噪声功率和带宽。
本文目的是产生用户自定义功率和带宽的高斯白噪声,方法是利用矢量信号发生器,实现噪声发生器的功能。
射频噪声发生器的实现方式通常有两种:
一种是基于二极管元件的噪声源,通常用来做噪声系数测试中所需的噪声源。本方法产生的噪声信号带宽很宽(可达18GHz或50GHz),可计量超噪比ENR;缺点是噪声带宽和功率不可控,且噪声功率较低,另外其匹配(驻波)较差。
另一种是基于矢量信号发生器,在基带实现宽带噪声的带宽和功率设定,调制到射频(可达40GHz)发出。本文所使用的方法,是基于R&S矢量信号发生器实现本目标的。根据所选矢量信号发生器,噪声带宽可以最高达到2GHz。
2、实现方法
2.1. 矢量信号发生器内置噪声选件AWGN
矢量信号发生器通常具有内置附加高斯白噪声功能,其输出方式可以选择信号叠加方式或单纯噪声输出方式,设置方法简单。
优点是设置简单快捷,噪声功率准确,与设置值一致;缺点是产生的噪声带宽不准确,远大于带宽设置值。
2.2. 脉冲序列编辑软件R&S SMW-K300
R&S SMW-K300是一个矢量信号模拟软件,主要功能是模拟各种雷达信号以及非标准自定义矢量调制信号,其中一项功能是自定义白噪声。
能定义功率和带宽的噪声信号,功率偏差约1~2dB,带宽是-6dB带宽定义点。
如果用户仅用到SMW-K300的噪声模拟功能,成本较高。
2.3. 免费ARB信号编辑软件R&S ARBtoolbox+
R&S ARBtoolbox+是一款适用于R&S矢量信号源的免费自定义ARB文件编辑软件,功能之一是产生自定义白噪声、粉红噪声和褐色噪声。
能产生自定义功率和带宽的噪声信号;功率设置值准确,带宽是-6dB带宽定义点。
使用方便,但是带宽受限,只有50MHz。
2.4. Matlab自定义噪声信号
Matlab是信号分析的常用工具软件,使用其噪声(随机信号)的函数以及滤波器函数,非常简单地产生自定义噪声信号。R&S官网上下载matlab程序包(rohde-schwarz.com/applications/r-s-matlab-toolkit-for-signal-generators-application-note_56280-15774.html),通过调用程序包中的m文件函数,将自定义噪声信号转换为*.wv文件,或直接上传仪器,从而产生自定义信号。
本方法能够按照用户的意愿和需求,产生标准的噪声信号,灵活方便,而且,从带宽和功率平坦度角度,本方法产生方式最优。
只需要用户有Matlab,无需精通Matlab编程。
3、实现步骤和表现
3.1. 矢量信号发生器内置噪声选件AWGN
3.2. R&S SMW-K300
3.3. R&S ARBtoolbox+
3.4. Matlab自定义噪声信号
matlab程序包(https://www.rohde-schwarz.com/applications/r-s-matlab-toolkit-for-signal-generators-application-note_56280-15774.html)中,
调取函数文件rs_generate_wave.m及其它m文件:
编写噪声发生器函数Function NoiseGen.m代码如下:
________________________________________
function [Sta]=NoiseGen(BW,fname,InstrCon,addr)%BW:Bandwidth of noise in Hz;
%fname:ARB file name, string without extention;
%InstrCon: instrument connection or not, 1 - connected ; 0 - not connected
%addr: IP address of instrument
%% General setting
BW_CLK_Ratio=0.8; %Ratio of bandwidth/clock
CLK = BW/BW_CLK_Ratio; %clock - sample rate
N=2^20; % number of points
%% Generate white noise and filtered
N_sub =wgn(N,1,0,50,1,'complex');
N_White=[N_sub;N_sub;flip(N_sub)];
lpFilt = designfilt('lowpassfir','PassbandFrequency',BW_CLK_Ratio, ...
'StopbandFrequency',BW_CLK_Ratio+0.01,'PassbandRipple',0.5, ...
'StopbandAttenuation',70,'DesignMethod','equiripple');
IQdata = filter(lpFilt,N_White);
%% IQ data struct for rs_gernerate_wave.m
IQ.I_data=real(IQdata);
IQ.Q_data=imag(IQdata);
IQ.clock=CLK;
IQ.filename =strcat(fname,'.wv');
%% Save data and connect signal generator
if(InstrCon==1)
[status, InstrObj] = rs_connect( 'visa', 'ni', addr );
if(status==1)
rs_generate_wave(InstrObj,IQ,1,1);
else
rs_generate_wave(0,IQ,0,1);
end
else
rs_generate_wave(0,IQ,0,1);
end
Sta=1;
return;