Fix fractional calculation for frequencies close to integer multiples
This commit is contained in:
parent
b3cc97c0c9
commit
e0c9f4dcee
@ -190,6 +190,14 @@ bool MAX2871::SetFrequency(uint64_t f) {
|
|||||||
|
|
||||||
auto approx = Algorithm::BestRationalApproximation(fraction, 4095);
|
auto approx = Algorithm::BestRationalApproximation(fraction, 4095);
|
||||||
|
|
||||||
|
if (approx.denom == approx.num) {
|
||||||
|
// got an impossible result due to floating point limitations(?)
|
||||||
|
// Set fractional part to zero, increase integer part instead
|
||||||
|
approx.num = 0;
|
||||||
|
approx.denom = 2;
|
||||||
|
N++;
|
||||||
|
}
|
||||||
|
|
||||||
if(approx.denom == 1) {
|
if(approx.denom == 1) {
|
||||||
// M value must be at least 2
|
// M value must be at least 2
|
||||||
approx.denom = 2;
|
approx.denom = 2;
|
||||||
|
@ -180,9 +180,11 @@ bool VNA::Setup(Protocol::SweepSettings s) {
|
|||||||
// Configure LO2 for the changed IF1. This is not necessary right now but it will generate
|
// Configure LO2 for the changed IF1. This is not necessary right now but it will generate
|
||||||
// the correct clock settings
|
// the correct clock settings
|
||||||
last_LO2 = actualFirstIF - HW::IF2;
|
last_LO2 = actualFirstIF - HW::IF2;
|
||||||
LOG_INFO("Changing 2.LO to %lu at point %lu (%lu%06luHz) to reach correct 2.IF frequency",
|
LOG_INFO("Changing 2.LO to %lu at point %lu (%lu%06luHz) to reach correct 2.IF frequency (1.LO: %lu%06luHz, 1.IF: %lu%06luHz)",
|
||||||
last_LO2, i, (uint32_t ) (freq / 1000000),
|
last_LO2, i, (uint32_t ) (freq / 1000000),
|
||||||
(uint32_t ) (freq % 1000000));
|
(uint32_t ) (freq % 1000000), (uint32_t ) (actualLO1 / 1000000),
|
||||||
|
(uint32_t ) (actualLO1 % 1000000), (uint32_t ) (actualFirstIF / 1000000),
|
||||||
|
(uint32_t ) (actualFirstIF % 1000000));
|
||||||
} else {
|
} else {
|
||||||
// last entry in IF table, revert LO2 to default
|
// last entry in IF table, revert LO2 to default
|
||||||
last_LO2 = HW::IF1 - HW::IF2;
|
last_LO2 = HW::IF1 - HW::IF2;
|
||||||
|
Loading…
Reference in New Issue
Block a user