Форум Радиолюбителей

Всё про АРУ

859839 просмотров, 513 ответов — стр. 13 из 35

Игорь 2
Сообщений: 21288
1 декабря 2019 г. в 10:26#181
Пните в нужном направлении .

Пинаю. Целый день сегодня потратил на моделирование работы последней АРУ в шумах и помехах.
Напомню - там были две времязадающие цепочки - с постоянными времени заряда 1 и 15 мс, и временем разряда соответственно 100 мс (пробовал и до 10 уменьшать), и временем, определяемым интеллектуалкой (либо бесконечность, либо 1 с.).
В очередной, и, надеюсь, теперь уже в последний раз сделал однозначный выход - в шумах и помехах АРУ с быстрой цепью адекватно работать не может - короткие выбросы помех, или шумов существенно хуже слушаются, если они отрабатываются АРУ, а не ограничителем, как я это и практиковал ранее, в результате чего, в очередной раз принято решение, отказаться от скоростной цепочки, оставив только длинную.
В новом варианте слабосигналки принято решение оставить АРУ по ПЧ (т. к., только с ней можно ставить лимитер +3 дБ, не опасаясь частого наскока на него), и временем срабатывания порядка 15 мс.
Интеллектуалку делаю не отключаемой - смысла отключать не вижу никакого - без неё работать вообще проблематично - либо существенная компрессия принимаемого сигнала и искажения, либо по нескольку секунд ждать отката....
Игорь 2
Сообщений: 21288
2 декабря 2019 г. в 01:25#182
Вот здесь https://cloud.mail.ru/public/45wm/3jiaxZWQy запись с семёрки четверть часа назад.
Прохождение закрыто, но иногда что-то слышно. Работает интеллектуалка (хорошо слышно по характерной тишине после громких звуков, и быстрому нарастанию усиления спустя секунду после их окончания), быстрая цепь АРУ отключена, у медленной срабатывание 15 мс, лимитер +3 дБ относительно порога АРУ.
veso74
Сообщений: 969
2 декабря 2019 г. в 02:08#183
Без сильных станций в эфире (с короткой антенной) демо-запись не дает много информации.

Добавлю еще как мое впечатление (можете не учитывать): невозможно дать оценка кореспондента "по слухом" - необходимо смотреть S-метр , все "равно" и все "в шумов". Для меня радио звучит странно (работа АРУ: как будто антенна постоянно переключалась), невозможно слушать долгое время (шум в большем количестве), не могу представить работа с ето радио во время контеста. По крайней мере, не слушал такого радио в другом месте .

А и реакция радио на атмесферние помехи есть выразительная: щраак, щраак ... (как грамофонной попкорн), с вся мощность атмосферного разряда (через ограничителя, конечно).

Вероятно (как говорите не один раз), для диспечерская работа так нормально (нет наблюдения у меня, только хамрадио).
Игорь 2
Сообщений: 21288
2 декабря 2019 г. в 02:23#184
(шум в большем количестве

Никто не мешает усиление убрать. Но тогда слабые станции будут слабее сильных на слух. А мне это не нравится...
ra0ahcra0ahc
Сообщений: 4868
2 декабря 2019 г. в 07:23#185
Да! Я так понял работает только слабосигнальное ару.

Критику принимаете?

И Вы пошли по этому пути, только через аналог. Вам будет не легко.
Не пойдет Игорь
Я прослушал ваш файл. Любой всплеск врубает на 1 сек цепь с последующем резким возвратом, И выглядит это как грозовой разряд в августе.
Я прошел через это, даже выкладывал что-то подобное, но мне не понравилось и я переделал алгоритм. Ошибка в чем...У вас лимиттеры нормально работают их точно переделывать не нужно, а потом нужно чтобы основная цепь ару плавно (!) снижала усиление именно плавно, лимиттер держит же в этот момент. Я в итоге к этому пришел. Что происходит: идет щелчок, за ним срабатывает лимиттер, и потом плавно начинает подходить основная цепь ару. И в этот момент щелчок заканчивается и ару не успела просадить до конца усиление(у вас именно так - просадила до конца) и теперь плавный (не резкий возврат) потому-что цепь не успела просадить усиление и нам не надо ее оч быстро возвращать. Здесь, допустим, у меня две стадии возврата медленная и быстрая. В результате не важно какой сигнал пришел сильный или умеренный - возврат будет одинаковый точнее квадратичная скорость. Так же я писал в тонкостях про эффект 0 и как его нужно отлавливать. Вообщем без двойного подхода и разграничения по длительности у вас так и будет хлопать.

Я уж не знаю как вы пришли к этому быстрому возврату усиления - но это точно гениально! Сейчас только на самых последних буржуях такое ару стоит.
А вообще, в цифре конечно это всё на порядок легче делается. Я например, пройдя путь джедая с цифрой в ару, вряд ли теперь буду делать аналог - слишком много ограничений.
ra0ahcra0ahc
Сообщений: 4868
2 декабря 2019 г. в 07:41#186
Ну и что бы не голословить вот код, точнее сам алгоритм.
Зеленым - это как раз алгоритм плавного изменения усиления каскадов в обеих ару, который убрал этот эффект, что у вас на записи.

void agcDacSelectLevel(uint8_t bank) {

adcSlaboSumValue = 0;
adcSilaSumValue = 0;

uint8_t s = 0;
uint8_t po = FRAME_SIZE / 2 - 1;

if (agcCountSila) agcCountSila--;
if (agcCountSlabo) agcCountSlabo--;
if (agcCountDown) agcCountDown--;
if (agcCountDownSila) agcCountDownSila--;
if (agcCountSlaboUp) agcCountSlaboUp--;

if (bank == 2) {
s = FRAME_SIZE / 2;
po = FRAME_SIZE - 1;

}
for (s; s <= po; s++) {

adcSlaboSumValue += IN_Buffer_slabo[ s ];
adcSilaSumValue += IN_Buffer_sila[ s ];

}
adcSlaboSumValue /= FRAME_SIZE / 2;
adcSilaSumValue /= FRAME_SIZE / 2;

//sila
if ((adcSilaSumValue <= ADC_LEVEL_NORM_SILA + ADC_LEVEL_DELTA_SILA &&
adcSilaSumValue >= ADC_LEVEL_NORM_SILA)
) { agcCountSila = AGC_HOLD_TIME_SILA; } //если сигнал еще высокий то продолжаем задержку

if ((adcSilaSumValue >= ADC_LEVEL_NORM_SILA + ADC_LEVEL_DELTA_SILA ||
adcSilaSumValue <= ADC_LEVEL_NORM_SILA - ADC_LEVEL_DELTA_SILA / 2)
) {

if (adcSilaSumValue >= ADC_LEVEL_NORM_SILA + ADC_LEVEL_DELTA_SILA) {//если растет на входе
uint16_t step;

agcCountSila = AGC_HOLD_TIME_SILA;

if ((float) (adcSilaSumValue) / ADC_LEVEL_NORM_SILA > 1.15) {
step = (uint8_t) ((float) (adcSilaSumValue) / ADC_LEVEL_NORM_SILA * 40);
} else step = 1;

if (nowDacLevelSila + step <= DAC_LEVEL_MAX_SILA) { nowDacLevelSila += step; }
else { nowDacLevelSila = DAC_LEVEL_MAX_SILA; }

agcDacWrite(nowDacLevelSila, 1);
// agcDacWrite(0, 1);

} else { //если падает
if (!agcCountSila) { //если задержка закончилась, поднимать усиление
uint8_t step;

if ((float) ADC_LEVEL_NORM_SILA / (float) adcSilaSumValue > 1. {
step = (uint8_t) (ADC_LEVEL_NORM_SILA / (float) (adcSilaSumValue) * 20);
//step = 1;
} else step = 1;

if (!agcCountDown) {

if (nowDacLevelSila - step >= DAC_LEVEL_MIN_SILA) { nowDacLevelSila -= step; }
else { nowDacLevelSila = DAC_LEVEL_MIN_SILA; }

agcDacWrite(nowDacLevelSila, 1);
// agcDacWrite(0, 1);

agcCountDownSila = 0;

}
}
}
}
//
//
//slabo
//
//

if ((adcSlaboSumValue <= ADC_LEVEL_NORM_SLABO + ADC_LEVEL_DELTA_SLABO && adcSlaboSumValue >= ADC_LEVEL_NORM_SLABO)
) { agcCountSlabo = AGC_HOLD_TIME_SLABO; } //если сигнал еще высокий то продолжаем задержку

if ((adcSlaboSumValue > ADC_LEVEL_NORM_SLABO + ADC_LEVEL_DELTA_SLABO ||
adcSlaboSumValue < ADC_LEVEL_NORM_SLABO)
) {

if (adcSlaboSumValue >= ADC_LEVEL_NORM_SLABO + ADC_LEVEL_DELTA_SLABO) {//если растет на входе

agcCountSlabo = AGC_HOLD_TIME_SLABO;

uint16_t step = 1;
if ((float) (adcSlaboSumValue) / ADC_LEVEL_NORM_SLABO > 1.15) {
step = (uint8_t) ((float) (adcSlaboSumValue) / ADC_LEVEL_NORM_SLABO * 20);
// step = 1;
} else step = 1;

if (!agcCountSlaboUp) {//задержка на возрастание

if (nowDacLevelSlabo + step <= DAC_LEVEL_MAX_SLABO) { nowDacLevelSlabo += step; }
else { nowDacLevelSlabo = DAC_LEVEL_MAX_SLABO; }

// agcDacWrite(1250, 0);
agcDacWrite(nowDacLevelSlabo, 0);
agcCountSlaboUp = 0;// const задержка на возрастание
}

} else { //если падает
if (!agcCountSlabo) {

uint8_t step;
if ((float) ADC_LEVEL_NORM_SLABO / (float) adcSlaboSumValue > 1.9) {
step = (uint8_t) ((ADC_LEVEL_NORM_SLABO / (float) (adcSlaboSumValue)) * 25);
// step = 5;
} else {
if ((float) ADC_LEVEL_NORM_SLABO / (float) adcSlaboSumValue > 1.05) {
step = (uint8_t) ((ADC_LEVEL_NORM_SLABO / (float) (adcSlaboSumValue)) * 10);
//step = 1;
} else {

step = 1;
}
}
if (!agcCountDown) { //плавное отпускание
if (nowDacLevelSlabo - step >= DAC_LEVEL_MIN_SLABO) { nowDacLevelSlabo -= step; }
else { nowDacLevelSlabo = DAC_LEVEL_MIN_SLABO; }
agcDacWrite(nowDacLevelSlabo, 0);
//agcDacWrite(1250, 0);

agcCountDown = 10;
}
}
}

}

if (skip) skip = ~skip;
// char buf[20];
// GUI_SetFont(&GUI_Font8x16);

// sprintf(buf, "%04d", (int) adcSilaSumValue / FRAME_SIZE);
// GUI_DispStringAt(buf, 10, 70);
// sprintf(buf, "%04d", (int) adcSlaboSumValue);
// GUI_DispStringAt(buf, 10, 150);

}
ra0ahcra0ahc
Сообщений: 4868
2 декабря 2019 г. в 07:53#187
К стати, управление через i2c цепями ару в реальном времени - утопия. Только SPI и на максимальной скорости (У меня на 3МГц из 18МГЦ возможных ).
Игорь 2
Сообщений: 21288
2 декабря 2019 г. в 10:15#188
Я так понял работает только слабосигнальное ару.

До отработки сильносигналки ещё 40 дБ. И она точь-в-точь такая же. Так что, ничего нового не добавится.

Любой всплеск врубает на 1 сек цепь с последующем резким возвратом

Нет, не любой. А тот, что длиннее 15 мс. Полагаю ввести возможность удлинять либо переключателем, либо переменным резистором через оптрон. Укорачивать точно не буду.

с последующем резким возвратом

С последующим резким возвратом через чётко заданное время, чтобы не искажать сигнал, и слушать не то, во что превратила эфир убогая АРУ, а, именно то, что там и идёт.
Время тоже полагаю сделать изменяемым, очевидно, две позиции - 0.5 с. для спорта, и 1 и 2с. (сейчас 1с) для жизни - полсекунды при спокойном разговоре - ацтой полный, если человек не тараторит, в паузах шумы лезут.

а потом нужно чтобы основная цепь ару плавно (!) снижала усиление именно плавно, лимиттер держит же в этот момент.

А она плавно и снижает...


Игорь 2
Сообщений: 21288
2 декабря 2019 г. в 10:23#189
И в этот момент щелчок заканчивается и ару не успела просадить до конца усиление(у вас именно так - просадила до конца) и теперь плавный (не резкий возврат) потому-что цепь не успела просадить усиление и нам не надо ее оч быстро возвращать.

При плавном возврате потеряем возможную информацию, идущую следом. Повторю - какое-то время после щелчка длиннее 15 мс. АРУ стоит на месте, потом быстро, но плавно откатывается. Именно так я и задумывал.

В результате не важно какой сигнал пришел сильный или умеренный - возврат будет одинаковый точнее квадратичная скорость.

Примерно то же и у меня - разница по времени отката, когда автоматика дала сигнал на него (напомню, время автоматики фиксированное), и после слабого, и после сильного возмущения, отличается не более чем на 50%, на слух это почти незаметно, т. к., собственно время отката меньше, чем то время, через которое автоматика даёт время на откат...

Критику принимаете?

А для чего я тогда файлы выложил?

Ну, а по уму, чтобы понять, какой алгоритм лучше, нужно на одну антенну включать два приёмника, и стереопару писать, как я это всегда и делал...
Игорь 2
Сообщений: 21288
2 декабря 2019 г. в 11:01#190
Диапазон начинает просыпаться...
Время срабатывания 15 мс, откат - через 1 с.

https://yadi.sk/d/0-wrsCrQdc-PSw
ra0ahcra0ahc
Сообщений: 4868
2 декабря 2019 г. в 11:22#191
И в этот момент щелчок заканчивается и ару не успела просадить до конца усиление(у вас именно так - просадила до конца) и теперь плавный (не резкий возврат) потому-что цепь не успела просадить усиление и нам не надо ее оч быстро возвращать.

При плавном возврате потеряем возможную информацию, идущую следом. Повторю - какое-то время после щелчка длиннее 15 мс. АРУ стоит на месте, потом быстро, но плавно откатывается. Именно так я и задумывал.


ага, и я про тоже, по картинкам всё ок, а на слух не очень. По логики у вас всё ок, по другому сейчас не пойдет вообще. Здесь я пытаюсь сказать про тонкий момент, что если немного дернули ару то можно вообще без паузы и плавно вернуть, а если сильно дернули тогда все по полной с паузой и резким всплеском.
Игорь 2
Сообщений: 21288
2 декабря 2019 г. в 11:28#192
Здесь я пытаюсь сказать про тонкий момент, что если немного дернули ару то можно вообще без паузы и плавно вернуть, а если сильно дернули тогда все по полной с паузой и резким всплеском.

Это как у меня с двумя времязадающими цепями. Типа, одна быстрая, другая - медленная. Много раз пробовал, и ровно столько же раз понимал, что мне это не подходит, оставляя только медленную. Сейчас стоит 15 мс, обязательно предусмотрю увеличение до 100.
Ну, а возможностей, конечно же, у Вас больше - творите, выдумывайте, пробуйте...
ra0ahcra0ahc
Сообщений: 4868
2 декабря 2019 г. в 11:40#193
rm5w очень наглядно показывает под что сделано. вот такой эфир хорошо слушать.

Я раньше ваш первый файл еще с ve3 слушал там тоже громкие станции хорошо с вашим ару работали.
Учитывая как я смотрел во время контеста настройки ару на буржуях....там все конечно в спорте стоят с мин задержкой и резким возвращением. Может еще сделаете запись при мин задержке, что б быстрее возвращалось. Ну и с 15мс там тоже проблемы могут возникнуть с нормальными станциями.
Я почему-то у себя полное усиление по пч2 не давал, сильно много шума и ару тяжелее проваливать громкие станции.
ra0ahcra0ahc
Сообщений: 4868
2 декабря 2019 г. в 11:42#194
Забыл спросить, у вас сколько ворота при котором начинает срабатывать ару?
(у меня нормально работает вся система от 4дб ...сейчас 7дб ворота стоят.)
Игорь 2
Сообщений: 21288
2 декабря 2019 г. в 11:44#195
Забыл спросить, у вас сколько ворота при котором начинает срабатывать ару?

3 дБ стоит. Т. е., если сигнал в течение секунды (время, напомню, опционное) хотя бы один раз в интервал от -3 дБ до нуля попал, АРУ не двигается.
Подъём более чем на 15 мс (время опционное) более нуля вызывает мгновенное срабатывание АРУ.
Лимитер +3 дБ, по ушам особо не ездит. Искажений от лимитера при нулевом уровне нет совсем.
Падение ниже -3 дБ (если ни разу за секунду больше не было), вызывает команду разряда времязадающего конденсатора (постоянная времени разряда 1 с).