Clear Filters
Clear Filters

Simple model of antenna array receiver

37 views (last 30 days)
Piotr
Piotr on 3 Jan 2024
Commented: Piotr on 12 Jan 2024
Hello,
I am looking for some tutorials or guidance about making simulation of simple receiver built with antenna array. I would like to make few cases with different beamfoaming. Let's say I have 16 antennas put equally on square plane.
My idea is to place receiver array in 0,0,0 and 4 transivers somewhere above the receiver. I would like to control each of the antennas and send to them simply modulated signal.
For now I have figured some of the code. Where I should look now? My goal is to check different beamfoaming settings in order to determine which config is the best for finding all the TXs at once. As you can see I try to use there SNR as common variable.
Help and hints much appreciated.
Thanks :)
% Signal
freq = 183.6e6;
mod_freq = 1e3;
time = 1;
sampling = 10e6;
snr = 20;
timer = linspace(0, time, time * sampling);
mod_signal = sin(2 * pi * mod_freq * time);
signal_DABplus = sin(2 * pi * freq * time + mod_signal);
distance = 10000;
damping = 1 / (distance^2);
signal_after = signal_DABplus * damping;
noise = randn(size(signal_after));
noise = noise / sqrt(mean(abs(noise).^2));
power = mean(abs(signal_after).^2);
noise_p = power / (10^(snr/10));
noise = noise * sqrt(noise_p);
signal_noise = signal_after + noise;
tx = [
100, 100, 10000;
-100, -100, 10000;
100, -100, 10000;
-100, 100, 10000
];
ant_num = 16;
directions = zeros(ant_num, 3);
for i = 1:ant_num
direction = tx(mod(i - 1, size(tx, 1)) + 1, :) - [0, 0, 0];
direction = direction / norm(direction);
directions(i, :) = direction;
end
for i = 1:ant_num
signal = signal_noise
beamfoaming = directions(i, :);
receive(signal, beamfoaming, i);
end
for i = 1:ant_num
signal = signal_noise;
beamfoaming = directions(i, :);
received = signal;
signal_p = mean(abs(received).^2);
noise_p = mean(abs(noise).^2);
snr_ant(i) = 10 * log10(signal_p / noise_p);
end
function rx_signal(signal, beamfoaming, tail_nr)
%
end

Answers (1)

Shreshth
Shreshth on 8 Jan 2024
Hello Piotr,
From your question, I could understand that you are seeking guidance for creating a simple receiver with an antenna array using different beamforming techniques in MATLAB.
Going through the code snippet provided by you, it is understood that you have done the following steps correctly:
  • Defining the simulation parameters and generating the signal.
  • Simulation of signal propagation and adding noise
  • Creating antenna array and calculating steering directions
To further execute your task, you will need to implement functions for beamforming. In the code you have used ‘rx_signal’ function but instead it would be recommended to use the “Phased Array System Toolbox” to create the antenna array and perform beamforming. This includes defining the array geometry, calculating the beamforming weights, and steering the beam towards the transmitters.
To further help you with your simulation, here are a few examples and documentation provided by MathWorks.
This example shows how to model and visualize a variety of antenna array geometries with Phased Array System Toolbox™. https://www.mathworks.com/help/phased/ug/phased-array-gallery.html
Beamforming techniques
Thank you,
Shubham Shreshth.
  1 Comment
Piotr
Piotr on 12 Jan 2024
Hello Shubham,
Thank you for the answer.
I have went through tutorials you have linked and it will be much easier with the toolbox :).
Do you maybe have in mind tutorial covering the last stage of experiment so the simulation? So far I have parameters set and file with antenna array. From this point I assume that I need to make some signal path from transmitter to the array, run simulation and read receivers' parameters.
Should I use communication toolbox?

Sign in to comment.

Products


Release

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!