MATLAB Answers


what does this error error mean? "Array formation and parentheses-style indexing with objects of class 'phased.Ph​aseShiftBe​amformer' is not allowed. Use objects of class 'phased.Ph​aseShiftBe​amformer' only as scalars or use a cell array."

Asked by Dhananjay Singh on 6 Mar 2019
Latest activity Commented on by Dhananjay Singh on 6 Mar 2019
I am making a program to acheive delay and sum beamforming,
I looked for examples of this online and found one relatable. The code is given below. When i run the program i get this error
"Array formation and parentheses-style indexing with objects of class 'phased.PhaseShiftBeamformer' is not allowed. Use
objects of class 'phased.PhaseShiftBeamformer' only as scalars or use a cell array."
I am using 2015 version of Matlab. Can someone please help.
t = 0:0.001:0.3; % Time, sampling frequency is 1kHz
s = zeros(size(t));
s = s(:); % Signal in column vector
s(201:205) = s(201:205) + 1; % Define the pulse
title('Pulse');xlabel('Time (s)');ylabel('Amplitude (V)');
carrierFreq = 100e6;
wavelength = physconst('LightSpeed')/carrierFreq;
% here, the no. of receiving antennas are 10
ula = phased.ULA('NumElements',10,'ElementSpacing',wavelength/2);
ula.Element.FrequencyRange = [90e5 110e6];
%assuming signal arrives at the array at an angle of 45 in azimuth and 0 in elevation
inputAngle = [45; 90];
x = collectPlaneWave(ula,s,inputAngle,carrierFreq);
% if thermal noise is to be taken into account
% Create and reset a local random number generator so the result is the
% same every time.
rs = RandStream.create('mt19937ar','Seed',2008);
noisePwr = .5; % noise power
noise = sqrt(noisePwr/2)*(randn(rs,size(x))+1i*randn(rs,size(x)));
% noise = 0;
rxSignal = x + noise;
plot(t,abs(rxSignal(:,1)));axis tight;
title('Pulse at Antenna 1');xlabel('Time (s)');ylabel('Magnitude (V)');
plot(t,abs(rxSignal(:,2)));axis tight;
title('Pulse at Antenna 2');xlabel('Time (s)');ylabel('Magnitude (V)');
psbeamformer = phased.PhaseShiftBeamformer('SensorArray',ula,'OperatingFrequency',carrierFreq,'Direction',inputAngle,'WeightsOutputPort', true);
[yCbf,w] = psbeamformer(rxSignal);
% Plot the output
plot(t,abs(yCbf)); axis tight;
title('Output of Phase Shift Beamformer');
xlabel('Time (s)');ylabel('Magnitude (V)');


Sign in to comment.

1 Answer

Answer by Honglei Chen
on 6 Mar 2019

Let's say you have two objects
bf1 = phased.PhaseShiftBeamformer;
bf2 = phased.PhaseShiftBeamformer;
The message indicates that you cannot put these two objects in an array, like
[bf1, bf2] % this will error out
Instead, if you want to put them into an array, you have to use a cell array
{bf1 bf2} % this will be ok


Hello Honglei Chen,
Thanks for responding.
I am new to Matlab, and from your respond, the most I understood was to rewrite my code as
psbeamformer = phased.PhaseShiftBeamformer('SensorArray',ula,'OperatingFrequency',carrierFreq,'Direction',inputAngle,'WeightsOutputPort', true);
{yCbf w} = psbeamformer{rxSignal};
instead of --------------------------------------------------------------------------------------------------------------------
psbeamformer = phased.PhaseShiftBeamformer('SensorArray',ula,'OperatingFrequency',carrierFreq,'Direction',inputAngle,'WeightsOutputPort', true);
[yCbf,w] = psbeamformer(rxSignal);
but doing this i get parse error in matlab. Can you please help me further with this? Am I doing it right and if not please do correct me.
This may be a different issue, could you try to replace
[yCbf,w] = psbeamformer(rxSignal);
[yCbf,w] = step(psbeamformer,rxSignal);
and see if this resolves the issue? The syntax you used is probably not supported back in R2015.

Sign in to comment.