fix: power is RM5, not RM4 — the CW keying was the experiment
An FM carrier could not answer it: constant by definition, so nothing to correlate. CW at 100 W did, because the keying itself varies the output: key down: RM4=25 RM5=207 RM6=13 key up: RM4=25 RM5=0 RM6=0 RM5 follows the RF envelope exactly — it IS the power meter. RM4 sits near 25 whether the key is down or up, so it is not measuring output at all, and reading it as power is what showed 8 W on a 100 W transmission. The operator's hunch was right and my first reading of the ramp was wrong: what I took for a needle rising was RM4 drifting, not tracking. Watts are now derived from that meter (207 = 100 W, measured) instead of the power SETTING scaled by a percentage — the setting says what was asked for, the meter says what left the radio. The bars also hold their peak with a gentle decay. In CW the meters genuinely read zero between elements, so following the raw value made them flash to nothing several times a second; a needle has inertia, and this only ever holds a value the radio really reported.
This commit is contained in:
@@ -19,7 +19,7 @@ type YaesuState = {
|
||||
rf_power: number; mic_gain: number; af_gain: number; rf_gain: number; squelch: number;
|
||||
agc?: string; preamp: number; att: number;
|
||||
nb: boolean; nr: boolean; nr_level: number; narrow: boolean; vox: boolean;
|
||||
split_tx_hz?: number; key_speed?: number; break_in?: boolean; swr?: number;
|
||||
split_tx_hz?: number; key_speed?: number; break_in?: boolean; swr?: number; power_w?: number;
|
||||
};
|
||||
|
||||
const ZERO: YaesuState = {
|
||||
@@ -350,7 +350,10 @@ export function YaesuPanel({ onReportRST, onKeySpeed }: {
|
||||
display={sParts(view.s_meter).label}
|
||||
onClick={onReportRST ? () => { const sp = sParts(view.s_meter); onReportRST(sMeterRST(sp.s, sp.over, view.mode)); } : undefined}
|
||||
title={onReportRST ? t('yaesu.sToRst') : undefined} />
|
||||
<MeterBar label="PWR" value={view.rf_power * view.power_meter / 100} unit="W" lo={0} hi={100} accent="#0ea5e9" />
|
||||
{/* Watts as MEASURED, not the power setting scaled by a percentage:
|
||||
the setting says what was asked for, the meter says what left. */}
|
||||
<MeterBar label="PWR" value={view.power_w ?? 0} unit="W" lo={0} hi={Math.max(100, view.rf_power || 100)} accent="#0ea5e9"
|
||||
display={view.transmitting ? Math.round(view.power_w ?? 0) + 'W' : '—'} />
|
||||
{/* The RATIO, as the rig shows it — a percentage of meter travel is
|
||||
not something an operator can act on. The bar keeps the travel. */}
|
||||
<MeterBar label="SWR" value={view.swr_meter} lo={0} hi={100} accent="#f59e0b"
|
||||
|
||||
@@ -1098,6 +1098,7 @@ export namespace cat {
|
||||
nr_level: number;
|
||||
narrow: boolean;
|
||||
swr: number;
|
||||
power_w: number;
|
||||
vox: boolean;
|
||||
key_speed: number;
|
||||
break_in: boolean;
|
||||
@@ -1131,6 +1132,7 @@ export namespace cat {
|
||||
this.nr_level = source["nr_level"];
|
||||
this.narrow = source["narrow"];
|
||||
this.swr = source["swr"];
|
||||
this.power_w = source["power_w"];
|
||||
this.vox = source["vox"];
|
||||
this.key_speed = source["key_speed"];
|
||||
this.break_in = source["break_in"];
|
||||
|
||||
Reference in New Issue
Block a user