Все-таки в теме про Ардуино надо было... В своем проекте цифрового измерителя КСВ и мощности сначала я сделал усреднение сигнала прямой и обратной волны, чтобы цифры не так "мельтешили":
Код:
int U1=0,U2=0; //назначаем переменные прямой и обратной волны
const int COUNT = 10; //назначаем константу кол-во измерений
for (byte i=0; i<COUNT; i++){ //включаем цикл измерения
U1 += A0_Read; //суммируем значения U1 с порта А0
U2 += A1_Read;} //суммируем значения U2 с порта А1
U1 = U1 / COUNT; //усредняем значение U1
U2 = U2 / COUNT; //усредняем значение U2
if (U1<10) U1=0; //ограничение малых значений U1
if (U2<10) U2=0; //ограничение малых значений U2
Для этого делается 10 измерений со входов АЦП. Если значения со входов меньше 10, то уровень прямой и обратной волны принимаем как ноль. Это устраняет цифровой шум и наводки.
На вашем фото без сигнала КСВ=0.0, что смотрится несколько дико. Можно вывести 1.0 или надпись "WAIT". Определение КСВ я сделал так:
Код:
if ((U1==0)&&(U2==0)){SWR=1.0;} //если прямая и обратная волна равны нулю, то КСВ=1
if ((U1>=0)&&(U2!=0)&&(U1<=U2)){SWR=9.99;} //если U1 и U2 не равны нулю и U1<=U2, то КСВ равно 9.99
if (U1>U2){SWR=(U1+U2)/(U1-U2);} //если U1>U2, то расчитываем значение КСВ
if (SWR>=9.99){SWR=9.99;} //ограничиваем значение КСВ на уровне 9.99
Я ограничился КСВ=9.99, выше измерять не вижу смысла. Что касается мощности, я сначала тоже отображал прямую и отраженную мощности. Затем понял, что считать отраженную нет смысла, т.к. до КСВ=3 там получается мизер. Поэтому полезнее считать реальную мощность с учетом КСВ. Достигается это через "виртуальное" напряжение на нагрузке 50Ом:
Код:
V=((U1*5)/1023)*l; //приводим напряжение к мощности
PWR=(V*V)/50; //вычисляем мощность
Если нужно вычислить отраженную мощность, то подставляем в формулу напряжение обратной волны U2. Что касается коэффициента l, с его помощью накладывается масштаб вашего измерителя мощности:
l=6.326 для P=20W
l=8.945 для P=40W
l=12.65 для P=80W
l=15.495 для P=120W и т.д.
Вкратце как-то так