Project 3 — B-21 IR/RCS Signature Trade Study#
Background#
Block 3 taught you to read and shape every band of an aircraft’s signature: the infrared spectrum and its seekers (L21–L24), radar cross-section as an aspect pattern (L25–L26), the materials and discipline that buy the last decibels (L27), and the fusion rule that ties them together (L28) — detection is a union, so you are found at the range of your loudest band, R_det = max_b R_b. This project turns that toolkit into an acquisition decision. Your group is the B-21 signature-management cell: a fixed budget buys a package of signature-management investments — planform realignment, structural low-band treatment, radar-absorbing coatings, plume suppression, low-emissivity skin, DIRCM, emission discipline — and each cuts some bands and not others, at a cost in money and weight. Against a three-band threat — a VHF surveillance radar, an X-band fire-control radar, and an IR MANPADS — you must recommend the package that buys the most survivability without exceeding the budget. The project asks three questions. Which band limits you, and can the budget move it? What does the terminal threat cost you in detection range? Does your answer survive when the aircraft turns? There are no threat positions and no routes here: the Final Project plans routes with this same signature pattern.
Materials#
Project 3 handout (PDF) — the authoritative tasking, deliverables, and rubric
B21_SignaturePattern.csv — B-21 baseline VHF / X / IR signature vs aspect
SignatureMenu.csv — the seven signature-investment options
The MATLAB starter code/L29_Project3Starter.m is bundled in the course code download with both CSVs beside it — it scores the baseline and one example package against the three threats, so your group starts at the trade study, not the file I/O.
Explore the trade study#
Toggle investments on and off and watch the budget and the three threat ranges update; then rotate the aircraft to see which threat holds a track at each aspect. This is an explorer, not the deliverable. The dashboard’s aspect tab uses an illustrative laydown; the tasking is the handout’s.
Getting coding help from AI — sample prompts#
Each prompt follows the handout’s Use of AI rules. You state your own approach first; you paste the starter’s own code (this project has no toolkit), so the AI extends your model instead of inventing one; you ask for code that does exactly your approach; and you ask the AI to explain every line, so that you own it. None of them asks the AI to do the task, pick a package, or write your results. Task 5 is your recommendation, so it has no prompt. Adapt each prompt to your own approach and variable names, replace each bracketed line with the code it names, and keep the transcript — it is part of your code deliverable.
Task 1 — the pipeline as one function
I am writing MATLAB for a course project. The starter script I was issued
reads an aircraft signature pattern and a menu of treatments, and scores one
package. The parts I will reuse are below.
[paste Steps 1 to 4 of L29_Project3Starter.m]
[paste the threeRanges function from L29_Project3Starter.m]
[paste the header line of SignatureMenu.csv]
My approach: one function R = scorePackage(ids, azRadar, azIR) that returns
the three ranges [R_VHF R_X R_IR] in km for a cell array of menu ids such as
{'A','D'}, with {} meaning no treatment. It reads the two CSV files the way
the starter does. The two radars use the pattern row where az equals azRadar,
and the IR seeker uses the row where az equals azIR. For the radars, I add up
d_VHF_dB and d_X_dB over the chosen rows and take each sum off that band's RCS
in dB. For the IR, my model has two contributors: Jskin = 40 W/sr is the skin,
the smallest value in the pattern's IR column, and J0 - Jskin is the hot parts
and plume, where J0 is the pattern's IR value at azIR. With dHot and dSkin the
sums of d_IRhot_dB and d_IRskin_dB over the chosen rows, the package leaves
J = Jskin*10^(-dSkin/10) + (J0 - Jskin)*10^(-dHot/10). The three ranges then
come from threeRanges, unchanged. Write scorePackage to do exactly this,
keeping the starter's variable names and without changing the model. Then
explain what each line does, and tell me how to check scorePackage({}, 0, 180)
by hand against the baseline numbers the starter prints.
Task 2 — scoring every package that fits the budget
I am writing MATLAB for a course project. I have a function that scores one
package of menu items; I wrote it and tested it against the numbers my starter
script prints.
[paste your scorePackage function]
[paste the header line of SignatureMenu.csv]
My approach: the menu has seven items, so there are 2^7 = 128 on/off
combinations. I loop k = 0:127 and use mask = dec2bin(k, 7) == '1' to pick the
menu rows that are on. For each k, I add up the cost and weight columns over
those rows and keep the combination only if the cost is <= 10 and the weight
is <= 5. For each one I keep, I call scorePackage(ids, 0, 180) and add one row
to a table: the ids joined into one string such as 'A+D', the cost, the
weight, R_VHF, R_X, R_IR, R_det = the largest of the three, and the name of
the band that sets R_det. Write the loop and the table with plain loops and no
toolboxes. Do not rank or pick packages: I will read the table and decide.
Explain each line, and tell me how to check two rows of the table by hand.
Task 3 — every feasible package on two axes
I am writing MATLAB for a course project. I have a table T with one row per
package that fits my budget; the code that builds it is below.
[paste the code that builds your table of feasible packages]
My approach: one scatter plot with R_det on the x axis and the MANPADS range
R_IR on the y axis, one marker per row of T, each labeled with its id string.
My rule for marking: package i is beaten if some other package j is at least
as good on both axes, R_det(j) <= R_det(i) and R_IR(j) <= R_IR(i), and
strictly better on at least one of them. Write a function keep =
notBeaten(Rdet, Rir) that implements exactly my rule with plain loops and
returns true for every package that no other package beats, and the plotting
code that draws those packages with a different marker. Do not tell me which
package to choose. Explain each line, and give me a test case with three
packages that I can check by hand.
Task 4 — the same packages at nose, beam, and tail
I am writing MATLAB for a course project. I have a function that scores one
package with the radars at one aspect and the IR seeker at another; I wrote it
and tested it.
[paste your scorePackage function]
My approach: I put the packages I list in a cell array, for example pk = {{},
{'A','D'}}, where {} is the baseline. For each package and for each aspect az
in [0 90 180], I call scorePackage(ids, az, az), so that all three threats
look at the same aspect. I print one row per package and aspect with fprintf:
the id string, the aspect, R_VHF, R_X, R_IR, R_det = the largest of the three,
and the name of the band that sets R_det. Write the two loops and the
printout. Do not tell me which package is better: I will read the table and
decide. Explain each line, and tell me how to check one row by hand from
B21_SignaturePattern.csv.
Schedule#
L29 is a dedicated in-class work day — see L29 — Project 3 Work Day.
L30: slides (PDF) and code due before class; 10-minute presentation + 5 minutes Q&A, every member speaking — see L30 — Project 3 Presentations.
The rubric includes an innovation bonus of up to +5% for going beyond the baseline ask — a full aspect sweep, a budget-sensitivity study, a threat-conditioned kill probability, or an honest negative result. Worth planning for from the start; details in the handout.