how can I do a 3D plot for S-parameter based on S21, Frequency and Distance?

3 Ansichten (letzte 30 Tage)
Hello all,
I have 30 S21 measurments between two seperate anttennas. the disrance between two antenna is D. Now I wannt do a 3D plot for this expriment. Z axis equal to s21, x axis equals to distance and y axis equals to frequency. here is my code but it returns errors aboud dimension.
numfiles = 42;
filename = "D_"+(12:numfiles)+".s2p";
S = sparameters(filename(1));
D = [12:1:42];
freq = S.Frequencies;
numfreq = numel(freq);
s21_data = zeros(numfreq,numfiles);
% Read Touchstone files
for n = 1: (numfiles - 12);
S = sparameters(filename(n));
s21 = rfparam(S,2,1);
s21_data(:,n) = s21;
txt{n}= sprintf('D %i',n+12);
end
s21_db = 20*log10(abs(s21_data));
[D,freq]=meshgrid (D,freq);
mesh(D,freq,s21_db);
axis on;
grid on

Antworten (1)

Abhinaya Kennedy
Abhinaya Kennedy am 5 Jun. 2024
Hi Peyman,
"meshgrid" creates two-dimensional grids from one-dimensional inputs. However, your "s21_db" data has three dimensions (frequency, distance, and amplitude). Here's how you can fix your code for a 3D plot:
% Read Touchstone files
for n = 1: (numfiles - 12);
S = sparameters(filename(n));
s21 = rfparam(S,2,1);
s21_data(:,n) = s21;
txt{n}= sprintf('D %i',n+12);
end
s21_db = 20*log10(abs(s21_data));
% No need for meshgrid, use surf for 3D surface plot
surf(D, freq, s21_db);
axis on;
grid on;
xlabel('Distance (D)');
ylabel('Frequency (Hz)');
zlabel('S21 (dB)');
title('S21 vs. Distance and Frequency');
We don't need "meshgrid" as "surf" can handle 3D data directly. This code will create a 3D surface plot with distance (D) on the x-axis, frequency on the y-axis, and S21 in dB on the z-axis.
You can look into this link for more information on "surf": https://www.mathworks.com/help/matlab/ref/surf.html

Kategorien

Mehr zu Visualization and Data Export finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by