Fundamentals of Communication Systems Using the Wolfram Language

Dr. Victor S. Frost
Dan F. Servey Distinguished Professor
Electrical Engineering and Computer Science
University of Kansas

(RowDefault[, (Spacer1), , (Spacer1), ])  #WolframTechConf

ABSTRACT

An Open Educational Resources ebook written in Mathematica is described. The goal was to bring the material alive through the use of student driven interactive graphics, dynamic performance metric calculations and in-line questions.  In-line questions provide the students with rapid feedback regarding their understanding of the material. The ebook contains 348 figures of which 104 are interactive graphics. A unique pedagogical approach is used to teaching the fundamentals of communication systems. The material opens with describing the transformation of bits into digital baseband waveforms. Double-sideband suppressed carrier modulation and quadrature modulation then provide the foundation for the discussions of Binary Phase Shift Keying, Quadrature Phase Shift Keying, M-ary Quadrature Amplitude Modulation, M-ary Phase Shift Keying, and the basic theory of Orthogonal Frequency Division Multiplexing. Traditional analog modulation systems are also discussed. Systems trade-offs, including link budgets, are emphasized. Interactive graphics allow the students to engage with and visualize communication systems concepts as well as rapidly examine system tradeoffs and design alternatives. This ebook is provided to the students in the Computable Document Format. The instructor version of the ebook is a Mathematica notebook and is formatted to allow instructors to lecture directly from the notebook using Mathematica’s “Classic Slide Show” pallette. Separate notebooks containing solutions for the end-of-chapter questions are available giving instructors the ability to create new problems and associated solutions.  The ebook was the required text in Introduction to Communication Systems class at the University of Kansas in the Spring of 2021.

Outline

Motivation

Philosophy

Issues in teaching an introductory course on communication system

Solution

Benefits for Instructors

Organization of the ebook

Examples of Interactivity

Examples of in-line questions

Conclusions

Motivation

The goal  is to bring the fundamentals of communication systems alive through the use of interactive graphics, dynamic performance metric calculations, and in-line interactive questions.

Another purpose  is to, as soon as possible,  introduce students  to communications systems concepts for devices they own and use every day.

Philosophy

Keep it simple

Ease of access; entire ebook in one file (recent comparable example, Fourier Transforms Using Mathematica, by Joseph W. Goodman, 2020)

Create Open Educational Resources (OER) material, e.g., see Open Textbook Library https://open.umn.edu/opentextbooks/. OER provides:

Free access to openly licensed information

Supports teaching & research

Student version of the ebook only requires Wolfram Player

Issues in teaching an introductory course on communication system

Relevance to current technology

Mathematical nature of communication theory

Time & Frequency analysis of signals and systems

Complexity of system tradeoffs, e.g.,  bandwidth, modulation, receiver complexity, transmitter power, antenna size, carrier frequency, propagation environment, and distance.

Apply the understanding fundamental concepts w/o getting lost in the mathematics

Solution

Reorganize the material

Show time/frequency properties of signals/systems  using interactive graphics

Show system trade-offs with dynamic graphics

Show link budget tradeoffs using interactive tables and graphics

Include in-line questions providing rapid feedback

ToC

1. 	Introduction to Communication Systems  
2.	Signals and Systems Review
3.	Baseband Data Transmission: Communication systems transport information represented as bits.  The transformation of bits into baseband signals is discussed, including the concepts of M-ary signals and intersymbol interference (ISI).  
4.	Time-Division Multiplexing
5.	Double Sideband-Suppressed Carrier Modulation: 
6.	Quadrature Multiplexing and Modulation: With only knowledge of DSB-SC, quadrature multiplexing and quadrature modulation techniques are presented, including binary phase shift keying (BPSK), quadrature phase shift keying (QPSK) and quadrature amplitude modulation (QAM).
7.	Frequency Division Multiplexing and Orthogonal Frequency Division Multiplexing
8.	Double sideband-large carrier (DSB-LC)- Commercial AM
9.	Single sideband (SSB) and vestigial sideband (VSB)
10.	Frequency and Phase Modulation (FM/PM)
11.	Superheterodyne Receiver
12.	Communications Channels, Noise and Link Budgets: Communication systems must deal with “noisy” signals. The characterization of noise and overcoming noise by using additional transmitter power, low noise devices, and/or larger antennas, is addressed via the definition of noise figure, noise temperatures, and antenna gain. The associated system tradeoffs are exposed using link budgets.   
13.	Performance of Analog Communications Systems in Noise: The impact of noise on analog communication techniques, DSB-SC, DSB-LC, SSB, and FM is presented. The post detection signal-to-noise (S/N) is derived. 
14.	Performance of Digital Communications Systems in Noise
15.	Multimegabit/sec Terrestrial Wireless Communication Systems: Applying OFDM to achieve high speed data transfer over terrestrial channels using the 	real-life examples of LTE/5G and Wi-Fi is discussed.
16. 	Introduction to Error Detection and Correction Techniques

Appendix- net*TIMS FreeWire Laboratory Experiments:   In the spring of 2021 my class had students attending the lectures and the associated hardware laboratory in-person as well as some individuals who could only attend both remotely. Remote access to laboratory experiments using real hardware was enabled by using the Emona net*TIMS FreeWire  system see  https://www.emona-tims.com/emona-product/nettims-freewire/.  Communication systems experiments are included in an appendix that can performed remotely using the Emona net*TIMS FreeWire system.

Benefits for Instructors

Ability to lecture directly from the instructor notebook; formatted for use with “Classic Slide Show ” Palette

Engage students with relevant system trade-off studies in real-time, e.g., Link Budget with System Parameters Modeling the Perseverance Mars Rover Communications System

Facilitate the creation of new homework problems; end-of-chapter solutions provided in notebooks

Organization of the ebook

Title: Introduction to Communication Systems: An Interactive Approach Using the Wolfram Language

Author: Victor S. Frost

Publisher: University of Kansas Libraries

ISBN: 978-1-936153-25-1

Year: 2021
Link: http://hdl.handle.net/1808/31779

Path loss, delay, distortion and noise

pulseshape[t_,B_]:=2.0*π*B*((((-1.0+(E^(-2.0 B π (-1.0+t)))) UnitStep[-1.0+t])/(2.0* B* π))-(((-1.0+(E^(-2.0* B π t))) UnitStep[t])/(2.0*B π)))
Manipulate[ListPlot[ {a*Table[pulseshape[((k*0.001-Delay)/0.01),B], {k,1,100}]+RandomVariate[NormalDistribution[0,(Sqrt[var])], 100], Table[pulseshape[((k*0.001-0.0015)/0.01),6],{k,1,100}]}, Joined->True, PlotLabel->"Received Signal", PlotRange->{{0,100},{-1,2}}, PlotLegends->{"Channel Output","Channel Input"},GridLines->Automatic,AxesLabel->{"Time","(Subscript[x, Recived])(t)"}], {{a,1,"Loss"}, .1, 1,.1, Appearance->"Labeled"},{{var,.0001,"Noise Variance"},.000001, .2,.005, Appearance->"Labeled"},{{B,1,"Channel Bandwidth"},.1, 3,.1, Appearance->"Labeled"},{{Delay,0.005,"Delay" },0.000, .1,.01,Appearance->"Labeled"}, SaveDefinitions->True]

Time duration/Bandwidth

Manipulate[GraphicsRow[{Plot[ Exp[((-π*(t^2))/(s^2))], {t,-6,6 }, PlotRange->{{-6,6},{0,1}}, PlotLabel->"Time Domain Pulse\nRMS Pulse Width="<>ToString[(Sqrt[((s^2)/(4*π))])]<>"",AxesLabel->{"TIME",""}], Plot[s*Exp[((-(s^2)(ω^2))/(4*π))], {ω, -6,6}, PlotRange->{{-6,6},{0,6}},PlotLabel->"Frequency Domain Spectrum\nRMS Bandwidth="<>ToString[(Sqrt[(π/(s^2))])]<>"", AxesLabel->{"FREQUENCY",""}]}],{{s, .6,"s" }, .5,6., 0.05,  Appearance->"Labeled"}]

Sampling

S[f_, α_]:=(Sqrt[((1/((α^2)+(((2.*π*f))^2))))]);
sampspec[f_,α_,fs_]:=(∑_(k=-3)^3)S[f-k*fs, α];
Manipulate[Plot[{sampspec[f,1,fs],S[f, 1]},{f,-5,5}, 
PlotRange->{{-5,5},{0,1.6}}, PlotLabel->"Amplitude Spectrum of y(t) and (Subscript[Y, s])(f)\n y(t)=u(t)(e^(-t)) with α=1",
AxesLabel->{"frequency","|Ys(f)|"}, GridLines->{Range[-5,5,.5],Range[0,1.25,.2]}, PlotLegends->{"Sampled\nspectrum","Original\nspectrum"}],  {{fs,4., "(Subscript[f, s])(samples/sec)"}, 1,25, 
Appearance->"Labeled"},SaveDefinitions->True]

Raise Cosine Pulse in Time & Frequency

Manipulate[GraphicsRow[{Plot[((Cos[2. a 1. π t] Sin[2. 1. π t])/(2.*1 π t (1.-16. (a^2) (1^2) (t^2)))),{t,-2,2}, PlotRange->{{-2,2},{-.3,1}},PlotLabel->"Raised Cosine Pulse\nRequired Bandwidth="<>ToString[1*(1+a)]"", AxesLabel->{"time","p(t)"},AspectRatio->Full], Plot[Prc[f,1,a], {f,-2,2},PlotLabel->"Spectrum of Raised Cosine Pulse\nRequired Bandwidth="<>ToString[1*(1+a)]"",AxesLabel->{"f/(Subscript[B, 0])","P(f)"},ExclusionsStyle->Automatic,AspectRatio->Full]}],{{a,.5, "Roll-off=α"},0,1, 0.05,Appearance->"Labeled"}, SaveDefinitions->True]

Intersymbol Interference (ISI)

samples={{0,-3.},{(1./6.),3.},{(2./6.),-3.}};
pcos[t_,B_,α_]:=((Cos[2. π t α B] Sin[2. π t B])/(2. π t B (1.-16. (t^2) (α^2) (B^2))));
Manipulate[Show[{Plot[{samples[[1,2]]*pcos[t,B,a],samples[[2,2]]*pcos[(t-(1/6)),B,a],samples[[3,2]]*pcos[(t-(2/6)),B,a],samples[[1,2]]*pcos[t,B,a]+samples[[2,2]]*pcos[(t-(1/6)),B,a]+samples[[3,2]]*pcos[(t-(2/6)),B,a]},{t,-.5,3},PlotRange->{{-.5,1.},{-4.1,4.1}},AxesLabel->{"Time (ms)"},PlotLegends->Placed[{Style["Pulse 0",18],Style["Pulse 1",18],Style["Pulse 2",18],Style["Receive Filter Output(Sum)",18]}, Right],PlotStyle->{Black,Dashed,Dashed,Red},PlotLabel->"Raised Cosine Pulse Shape\nOutput of Receive Filter for 4-ary Signal\nTransmitted Symbol Rate=6 Ksymbols/sec\nRequired System (Transmission) Bandwidth="<>ToString[B*(1+a)]"",GridLines->{{0,(1/6),(2/6),.5},{-3,-1,1,3}}],ListPlot[{samples,Table[{k*(1/6),samples[[1,2]]*pcos[.0000001+k*(1./6),B,a]+samples[[2,2]]*pcos[.0000001+(k*(1./6.)-(1./6.)),B,a]+samples[[3,2]]*pcos[.0000001+(k*(1./6.)-(2./6.)),B,a]},{k,0,2}]},PlotStyle->PointSize[.01], Filling-> Axis,FillingStyle->Thickness[0.005],AxesLabel->{"Time (ms)", "y((Subscript[kT, s]))"},PlotLabel->"Samples at Receive Filter Output\nRequired System (Transmission) Bandwidth="<>ToString[B*(1+a)]"",PlotRange->{{-.1,.4},{-4.5,4.5}},PlotLegends->Placed[{Style["Desired Samples",18], Style["Samples-y((Subscript[kT, s]))",18]},Below] ,GridLines->{{0,(1/6),(2/6),.5},{-3,-1,1,3}}]}], {{B,3., "(Subscript[B, 0]) (kHz)"},.5,7, 0.25,Appearance->"Labeled"},{{a,.5, "α"},0,1, 0.25,Appearance->"Labeled"},SaveDefinitions->True]

Eye Diagram

data1={-1,1,-1,1,-1,-1,1,-1,-1,1,1,1,1,-1,-1};
data2={-1,-1,-1,1,-1,-1,1,-1,-1,-1,1,1,1,-1,-1};
data3={1,1,1,-1,1,1,1,-1,1,-1,-1,-1,-1,1,-1};
data4={1,-1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,1,1};
data5={-1,1,-1,1,1,-1,1,-1,-1,1,1,1,-1,1,-1};
data6={-1,1,-1,1,-1,1,1,-1,1,1,1,-1,-1,1,1};
data7={-1,-1,1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,-1};
X11[t_,B_,a_]:=(∑_(i=1)^15)data1[[i]]*((Cos[2. π *(t-i) a B] Sin[2. π *(t-i) B])/(2. π *(t-i) B (1.-16. ((((t-i)))^2) (a^2) (B^2))));
X12[t_,B_,a_]:=(∑_(i=1)^15)data2[[i]]*((Cos[2. π *(t-i) a B] Sin[2. π *(t-i) B])/(2. π *(t-i) B (1.-16. ((((t-i)))^2) (a^2) (B^2))));
X13[t_,B_,a_]:=(∑_(i=1)^15)data3[[i]]*((Cos[2. π *(t-i) a B] Sin[2. π *(t-i) B])/(2. π *(t-i) B (1.-16. ((((t-i)))^2) (a^2) (B^2))));
X14[t_,B_,a_]:=(∑_(i=1)^15)data4[[i]]*((Cos[2. π *(t-i) a B] Sin[2. π *(t-i) B])/(2. π *(t-i) B (1.-16. ((((t-i)))^2) (a^2) (B^2))));
X15[t_,B_,a_]:=(∑_(i=1)^15)data5[[i]]*((Cos[2. π *(t-i) a B] Sin[2. π *(t-i) B])/(2. π *(t-i) B (1.-16. ((((t-i)))^2) (a^2) (B^2))));
X16[t_,B_,a_]:=(∑_(i=1)^15)data6[[i]]*((Cos[2. π *(t-i) a B] Sin[2. π *(t-i) B])/(2. π *(t-i) B (1.-16. ((((t-i)))^2) (a^2) (B^2))));
X17[t_,B_,a_]:=(∑_(i=1)^15)data7[[i]]*((Cos[2. π *(t-i) a B] Sin[2. π *(t-i) B])/(2. π *(t-i) B (1.-16. ((((t-i)))^2) (a^2) (B^2))));
Manipulate[Plot[{X11[t,B,rr],X12[t,B,rr],X13[t,B,rr],X14[t,B,rr],X15[t,B,rr],X16[t,B,rr],X17[t,B,rr]},{t,0,7},PlotRange->{-2,2},AspectRatio->1,PlotStyle->{Opacity[a],Opacity[b],Opacity[c],Opacity[d],Opacity[e],Opacity[f],Opacity[g]},Epilog->{Text[If[a==1,"Sig1",""]],Text[If[b==1,"Sig2",""]],Text[If[c==1,"Sig3",""]],Text[If[d==1,"Sig4",""]],Text[If[e==1,"Sig5",""]],Text[If[f==1,"Sig6",""]],Text[If[g==1,"Sig7",""]]},GridLines->{{1,2, 3,4,5,6,7},{-1,-.5,.5,1}},ImageSize->{300,300},PlotLabel->"Eye diagram with Raised-Cosine Pulses: \nTransmission BW="<>ToString[B*(1+rr)]<>""],{{rr,.5,"α roll-off factor"},0,1,.1, Appearance->"Labeled"},{{B,.5,"Nyquist BW"},.1,2,Appearance->"Labeled"},{{a,0,"Sig1"},{1,0}},{{b,1,"Sig2"},{1,0}},{{c,0,"Sig3"},{1,0}},{{d,0,"Sig4"},{1,0}},{{e,0,"Sig5"},{1,0}},{{f,0,"Sig6"},{1,0}},{{g,0,"Sig7"},{1,0}},ControlPlacement->Top,FrameMargins->0,SaveDefinitions->True]

Approximation Used in Noise Analysis of FM

Manipulate[Graphics[{Arrowheads[Medium],{{Red, Arrow[{{0,0},{amp+1,1}}]}, {Blue, Arrow[{{0,0},{0,1}}]}, {Green, Arrow[{{0,0},{1,0}}]}, {Black, Arrow[{{0,0},{amp,0}}]}, {Brown, Arrow[{{amp,0},{amp+1,0}}]}}}, PlotRange -> {{-1, 22}, {-.5, 2}},  AxesLabel -> {"In-phase", "Quadature"},Axes -> True,GridLines->{Range[-.5,22,1],Range[-.5,2,.5]},PlotLabel->"Signal Space Diagram for FM\nPhase="<>ToString[ArcTan[(1/(amp+1))]]<>"\nBlue=(Subscript[n, Q])(t),: Green (Subscript[μx, bb])(t) + (Subscript[n, I])(t): Black=Carrier\nBrown=Carrier+(Subscript[μx, bb])(t)+ (Subscript[n, I])(t): Red=(Subscript[x, FM])(t)+n(t) ", AxesLabel->{"In-Phase","Quadature"}, ImageSize->Large],{{amp, 10.,"Carrier Amplitude" },0,20,.5,  Appearance->"Labeled"},SaveDefinitions->True]

Threshold Effect in FM

SNout[sn_,b_]:= ((3./2.)*(b^2)*(10^(sn/10.)))/(1.+(((12.*b)/π)*(10^(sn/10.)))*Exp[(-(10^(sn/10.)))/(2.*(b+1.))]);
Manipulate[Plot[{10*Log10[SNout[sn,b]],10*Log10[((3*(b^2))/2)*(10^(sn/10))]}, {sn,1,35},GridLines->Automatic, AxesLabel->{"(S/N)_pre(dB)","(S/N)_post(dB)"},PlotLabel->"Noise Performance of FM\nTone message signal", PlotRange->{{0,35},{0,60}},PlotLegends->{"Exact","3/2(β^2)"}], {{b,3,"FM Modulation index - β" }, 1,20.,.1,  Appearance->"Labeled"}, SaveDefinitions->True]

8-PSK in Noise

Manipulate[ListPlot[{RandomVariate[MultinormalDistribution[{a*Cos[((2*π*0)/8)],a*Sin[((2*π*0)/8)]},var*IdentityMatrix[2]],{25}],RandomVariate[MultinormalDistribution[{a*Cos[((2*π)/8)],a*Sin[((2*π)/8)]},var*IdentityMatrix[2]],{25}],RandomVariate[MultinormalDistribution[{a*Cos[((2*π*2)/8)],a*Sin[((2*π*2)/8)]},var*IdentityMatrix[2]],{25}],RandomVariate[MultinormalDistribution[{a*Cos[((2*π*3)/8)],a*Sin[((2*π*3)/8)]},var*IdentityMatrix[2]],{25}],RandomVariate[MultinormalDistribution[{a*Cos[((2*π*4)/8)],a*Sin[((2*π*4)/8)]},var*IdentityMatrix[2]],{25}],RandomVariate[MultinormalDistribution[{a*Cos[((2*π*5)/8)],a*Sin[((2*π*5)/8)]},var*IdentityMatrix[2]],{25}],RandomVariate[MultinormalDistribution[{a*Cos[((2*π*6)/8)],a*Sin[((2*π*6)/8)]},var*IdentityMatrix[2]],{25}],RandomVariate[MultinormalDistribution[{a*Cos[((2*π*7)/8)],a*Sin[((2*π*7)/8)]},var*IdentityMatrix[2]],{25}]},AspectRatio ->Automatic,AxesLabel->{"In-Phase","Quadrature"},GridLines-> Automatic, PlotRange->{{-4,4},{-4,4}},PlotStyle->PointSize[.015],PlotMarkers->"OpenMarkers",PlotLabel->"8-ary PSK Signal Constellation at Output of Integrate and Dump\nVectors Show Decision Regions\n200 Transmitted Symbols\n((Subscript[E, b])/(Subscript[N, 0]))(dB) = "<>ToString[10*Log10[(Sqrt[((a^2)/(8*var))])]]<>"", Epilog-> {{Black, Arrow[{{0,0},{4*Cos[(π/8)],4*Sin[(π/8)]}}]},{Black, Arrow[{{0,0},{4*Cos[((3*π)/8)],4*Sin[((3*π)/8)]}}]},{Black, Arrow[{{0,0},{4*Cos[((5*π)/8)],4*Sin[((5*π)/8)]}}]},{
Black, Arrow[{{0,0},{4*Cos[((7*π)/8)],4*Sin[((7*π)/8)]}}]}, {Blue, Arrow[{{0,0},{4*Cos[((9*π)/8)],4*Sin[((9*π)/8)]}}]},{Black, Arrow[{{0,0},{4*Cos[((11*π)/8)],4*Sin[((11*π)/8)]}}]},{Black, Arrow[{{0,0},{4*Cos[((13*π)/8)],4*Sin[((13*π)/8)]}}]} ,{Black, Arrow[{{0,0},{4*Cos[((15*π)/8)],4*Sin[((15*π)/8)]}}]}}],{{var,.01, "Variance of Decision Variable"},.00001,.5,.005,Appearance->"Labeled"},{{a,1., "Amplitude"},.2,2,.1,Appearance->"Labeled"},SaveDefinitions->True]

Antenna Gain

Manipulate[PolarPlot[{-16,Max[0,10 Log10[1000*p*Sinc[p t]^2]]},{t,-Pi,Pi},PolarAxes->True,PolarGridLines->{Table[t,{t,0,2 Pi,Pi/12}],Table[r,{r,6,48,3}]},PolarTicks->{"Degrees",Table[r,{r,6,48,6}]},TicksStyle->Blue,PlotStyle->{Red,Thick}, ImageSize->400, AspectRatio->1],{{p,10,"~(Subscript[A, eff])/(λ^2)"},3,22,Appearance->"Labeled"}, SaveDefinitions->True]

Link Budget: Interactive Table

DynamicModule[{
fc=250.,
PT=10,
dt=1.,
dr=2.,
d=10000,
 n=3,
F=3,
Ta=100,
BW=10,
LM=0},
Deploy[Style[Panel[Grid[Transpose[{{
Style["(Subscript[f, c])(MHz)",Black],
Style["λ(m)",Red],
Style["(Subscript[P, T])((Subscript[dB, W]))",Black],
Style["Diameter Tx (m)",Black],
Style["Transmit Antenna Gain: (Subscript[G, T])(dB)",Red],
Style["Distance (m)",Black],
Style["Propagation Exponent",Black],
Style["Path Loss (dB)",Red],
Style["Diameter Rec (m)",Black],
Style["Receive Antenna Gain: (Subscript[G, R])(dB)",Red],
Style["(Subscript[P, R])((Subscript[dB, W]))",Red],
Style["Noise Figure(dB)",Black],
Style["Equivalent Noise Temp",Red],
Style["Antenna Temp",Black],
Style["Bandwidth (MHz)",Black],
Style["Noise Power ((Subscript[dB, W]))",Red],
Style["Margin(dB)",Black],
Style[" \!\(\*Cell[TextData[Cell[BoxData[FormBox[
SubscriptBox[RowBox[{"(", RowBox[{"Signal", "-", "to", "-", "Noise"}], ")"}], "pre"], TraditionalForm]],ExpressionUUID->"10065ffa-3d75-434a-9cf8-59db19573540"]],ExpressionUUID->"d8e7c20e-accb-447e-8105-418501f89892"]\)(dB)",Red]
},
{InputField[Dynamic[fc]],
InputField[Dynamic[((3.*(10^8))/(fc*(10^6)))]],
InputField[Dynamic[PT]],
InputField[Dynamic[dt]],
InputField[Dynamic[20*Log10[((π*dt)/((3.*(10^8))/(fc*(10^6))))]]],
InputField[Dynamic[d]],
InputField[Dynamic[n]],
InputField[Dynamic[20*Log10[((4.*π)/((3*(10^8))/(fc*(10^6))))]+10.*n*Log10[d]]],
InputField[Dynamic[dr]],
InputField[Dynamic[20*Log10[((π*dr)/((3.*(10^8))/(fc*(10^6))))]]],
InputField[Dynamic[PT+20*Log10[((π*dt)/((3.*(10^8))/(fc*(10^6))))]-(20*Log10[((4.*π)/((3*(10^8))/(fc*(10^6))))]+10.*n*Log10[d])+20*Log10[((π*dr)/((3.*(10^8))/(fc*(10^6))))]]],
InputField[Dynamic[F]],InputField[Dynamic[290.*((10^(F/10))-1)]],InputField[Dynamic[Ta]],InputField[Dynamic[BW]],InputField[Dynamic[10*Log10[1.38*(10^(-23))*(Ta+290.*((10^(F/10))-1))*BW*(10^6)]]],InputField[Dynamic[LM]],InputField[Dynamic[(PT+20*Log10[((π*dt)/((3.*(10^8))/(fc*(10^6))))]-(20*Log10[((4.*π)/((3*(10^8))/(fc*(10^6))))]+10.*n*Log10[d])+20*Log10[((π*dr)/((3.*(10^8))/(fc*(10^6))))])-(10*Log10[1.38*(10^(-23))*(Ta+290.*((10^(F/10))-1))*BW*(10^6)])-LM],
Enabled->False]}}],Alignment->Right],Column[{Style["Link Budget" ,FontSize->18],Style["(Results are not valid for (Subscript[G, T]) and/or (Subscript[G, R]) <0dB)", FontSize->10], Spacer[10],
Style["     Input Parameters in Black", Black, FontSize -> 14],Style["     Calculated parameters in Red", Red, FontSize -> 14]}],ImageMargins->10],DefaultOptions->{InputField->{ContinuousAction->True}}]]]

Link budget: Interactive Graphic

ClearAll[Pt,Dtt,Dr,Ta,Be]
Manipulate[Plot[Pt+20*Log10[((π*Dtt)/((3.*(10^8))/(fc*(10^6))))] - (20*Log10[((4*π)/((3*(10^8))/(fc*(10^6))))]+10*n*Log10[d])+20*Log10[((π*Dr)/((3.*(10^8))/(fc*(10^6))))]-10Log10[Be*10^6]-10Log10[1.38*(10^(-23))*(Ta+290*((10^(F/10))-1))], {d,1,200000},PlotRange->{{0,40000},{-10,50}}, AxesOrigin->{0,0},PlotLabel->"\!\(TraditionalForm\`Link\\ Budget\\ \((Terrestrial)\)\)\nResults are not valid for (Subscript[G, T]) and/or (Subscript[G, R]) <0dB\nTransmit Antenna Gain (dB)="<>ToString[NumberForm[20*Log10[((π*Dtt)/((3.*(10^8))/(fc*(10^6))))],4]]<>"\nReceive Antenna Gain (dB)="<>ToString[NumberForm[20*Log10[((π*Dr)/((3.*(10^8))/(fc*(10^6))))],4]]<>"\nReceive Power(dB)_W at 1km="<>ToString[NumberForm[Pt+20*Log10[((π*Dtt)/((3.*(10^8))/(fc*(10^6))))] - (20*Log10[((4*π)/((3*(10^8))/(fc*(10^6))))]+10*n*Log10[1000])+20*Log10[((π*Dr)/((3.*(10^8))/(fc*(10^6))))],4]]<>"", AxesOrigin->{2000, 0},Axes->True, AxesLabel->{"Distance (m)","(S/N)_pre"}, GridLines->{Range[0,100000,2000],Range[-10,50,5]}], {{fc,1000,"Carrier Frequency (MHz)"},300,40000,Appearance->"Labeled"}, {{Dtt,1,"Transmit Antenna Diameter(m)"},.001,10,.0001,Appearance->"Labeled"},{{Dr,1,"Receive Antenna Diameter(m)"},.001,10,.0001,Appearance->"Labeled"}, {{Pt,10,"Transmit Power((Subscript[dB, W]))"},.25,30,Appearance->"Labeled"}, {{n,3,"Path-loss Exponent"},2,4.5,.1, Appearance->"Labeled"},{{F,2,"System Noise Figure(dB)"},1.01,10,.1, Appearance->"Labeled"},{{Ta,290,"Antenna Noise Temp"},2,500,5, Appearance->"Labeled"},
{{Be,2,"Bandwidth(MHz)"},.01,500,.1, Appearance->"Labeled"},ControlPlacement->Bottom, SaveDefinitions->True]

In-line Questions

In-line Questions

In-line Questions

New QuestionObject in [Experiential] Mathematica 12.3

QuestionObject["Given a fixed RF bandwidth, as M in M-QAM increases the bit rate increases and the BER increases.",AssessmentFunction[{"TRUE"->True,"FALSE"->False}]]

Conclusions

Active engagement of students in the learning of the basic concepts of communications systems is facilitated by the free open source Mathematica textbook.

Student comments in response to: What aspects of the class were most helpful to your learning?

"The best part of this class was the interactive book, since the graphs and tables with changeable parameters allowed for a very good understanding since you could physically see what's happening."

“Having actual examples to reference from the electronic book when doing homework was helpful.”

“the sample problems in the textbook with automatic checking”

Different approach taken to teaching the subject; introducing digital modulation, especially OFDM as quickly as possible.

Student comment: “really neato material, interesting to see real-world examples”

Interactivity facilitates teaching communication system design trade-offs