FM: the capped rich-carrier corner aliases at -23 dB, and oversampling cannot fix it #67
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
bcox/tymbal#67
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
FmPairLayer::RequiredBandwidthRationow charges for the carrier's own harmonicindex (branch
fm-followups): the carrier is anAdditiveOscillator, andRenderadds the modulation before harmonic scaling, so carrier partial
kcarriesktimes the deviation and spreads
ktimes as far.Charging that term honestly exposes a corner the rule cannot serve.
kruns up tothe output Nyquist over
fc-- 91 partials at C4 -- so a deep, bright patch on asquare carrier asks for roughly ninety times the bandwidth the same settings need on
a sine carrier. That is not one rung past
kMaxOversampleRatio; it is out of reachof any decimator family. The walk runs out of rungs, the note lands on the ceiling,
and it aliases.
FmAlias.TheCappedRichCarrierCornerStillAliasesmeasures about -23 dB on such anote against the -60 dB
kAliasFloorDbbar.The rung is still worth having -- the same note reads +2.9 dB at 1x -- and
quieter patches on the same carrier are now served properly rather than capped: the
grid's C4 square cell derived 1x and measured -18.9 dB before this term existed, and
derives 16x and measures -94.1 dB now.
Oversampling is the wrong lever, and nothing should try to grow the family. What
actually fits that note into the band is rendering fewer carrier partials --
kHarmonicLimit, lowered until what survives has room to spread. That changes thesound rather than only the cost, so it belongs to the graceful-degradation ladder and
to whoever owns the decision about how a patch is allowed to degrade.
Recorded beside
kMaxOversampleRatioindsp/fm_pair_layer.hand in the test above.Filed so the ladder work has this waiting for it.