Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Показано с 1 по 8 из 8

Тема: Цифровая АРУ

  1. #1

    Регистрация
    21.06.2006
    Адрес
    Екатеринбург
    Сообщений
    2,607
    Позывной
    RX9CIM

    Цифровая АРУ

    Здравствуйте! Необходим алгоритм цифровой АРУ для радиоприемника http://www.cqham.ru/forum/showthread.php?t=21964
    Смотрел книжку Лайонса, реализовать приведенные в ней алгоритмы не получается реализовать. Может у кого-то есть пример практической реализации? Исходники программ приветствуются.


  2. #2
    SK Аватар для ut1wpr
    Регистрация
    19.10.2003
    Адрес
    Украина, Львов
    Сообщений
    2,669
    Позывной
    ut1wpr
    Цитата Сообщение от rx9cim Посмотреть сообщение
    Здравствуйте! Необходим алгоритм цифровой АРУ для радиоприемника http://www.cqham.ru/forum/showthread.php?t=21964
    Смотрел книжку Лайонса, реализовать приведенные в ней алгоритмы не получается реализовать. Может у кого-то есть пример практической реализации? Исходники программ приветствуются.
    Ссылку на книжку. На чем попытка реализации?
    73!
    ---
    Vic/ut1wpr

  3. #3

  4. #4
    Заблокирован навсегда
    Регистрация
    10.12.2005
    Адрес
    Одесса
    Сообщений
    2,331
    Записей в дневнике
    1
    Позывной
    UR5FFR
    исходники можно подсмотреть в поверсдр или в QEX цикле статей Янглблуда - ссылку я неоднократно давал

  5. #5

    Регистрация
    21.06.2006
    Адрес
    Екатеринбург
    Сообщений
    2,607
    Позывной
    RX9CIM
    Почитал Янглблуда. Возник в. опрос- у него длина блока на которым идет колдовство равна 2048 слов. При этом он корректирует весь блок. Как поступить в моем случае- какуой длины брать блок? Что нужно исправить при этом в алгоритме? Программа ару должна запускаться только по заполнееию (подготовке) очередного блока данных?

  6. #6
    Заблокирован навсегда
    Регистрация
    10.12.2005
    Адрес
    Одесса
    Сообщений
    2,331
    Записей в дневнике
    1
    Позывной
    UR5FFR
    все пересчитывается во время через частоту дискретизации. у себя именно так и делал

  7. #7

    Регистрация
    21.06.2006
    Адрес
    Екатеринбург
    Сообщений
    2,607
    Позывной
    RX9CIM
    Можно подробнее

  8. #8

    Регистрация
    21.06.2006
    Адрес
    Екатеринбург
    Сообщений
    2,607
    Позывной
    RX9CIM
    Покурил Янгблуда и привожу свой исходник. Можно с параметрами и исходником покапаться. В таком виде как приведено работает. Программа работает на частоте дискретизации - запускается каждый сэмпл. В программе идет анализ, заполнен ли буфер. Если да, то пересчитываются параметры, если нет, то считаю со старыми.


    #include <math.h>
    #include "global.h"
    #define uint unsigned int
    #define BLKSIZE 1024//&#253;&#234;&#226;&# 232;&#226;&#224;&#23 5;&#229;&#237;&#242; &#237;&#238; 46&#236;&#241;
    #define REFERENCE 50000//4194304//&#239;&#238;&#235;&# 238;&#226;&#232;&#23 7;&#224; &#248;&#234;&#224;&# 235;&#251; &#192;&#214;&#207 ;
    //#define AGCHang 7
    #define MaxGain 1
    #define RAMP_TIME 22//22 &#241;&#253;&#236;&# 239;&#235;&#224; = 1&#236;&#241; &#239;&#240;&#232 ; Fs=22050
    extern struct common_buf cs4221_buffer;
    extern struct common_options options;


    int agc_control (int new_sample)
    {
    static int Mag[BLKSIZE];
    static volatile int AGCloop,Vpk=0,tmp,i= 0, Yout,AGCHang;
    static volatile float Gain=0, PrevGain=0, GainStep=0, G[24],Gain_coef[RAMP_TIME],buf;


    if (options.agc_level== 0) AGCHang=3;
    if (options.agc_level== 1) AGCHang=5;
    if (options.agc_level== 2) AGCHang=7;
    else;
    Mag[i]=new_sample;
    tmp=abs(Mag[i]);
    if(Vpk<tmp)Vpk=tmp;//&#241;&#234;&#224;&# 237;&#232;&#240;&#24 3;&#254; &#236;&#224;&#234;&# 241;&#232;&#236;&#24 3;&#236;
    i++;
    while (i==BLKSIZE)
    {
    i=0;
    if (AGCloop<(AGCHang-1)) AGCloop++;
    else AGCloop=0;

    if (Vpk!=0)
    {
    G[AGCloop]=((float)REFERENCE/(float)(Vpk));
    Vpk=0;
    Gain=MaxGain;
    for (int n=0;n<(AGCHang);n++)//scan minimum
    {
    buf=G[n];
    if (Gain>buf) Gain=buf;
    }
    }
    if (Gain>MaxGain) Gain=MaxGain;


    if (Gain<PrevGain)
    {
    GainStep=(PrevGain-Gain)/(float)RAMP_TIME;//22&#241;&#253;&#236; &#239;&#235;&#224;=1 &#236;&#241;
    for (int n=0;n<RAMP_TIME;n++)
    {Gain_coef[n]=PrevGain-(n+1)*GainStep;}
    }
    if (Gain>PrevGain)
    {
    GainStep=(Gain-PrevGain)/(float)RAMP_TIME;//22&#241;&#253;&#236; &#239;&#235;&#224;=1 &#236;&#241;
    for (int n=0;n<RAMP_TIME;n++)
    {Gain_coef[n]=PrevGain+(n+1)*Gain Step;}
    }
    else
    for (int n=0;n<RAMP_TIME;n++)
    {Gain_coef[n]=Gain;}
    if (Gain>MaxGain) Gain=MaxGain;
    PrevGain=Gain;
    }
    if (i<RAMP_TIME) Yout=(int)(Gain_coef[i]*Mag[i]);
    else Yout=(int)(Mag[i]*Gain);
    return (int)(Yout);
    }

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Эффективная АРУ
    от RV3SET в разделе Технический кабинет
    Ответов: 344
    Последнее сообщение: 11.05.2018, 16:31
  2. УНЧ с АРУ
    от RX3APL в разделе Технический кабинет
    Ответов: 56
    Последнее сообщение: 04.04.2018, 21:38
  3. АРУ по ВЧ
    от SoundMaster в разделе Технический кабинет
    Ответов: 4
    Последнее сообщение: 25.06.2009, 19:10
  4. АРУ в УНЧ ?
    от gri в разделе Для начинающих
    Ответов: 66
    Последнее сообщение: 26.12.2008, 22:03
  5. Вариант АРУ
    от UN010T в разделе Технический кабинет
    Ответов: 4
    Последнее сообщение: 31.08.2006, 09:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •