The GSC beamformer MATLAB model we used for the design includes the following features:
- A ULA array of four sensor elements
- A narrowband input signal of interest, impinging at an angle of 0°
- A narrowband interfering signal impinging at an angle of 10°, with the same amplitude as the signal of interest
- Uncorrelated white noise to model receiver noise at a level of -20 dB relative to the signal of interest
The GSC MATLAB model consists of three parts. A top-level script generates signals and displays results to analyze the performance the beamformer. The script invokes the QRD-RLS algorithm function in a streaming fashion to perform interference cancellation. Figure 4 shows an excerpt of this script.
... % combine signal, interference and noise s = s_p + s_i + DetNoise; Wc = ones(NSensors,1); d = s*Wc; % broadside array output % blocking matrix B = [eye(NSensors-1); zeros(1,NSensors-1)] - - [zeros(1,NSensors-1); eye(NSensors-1)]; s_n = s * B; % interferer and noise only % streaming loop for recursive LS computation for n = 1:NUM_ITER [e_rls(n)] = qrd_rls_spatial(s_n(n,:),d(n)); end ... |
The second part of the model is a synthesizable QRD-RLS algorithm function, qrd_rls_spatial(), which performs optimum cancellation of the interferer signal. This function is shown in Figure 5.
function [e] = qrd_rls_spatial(xa,d) % QRD-RLS for adaptive spatial filtering M = 3; persistent R p if isempty(R) R = zeros(1,M*M); R(1:M:end) = 0.01; p = zeros(1,M); end Ci = 1.0; lambda = sqrt(0.99); % update R matrix and p vector for row = 1:M xvec = lambda*[R(1:M) p(1) Ci]; yvec = [xa d 0]; xvec_rot,yvec_rot] = givens_rotation(xvec,yvec); R = [R(M+1:end) xvec_rot(1:M)]; xa = [yvec_rot(2:M) 0]; p = [p(2:end) xvec_rot(M+1)]; d = yvec_rot(M+1); Ci = xvec_rot(end); end e = Ci*d; % recursive error estimate |
The last part of the GSC model is the synthesizable function that rotates arrays of values to perform orthogonal Givens rotations (givens_rotation). This rotation function can be automatically generated by the AccelDSP Synthesis tool. This function is shown in Figure 6.
function [v, w] = givens_rotation( x, y ) % Givens rotation r_sqr = x(1)^2 + y(1)^2; r_inv = invsqrt_001(r_sqr); sin_phi = y(1)*r_inv; cos_phi = x(1)*r_inv; v = x*cos_phi + y*sin_phi; w = y*cos_phi - x*sin_phi; |
The analysis and visualization of the performance of the GSC model is shown with plots in Figure 7. The signal of interest is shown on the top plot.
(Click to enlarge)
7. GSC time-domain signals
The middle plot shows the signal from the data-independent portion of the GSC. This signal clearly shows the distortion caused by the interferer signal impinging on the sensor array.
The bottom plot shows the output of the GSC after effective cancellation of the interferer done by the QRD-RLS algorithm function.
Figure 8 shows beampatterns of the GSC. The top plot shows the beampattern of the data-independent portion of the GSC. This shows that the interferer signal impinging at 10° suffers an attenuation of only 2 dB approximately relative to that of the desired signal at 0°; this small attenuation is what causes the distortion in the received signal from the broadside.
(Click to enlarge)
8. GSC beampatterns
The middle plot shows the overall GSC beampattern. The improvement in the cancellation of the interfering signal can be seen with the larger attenuation at 10°. This is what accounts for the cancellation of the interferer signal obtained at the output of the GSC.
The bottom plot is a zoomed view of the overall GSC beampattern to highlight the attenuation achieved around 10°.