1、目標(biāo)
在通信、雷達和計量等領(lǐng)域,在仿真、測試和計量過程中,常常需要使用信號源產(chǎn)生高斯白噪聲信號,而且,重要的是,準確定義的噪聲功率和帶寬。
本文目的是產(chǎn)生用戶自定義功率和帶寬的高斯白噪聲,方法是利用矢量信號發(fā)生器,實現(xiàn)噪聲發(fā)生器的功能。
射頻噪聲發(fā)生器的實現(xiàn)方式通常有兩種:
一種是基于二極管元件的噪聲源,通常用來做噪聲系數(shù)測試中所需的噪聲源。本方法產(chǎn)生的噪聲信號帶寬很寬(可達18GHz或50GHz),可計量超噪比ENR;缺點是噪聲帶寬和功率不可控,且噪聲功率較低,另外其匹配(駐波)較差。
另一種是基于矢量信號發(fā)生器,在基帶實現(xiàn)寬帶噪聲的帶寬和功率設(shè)定,調(diào)制到射頻(可達40GHz)發(fā)出。本文所使用的方法,是基于R&S矢量信號發(fā)生器實現(xiàn)本目標(biāo)的。根據(jù)所選矢量信號發(fā)生器,噪聲帶寬可以最高達到2GHz。
2、實現(xiàn)方法
2.1. 矢量信號發(fā)生器內(nèi)置噪聲選件AWGN
矢量信號發(fā)生器通常具有內(nèi)置附加高斯白噪聲功能,其輸出方式可以選擇信號疊加方式或單純噪聲輸出方式,設(shè)置方法簡單。
優(yōu)點是設(shè)置簡單快捷,噪聲功率準確,與設(shè)置值一致;缺點是產(chǎn)生的噪聲帶寬不準確,遠大于帶寬設(shè)置值。
2.2. 脈沖序列編輯軟件R&S SMW-K300
R&S SMW-K300是一個矢量信號模擬軟件,主要功能是模擬各種雷達信號以及非標(biāo)準自定義矢量調(diào)制信號,其中一項功能是自定義白噪聲。
能定義功率和帶寬的噪聲信號,功率偏差約1~2dB,帶寬是-6dB帶寬定義點。
如果用戶僅用到SMW-K300的噪聲模擬功能,成本較高。
2.3. 免費ARB信號編輯軟件R&S ARBtoolbox+
R&S ARBtoolbox+是一款適用于R&S矢量信號源的免費自定義ARB文件編輯軟件,功能之一是產(chǎn)生自定義白噪聲、粉紅噪聲和褐色噪聲。
能產(chǎn)生自定義功率和帶寬的噪聲信號;功率設(shè)置值準確,帶寬是-6dB帶寬定義點。
使用方便,但是帶寬受限,只有50MHz。
2.4. Matlab自定義噪聲信號
Matlab是信號分析的常用工具軟件,使用其噪聲(隨機信號)的函數(shù)以及濾波器函數(shù),非常簡單地產(chǎn)生自定義噪聲信號。R&S官網(wǎng)上下載matlab程序包(rohde-schwarz.com/applications/r-s-matlab-toolkit-for-signal-generators-application-note_56280-15774.html),通過調(diào)用程序包中的m文件函數(shù),將自定義噪聲信號轉(zhuǎn)換為*.wv文件,或直接上傳儀器,從而產(chǎn)生自定義信號。
本方法能夠按照用戶的意愿和需求,產(chǎn)生標(biāo)準的噪聲信號,靈活方便,而且,從帶寬和功率平坦度角度,本方法產(chǎn)生方式最優(yōu)。
只需要用戶有Matlab,無需精通Matlab編程。
3、實現(xiàn)步驟和表現(xiàn)
3.1. 矢量信號發(fā)生器內(nèi)置噪聲選件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)中,
調(diào)取函數(shù)文件rs_generate_wave.m及其它m文件:
編寫噪聲發(fā)生器函數(shù)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;
________________________________________
運行用戶程序:
[Sta]=NoiseGen(50e6,'n1',1,'TCPIP::192.168.0.10::INSTR');
%噪聲功率滿量程,由信號源輸出電平設(shè)置決定;
%50MHz帶寬,arb文件名為n1.wv
%IP地址192.168.0.10