1、目標
在通信、雷達和計量等領域,在仿真、測試和計量過程中,常常需要使用信號源產生高斯白噪聲信號,而且,重要的是,準確定義的噪聲功率和帶寬。
本文目的是產生用戶自定義功率和帶寬的高斯白噪聲,方法是利用矢量信號發(fā)生器,實現噪聲發(fā)生器的功能。
射頻噪聲發(fā)生器的實現方式通常有兩種:
一種是基于二極管元件的噪聲源,通常用來做噪聲系數測試中所需的噪聲源。本方法產生的噪聲信號帶寬很寬(可達18GHz或50GHz),可計量超噪比ENR;缺點是噪聲帶寬和功率不可控,且噪聲功率較低,另外其匹配(駐波)較差。
另一種是基于矢量信號發(fā)生器,在基帶實現寬帶噪聲的帶寬和功率設定,調制到射頻(可達40GHz)發(fā)出。本文所使用的方法,是基于R&S矢量信號發(fā)生器實現本目標的。根據所選矢量信號發(fā)生器,噪聲帶寬可以最高達到2GHz。
2、實現方法
2.1. 矢量信號發(fā)生器內置噪聲選件AWGN
矢量信號發(fā)生器通常具有內置附加高斯白噪聲功能,其輸出方式可以選擇信號疊加方式或單純噪聲輸出方式,設置方法簡單。
優(yōu)點是設置簡單快捷,噪聲功率準確,與設置值一致;缺點是產生的噪聲帶寬不準確,遠大于帶寬設置值。
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文件,或直接上傳儀器,從而產生自定義信號。
本方法能夠按照用戶的意愿和需求,產生標準的噪聲信號,靈活方便,而且,從帶寬和功率平坦度角度,本方法產生方式最優(yōu)。
只需要用戶有Matlab,無需精通Matlab編程。
3、實現步驟和表現
3.1. 矢量信號發(fā)生器內置噪聲選件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文件:
編寫噪聲發(fā)生器函數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');
%噪聲功率滿量程,由信號源輸出電平設置決定;
%50MHz帶寬,arb文件名為n1.wv
%IP地址192.168.0.10