📄 tdbt.m
字号:
sig3 = sigcomp2(sig,dbcfile,'Ccmp',[],'nocomp',0);R3 = ecorrm(sig3);setcal1('nocomp',[],'nearfldcomp')s3=sdoaspc('music',R3,doas,noPeaks);splot2(s3,' c')r2d(doapeak(s3,'amir',noPeaks))sig4 = sigcomp2(sig,dbcfile,'nocomp',[],'nearfldcomp',0);R4 = ecorrm(sig4);setcal1('wctab',[],'nocomp')s4=sdoaspc('music',R4,doas,noPeaks);splot2(s4,' r')r2d(doapeak(s4,'amir',noPeaks))legend('sig:nocomp,nocomp.', 'sig:Ccmp,nearfld.','sig:Ccmp,nocomp.','sig:nocomp,nearfld.')%save tdbt15 s1 s2 s3 s4difference = abs((sum(ls1.specSmpl-s1.specSmpl) + ... sum(ls2.specSmpl-s2.specSmpl) + ... sum(ls3.specSmpl-s3.specSmpl) + ... sum(ls4.specSmpl-s4.specSmpl) ));%limit = eps; % Ok on magic and curare.limit = 9.6e-9; % Needed for hawk.if (difference > limit) error('DBT-Error: Difference to large.')else disp(' Test OK.')end%if% Expected result :% The four graphs shall "look good" with three peaks each at angles% approx. -4, 0 and 1.5 degrees. The numerical values returned for% the four cases should also be -4, 0 and 1.5 degrees.% No error messages.% Real result :elseif (testnr==51)% *****************************************************************************% [ ] : Test 51% Sign: Datum:%% Test of the AIMT experimental antenna with different choices of% calibration compensation (wctab, Ccmp or wcmedel) on the STEERING VECTOR.% One spectral DOA estimation method is used.% The resulting DOA-spectra is checked to be the same as before.% They are not checked to be right. This test is useful to run after% changes in the code have been made.%% *****************************************************************************% Comments% [ ]disp('Test 51a')% Comments% The most of the following code is currently (R1-6-3) the same as in% dbtex9.m. MMu = 3; % Number of targets that MUSIC believes in. % The true number is 3. ant = defant('expAnt'); sig = expsig1(ant,'dbtex.dbs',1); load tdbt51 ls1=s1; ls2=s2; ls3=s3; R = ecorrm(sig); setcal1('wctab','dbtex.dbc') s1 = sdoaspc('music',R,d2r(-30:0.25:30),MMu); setcal1('Ccmp') s2 = sdoaspc('music',R,d2r(-30:0.25:30),MMu); setcal1('wcmedel') s3 = sdoaspc('music',R,d2r(-30:0.25:30),MMu); hold on splot2(s1,' y') splot2(s2, ' m') splot2(s3,' c') legend('wctab','Ccmp','wcmedel') difference = abs( sum(ls1.specSmpl-s1.specSmpl) + ... sum(ls2.specSmpl-s2.specSmpl) + ... sum(ls3.specSmpl-s3.specSmpl) ) %limit = eps; % Ok on magic and curare. limit = 7.0e-9; % Needed for hawk. %save tdbt51 s1 s2 s3 if ( difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :elseif (testnr==52)% *****************************************************************************% [ ] : Test 52% Sign: Datum:%% Test of the AIMT experimental antenna with different choices of% calibration compensation on the SIGNALS.% One spectral DOA estimation method is used.% The resulting DOA-spectra is checked to be the same as before.% They are not checked to be right. This test is useful to run after% changes in the code have been made.%% *****************************************************************************% Not implemented yet.elseif (testnr==60)% *****************************************************************************% [ ] : Test 60% Sign: Datum:%% Test of different antenna types and steering matrix calculations.%% The results are checked to be the same as before.% They are not checked to be right. This test is useful to run after% changes in the code have been made.%% *****************************************************************************% Comments% [ ]disp('Test 60a')% Comments% 'isotropULA' lambda = 1.37; distElem = lambda/2; noElem = 37; beamSpaceTrans = ones(noElem,1); doas = d2r([-180 -156 -90 -67.45 -27.234 -1 0 1 pi 43.43 90 134 180]);% Isotrop ULA using recursive definition: elem = defant('isotropElem'); ant1 = defant('ULA', [noElem, distElem], elem, beamSpaceTrans);% Isotrop ULA using special implementation: ant2 = defant('isotropULA', [noElem, distElem]); a1 = spastemat(ant1, doas, lambda); a2 = spastemat(ant2, doas, lambda); %max(max(abs(a1-a2)));% Expected result : disp(['Expected value < ']) disp(eps)% Real result : disp(['Real value = ' ]) disp(max(max(abs(a1-a2))))% [ ]disp('Test 60b')% Comments% 'isotropElem' clear all ant1 = defant('isotropElem'); doas = d2r([-180, -179, -135, -127, -90, -39, 0, ... 21, 22, 45, 78, 90, 167 ,180]); lambda = 4.67; focusDist = [];if (0) % 1 = generate test data. 0 = Use test data. A1b = spastemat(ant1,doas,lambda,focusDist); save tdbt60 A1b -APPENDelse load tdbt60 A1 = A1b; A2 = spastemat(ant1,doas,lambda,focusDist); extraRelTol = 2; % Allow for some extra tolerance because of many % floating point operations and use of complex numbers (2). limit = extraRelTol * 0.5*size(A1,1)*size(A1,2)*eps; difference = sum(sum(abs(A1-A2))); if (difference > limit) error('Difference to large.') %disp('Difference to large.') else disp(' Test Ok.') end%ifend%if(0)% Expected result :% No error message.% Real result :% [ ]disp('Test 60c')% Comments% 'pattFuncElem' clear all ant1 = defant('pattFuncElem', 'cos(x(1,:)).^2'); doas = d2r([-180, -179, -135, -127, -90, -39, 0, ... 21, 22, 45, 78, 90, 167 ,180]); lambda = 4.67; focusDist = [];if (0) % 1 = generate test data. 0 = Use test data. A1c = spastemat(ant1,doas,lambda,focusDist); save tdbt60 A1c -APPENDelse load tdbt60 A1 = A1c; A2 = spastemat(ant1,doas,lambda,focusDist); extraRelTol = 2; % Allow for some extra tolerance because of many % floating point operations and use of complex numbers (2). limit = extraRelTol * 0.5*size(A1,1)*size(A1,2)*eps; difference = sum(sum(abs(A1-A2))); if (difference > limit) error('Difference to large.') %disp('Difference to large.') else disp(' Test Ok.') end%ifend%if(0)% Expected result :% No error message.% Real result :% [ ]disp('Test 60d')% Comments% 'aimtEx'% Expected result :% Real result :% [ ]disp('Test 60e')% Comments% 'expAnt'% Expected result :% Real result :if(0)% [ ]disp('Test 60ff: Comparison between iso2DArr and LA steering vector')% Comments% Test of 'iso2DArr'% Implementation of the test is not finnished. lambda = 1.37; distElem = lambda/2; noElem = 37; beamSpaceTrans = ones(noElem,1); doas = d2r([-180 -156 -90 -67.45 -27.234 -1 0 1 pi 43.43 90 134 180]); elementPositions = [ ; zeros(1,noElem)];% Antenna type 'LA': elem = defant('isotropElem'); LAant = defant('LA',elementPositions(1,:).',[],elem);% Antenna type 'iso2DArr': ant2 = defant('');% Expected result :% Real result :% Expected result :% Real result :% ...end%if(0)elseif (testnr==101)% *****************************************************************************% [ ] : Test 101% Sign: Datum:%% Test of pulse code modulations.%% *****************************************************************************% Comments% [ ]% Comments% Test of Frank Codes.disp('Test 101a') clear all code16Calc = getmod('frank',4); code16Expect = [1, 1, 1, 1, 1, i, -1, -i, 1, -1, 1, -1, 1 -i, -1, i].'; extraRelTol = 2; % Allow for some extra tolerance because of many % floating point operations. limit = extraRelTol * 0.5 * size(code16Calc,1)*size(code16Expect,2)*eps; difference = sum(sum(abs(code16Calc-code16Expect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]% Comments% Test of Frank Codes.disp('Test 101b') clear all codeCalc = getmod('frank',1); codeExpect = 1; extraRelTol = 2; % Allow for some extra tolerance because of many % floating point operations. limit = extraRelTol * 0.5*size(codeCalc,1)*size(codeExpect,2)*eps; difference = sum(sum(abs(codeCalc-codeExpect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]% Comments% Test of Barker Codes.disp('Test 101c') clear all codeCalc = getmod('barker','4b'); codeExpect = [1, 1, 1, -1].'; limit = 0.5*size(codeCalc,1)*size(codeExpect,2)*eps; difference = sum(sum(abs(codeCalc-codeExpect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]% Comments% Test of Barker Codes.disp('Test 101d') clear all codeCalc = getmod('barker','13'); codeExpect = [1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1].'; limit = 0.5*size(codeCalc,1)*size(codeExpect,2)*eps; difference = sum(sum(abs(codeCalc-codeExpect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]% Comments% Test of a phaseshift of pi radians of the code.disp('Test 101e') clear all codeCalc = getmod('barker','11',1); codeExpect = -1*[1,1,1,-1,-1,-1,1,-1,-1,1,-1].'; limit = 0.5*size(codeCalc,1)*size(codeExpect,2)*eps; difference = sum(sum(abs(codeCalc-codeExpect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]% Comments% Test of a fliparound (permutation) of the code.disp('Test 101f') clear all codeOrder = 8; % The length of the Frank code is codeOrder^2. codeCalc = getmod('frank',8,[],1); codeExpect = exp(i*2*pi*(1/codeOrder)*([1:codeOrder]-1).'*([1:codeOrder]-1)); % A Frank code. codeExpect = codeExpect(:); codeExpect = flipud(codeExpect); limit = 0.5*size(codeCalc,1)*size(codeExpect,2)*eps; difference = sum(sum(abs(codeCalc-codeExpect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]% Comments% Test of rectangular code.disp('Test 101g') clear all codeCalc = getmod('rect',7,1,1); codeExpect = -1*[1 1 1 1 1 1 1].'; limit = 0.5*size(codeCalc,1)*size(codeExpect,2)*eps; difference = sum(sum(abs(codeCalc-codeExpect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]% Comments% Test of a Chirp (linear FM) code.disp('Test 101h') clear all len = 29; maxFDev = 1e6; fSamp = 3.225e6; codeCalc = getmod('chirp',[maxFDev,fSamp,len]); param = maxFDev * fSamp / len; codeExpect = exp(i*pi*param*([1:len]*(1/fSamp)).^2).'; extraRelTol = 7 *2; % Allow for some extra tolerance because of many % floating point operations (7) and use of complex numbers (2). limit = extraRelTol* 0.5*size(codeCalc,1)*size(codeExpect,2)*eps; difference = sum(sum(abs(codeCalc-codeExpect))); if (difference > limit) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -