📄 tdbt.m
字号:
% Comments% Test 2 of a Chirp (linear FM) code.disp('Test 101i') clear all len = 1024; % Number of samples. maxFDev = 500; % Maximum frequency deviation [Hz]. fSamp = 2000; % Sampling frequency [Hz]. Ts = 1/fSamp; % Sampling time [s]. t = linspace(0, Ts*len, len); codeCalc = getmod('chirp',[maxFDev,fSamp,len]); realSig = real(codeCalc); figure,plot(t,realSig) title('Time signal') xlabel('Time [s]') %freqEst = 1/(2*pi) * diff(unwrap(angle(codeCalc))) * fSamp; % [Hz] freqEst = estlocalfreq(codeCalc, fSamp); figure, plot(t,[0;freqEst]) title('Frequency estimation') xlabel('Time [s]') ylabel('Frequency [Hz]') spect = fftshift(fft(realSig)); f = linspace(-fSamp/2,fSamp/2,len); figure,plot(f,(spect)) title('Frequency spectrum') xlabel('Frequency [Hz]')% Expected result :% The frequency of the time signal shall increase.% The estimation of frequency shall be a straight line with upward% direction an through origo (from 0 Hz to 500 Hz).% The frequency spectrum shall reside mainly within +- 500 Hz.% Real result :% [ ]disp('Test 101aa')% Expected result :% Real result :elseif (testnr==102)% *****************************************************************************% [ ] : Test 102% Sign: Datum:%% Test of exchange of calls to getm, getm2, getm3 and setm with direct% indexing in Matlab 5.%% *****************************************************************************% Comments% [ ]disp('Test 102a')% Comments% Comparision of setm and Matlab 5 direct indexing. clear A B A(:,:,1) = [1 2 3; 4 5 6]; A(:,:,2) = [7 8 9; 10 11 12]; B = A; A(1,':',2) = [20 21 22]; B = setm(B, [20 21 22], 1,':',2); %limit = 0.5*prod(size(A))*eps; if (~all(all(all((A == B),1),2),3)) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :% [ ]disp('Test 102b')% Comments% Comparision of setm and Matlab 5 direct indexing. % [3 2 2 4] clear A B A(:,:,1,4) = [1 2; 4 5; 7 8]; A(:,:,2,4) = [10 11; 13 14; 16 17]; B = A; A(2,':',':',4) = [20 21; 23 24]; B = setm(B, [20 21; 23 24], 2,':',':',4); if (~all(all(all(all((A == B),1),2),3),4)) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :if (0)% [ ]disp('Test 102c')% Comments% Comparision of setm and Matlab 5 direct indexing. if (~all(all(all(all((A == B),1),2),3),4)) error('DBT-Error: Difference to large.') else disp(' Test Ok.') end%if% Expected result :% No error message.% Real result :end%if (0)elseif (testnr==103)% *****************************************************************************% [ ] : Test 103% Sign: Datum:%% Test of function "sigsplitdim".%% *****************************************************************************% Comments% [ ]disp('Test 103a')% Comments% Test of function "sigsplitdim" clear s s2 s = RxRadarSigT; s.signals = ones([4 6 8 1 1]); s2 = sigsplitdim(s,1,2,4); size(s2.signals)% Expected result :% 2 6 8 2% No error message.% Real result :% [ ]disp('Test 103b')% Comments% Test of function "sigsplitdim" clear s s2 s = RxRadarSigT; s.signals = ones([4 6 8 1 1 1]); s2 = sigsplitdim(s,3,4,5); size(s2.signals)% Expected result :% 4 6 4 1 2% No error message.% Real result :% [ ]disp('Test 103c')% Comments% Test of function "sigsplitdim" clear s s2 s = RxRadarSigT; s.signals = ones([4 6 8 1 1 1]); s2 = sigsplitdim(s,2,2,6); size(s2.signals)% Expected result :% 4 2 8 1 1 3% No error message.% Real result :elseif (testnr==120)% *****************************************************************************% [ ] : Test 120% Sign: Datum:%% Test of wide band signal simulation.%% *****************************************************************************% Comments% [ ]% Comments% Test of wide band signal simulation. disp('Test 120a') clear all propSpeed = speedoflight; % [m/s]. carrierFreq = 3e9 % [Hz]. lambda = propSpeed / carrierFreq; % Wavelength [m]. distElem = 0.45*lambda; % Element separation. noChan = 12; % Number of digital antenna channels. antenna = defant('isotropULA',[noChan,distElem]); % Define the antenna. bandwidth = carrierFreq*0.9 % [Hz]. noTimes = 16; % Number of time samples. noTrials = 1; noSrc = 1; srcSignals = [ones(1,noTimes/2), 2*ones(1,(noTimes/2))]; srcSignals(1) = srcSignals(1) + j*eps; srcDoas = d2r([67]); % Target angles [radians]. The number of % targets is % given by the number of target angles. srcPowers = ones(noSrc,1); srcCorr = []; orthSig = []; %[sigOut, sourceSigTime, noiseSigTime] = simwideband(srcType, antenna, % carrierFreq, bandwidth, noTimes, noTrials, srcSignals, srcDoas, % srcPowers, srcCorr, orthSig, propSpeed) sig = simwideband('det',antenna,carrierFreq, bandwidth, noTimes, ... noTrials, srcSignals, srcDoas, srcPowers, {srcCorr}, orthSig, propSpeed); figure, sigplot2(sig,':',1,':',... {'pulAxis', sig.waveform.sampleTime*(sig.pulIx-1)/1e-12}) ylabel('Time [ps]') irot %printfm simwide1a.ps 10 8% Expected result :% Time delay from antenna element m to m+n is equal to% tau = (n*0.45/carrierFreq)*sin(srcDoas)% For srcDoas = 40 degress, tau = n*9.642e10-11 s. disp(['Expected delays = ' num2str(((1:(noChan-1))*0.45/carrierFreq)*sin(srcDoas)/1e-12) 'ps'])% Real result :% [ ]% Comments% Test of wide band signal simulation.disp('Test 120b')% Expected result :% Real result :% [ ]% Comments% Test of wide band signal simulation.disp('Test 120c')% Expected result :% Real result :if (0)% [ ]% Comments% Test of a Chirp (linear FM) code.disp('Test 120h') 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 :end%if (0)elseif (testnr==130)% *****************************************************************************% [ ] : Test 130% Sign: Datum:%% Test of range steering matrix calculation.%% *****************************************************************************% Comments% [ ]disp('Test 130a') lambda = 0.1; % [m] noRangeBins = 8; noPulses = 2; pModulation = [4 3 2].'; sampleTime = 1e-6; % [s] waveform = defwave(lambda, noRangeBins, noPulses, pModulation, sampleTime); %rangeBinLen = (speedoflight * sampleTime)/2; % = 149.8962 [m] rangeBinLen = getranbinlen(waveform,speedoflight); % = 149.8962 [m] % Max unambiguous range is 8 * 149.8962 = 1199.2 m. ranges = 400; % [m]. Should land up in range bin 3. A = ranstemat(waveform, ranges);% Expected result : B = [0 0 4 3 2 0 0 0].';% Real result : limit = 0.5*size(A,1)*size(A,2)*eps; difference = sum(sum(abs(A-B))); if (difference > limit) error('Difference to large.') else disp(' Test Ok.') end%if% [ ]disp('Test 130b')% Several ranges in the same call. First range bin. Last range bin. Exactly in middle of range bin, Exactly at range bin border. lambda = 0.1; % [m] noRangeBins = 8; noPulses = 2; pModulation = [4 3 2].'; sampleTime = 1e-6; % [s] waveform = defwave(lambda, noRangeBins, noPulses, pModulation, sampleTime); %rangeBinLen = (speedoflight * sampleTime)/2; % = 149.8962 [m] rangeBinLen = getranbinlen(waveform,speedoflight); % = 149.8962 [m] % Max unambiguous range is 8 * 149.8962 = 1199.2 m. ranges = [0, 74, 75.1, 150, 290, 323, 890, 1199, 1200, 1050, 1040, 1215]; % [m]. Start range bins are: 1 1 1 2 2 3 6 8 9 8 7 9. A = ranstemat(waveform, ranges);% Expected result : B = [4 3 2 0 0 0 0 0 ; 4 3 2 0 0 0 0 0 ; 4 3 2 0 0 0 0 0; 0 4 3 2 0 0 0 0;... 0 4 3 2 0 0 0 0 ; 0 0 4 3 2 0 0 0 ; ... 0 0 0 0 0 4 3 2 ; ... 3 2 0 0 0 0 0 4 ; 4 3 2 0 0 0 0 0 ; 3 2 0 0 0 0 0 4 ; 2 0 0 0 0 0 4 3;... 4 3 2 0 0 0 0 0 ].';% Real result : limit = 0.5*size(A,1)*size(A,2)*eps; difference = sum(sum(abs(A-A))); if (difference > limit) error('Difference to large.') else disp(' Test Ok.') end%ifelseif (testnr==131)% *****************************************************************************% [ ] : Test 131% Sign: Datum:%% Test of space-range steering matrix calculation.%% *****************************************************************************% Comments% [ ]disp('Test 131a')% Space parameters lambda = 0.1; % [m] noElem = 2; distElem = 0.5*lambda; antenna = defant('isotropULA',[noElem, distElem]); doas = d2r(55);% Range parameters noRangeBins = 6; noPulses = 2; pModulation = [4 3 2].'; sampleTime = 1e-6; % [s] waveform = defwave(lambda, noRangeBins, noPulses, pModulation, sampleTime); %rangeBinLen = (speedoflight * sampleTime)/2; % = 149.8962 [m] rangeBinLen = getranbinlen(waveform,speedoflight); % = 149.8962 [m] % Max unambiguous range is 8 * 149.8962 = 1199.2 m. ranges = 400; % [m]. Should land up in range bin 3.% Steering matrix calculation A = sparanstemat({antenna, waveform}, {doas,ranges}, {lambda}); A.'% Expected result : AExp = [1; -0.84289752545115 + 0.53807412276408i]; B = [[0 0 ], [0 0 ], 4* AExp.', 3* AExp.', 2* AExp.', [0 0 ]].'; B.'% Real result : limit = 0.5*size(A,1)*size(A,2)*eps difference = sum(sum(abs(A-B))) if (difference > limit) %error('Difference to large.') dbtwarning('Difference to large.') else disp(' Test Ok.') end%if% [ ]disp('Test 131b')% Space parameters lambda = 0.1; % [m] noElem = 2; distElem = 0.5*lambda; antenna = defant('isotropULA',[noElem, distElem]); doas = d2r([55, -127, 193]);% Range parameters noRangeBins = 6; noPulses = 2; pModulation = [4 3 2].'; sampleTime = 1e-6; % [s] waveform = defwave(lambda, noRangeBins, noPulses, pModulation, sampleTime); %rangeBinLen = (speedoflight * sampleTime)/2; % = 149.8962 [m] rangeBinLen = getranbinlen(waveform,speedoflight); % = 149.8962 [m] % Max unambiguous range is 8 * 149.8962 = 1199.2 m. ranges = [400, 74]; % [m]. Should land up in range bin 1 and 3.% Steering matrix calculation A = sparanstemat({antenna, waveform}, {doas,ranges}, {lambda}); A = (abs(A) > 0);% Expected result : % A (6*2, 2*3) = (12,6) matrix with block of size (2,3) and elements 0 and 1. B =[ 0 0 0 1 1 1 ; 0 0 0 1 1 1 ; 0 0 0 1 1 1 ; 0 0 0 1 1 1 ; 1 1 1 1 1 1 ; 1 1 1 1 1 1 ; 1 1 1 0 0 0 ; 1 1 1 0 0 0 ; 1 1 1 0 0 0 ; 1 1 1 0 0 0 ; 0 0 0 0 0 0 ; 0 0 0 0 0 0 ]; % Real result : limit = 0.5*size(A,1)*size(A,2)*eps; difference = sum(sum(abs(A-B))); if (difference > limit) error('Difference to large.') else disp(' Test Ok.') end%ifelseif (testnr==999)% *****************************************************************************% [ ] : Test 999% Sign: Datum:%% Template for tests.%% *****************************************************************************% Comments% [ ]disp('Test 999a')% Expected result :% Real result :% [ ]disp('Test 999b')% Expected result :% Real result :else disp('Incorrect testnumber.');end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -