Filter löschen
Filter löschen

Plotting Transmission Loss with for loop

2 Ansichten (letzte 30 Tage)
Articat
Articat am 3 Apr. 2019
Kommentiert: Star Strider am 3 Apr. 2019
Hi,
So I am trying to plot the following script but all I am getting is an empty plot with an x-axis going from 2999 to 3000.1.. It should be a sinusoidal wave due to the sine squared at the end of the equation. At least I think so..
Any advice?
Thanks for the help.

Akzeptierte Antwort

Star Strider
Star Strider am 3 Apr. 2019
The ‘f’ variable will be the scalar last value at the end of the loop. What you likely intended was:
s1 = 0.05;
s2 = 0.15;
L = 0.18;
c = 343;
n = 3000;
fv = 1:n;
for f = 1:numel(fv)
TL(f) = 10*log10(1+.25*(((s2/s1)-(s1/s2))^2)*sin((2*pi*f*L)/c)*sin((2*pi*f*L)/c));
end
plot(fv,TL)
This will produce the plot you anticipated, with ‘fv’ and ‘TL’ now both being vectors. .
  2 Kommentare
Articat
Articat am 3 Apr. 2019
I see, thank-you!
So previsouly I had it only as TL being a vector? Or was the key here the "numel" function?
Star Strider
Star Strider am 3 Apr. 2019
My pleasure!
‘TL’ is a vector, however ‘f’ is a scalar in every loop iteration, and plotting a vector against a scalar plots one point only. The plot function plots lines between points, not points themselves, unless you use a marker, so the plot appeared blank.
The key was defining ‘fv’ as a vector, and then using ‘f’ as elements of the vector in the loop. The numel call returned the number of elements in ‘fv’ (similar functions are length and size), so ‘f’ as an index counter also worked as a variable here. A more rigorous approach would be:
for f = 1:numel(fv)
TL(f) = 10*log10(1+.25*(((s2/s1)-(s1/s2))^2)*sin((2*pi*fv(f)*L)/c)*sin((2*pi*fv(f)*L)/c));
end
that would allow ‘fv’ to be any vector of values, not only integers.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by