Автор Тема: Цифровая АРУ 0...1  (Прочитано 31803 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #30 : Октябрь 11, 2020, 02:52:46 pm »
А что за выброс на графике  Снимок экрана 2020-10-11 в 14.13.12.png?
Да там что угодно может быть. Синус рисуется идеальный и после ару фазы не совпали (на много не совпали) и получатся ступенька. А ее собаку уже ничем не убрать.
Фильтр после ару на 3 кгц - работает.


ару вот




float32_t a;
        if (tim > 0)tim--;
        for (int i = 0; i < FRAME_SIZE; i++) {
            a = (pFirOutTemp[i ] < 0) ? -1.0f * (pFirOutTemp[i ]) : pFirOutTemp[i ];
            nowAgc = 1 / a;
            if (nowAgc < agcLevel) {
                agcLevel = nowAgc;
                tim = 6; //задержка отпускания
            } else {
                if (tim == 0) {
                    agcLevel += 0.02f; //нарастание 
                }
            }

            pFirOutTemp[i ] *= agcLevel;
        }
 
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #31 : Октябрь 11, 2020, 03:04:05 pm »
Выбросы есть длительностью 0.7мСек и ампл 2.5дб
Да и то, мне кажется это артефакты звуковой платы.
« Последнее редактирование: Октябрь 11, 2020, 03:10:37 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #32 : Октябрь 11, 2020, 04:35:46 pm »
Разместил на цкьюхаме  тему эту  lllol lllol lllol
один ответ  lllol lllol про то , что всё очень не понятно.
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #33 : Октябрь 11, 2020, 04:39:20 pm »
Ладно, что ржать то, тема очень узкая и тяжелая, что я хотел ?  cr123 10 человек в принципе понимает о чем речь и лишь немногие хотят хоть что-то обсудить.  lol22
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #34 : Октябрь 11, 2020, 04:46:07 pm »
При такой реализации у вас АРУ будет цепляться за любые "пички"
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #35 : Октябрь 11, 2020, 04:47:05 pm »
При такой реализации у вас АРУ будет цепляться за любые "пички"

Я знаю.
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #36 : Октябрь 11, 2020, 04:51:42 pm »
Цепляться надо, но вот с отпусканием можно поработать. Там всё ару работает к 1. Это выглядит как  интеллектуальное ару, с переменным фронтом отпускания и переменной задержкой
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #37 : Октябрь 11, 2020, 04:53:14 pm »
Вот ару которая у меня в сдр трудилась. Алгоритм сдерт со статей Gerald Youngblood, K5SDR в QEX.

procedure TDSPAGCYB.DataEvent;
var px: PFloat32;
    pf: PFloatArray absolute px;
    j: Integer;
    bf: TBuffer;
    Vpk, Gain, GainStep, val: TFloat32;
    AGCHang,ms1: integer;
begin
  bf:=InputPin.Get;
  if bf <> nil then begin
    if Enabled and (HangTime > 0) then begin
      AGCHang:=Round((1000*bf.Size)/(1.0*HangTime*bf.SampleRate));
      ms1:=(bf.SampleRate+500) div 1000; // samples per 1 msec
      if ms1 > bf.Size then ms1:=bf.Size;
      if ms1 = 0 then ms1:=1;     
      px:=bf_Data(bf);
      if AGCHang < 1 then AGCHang:=1
      else if AGCHang >= MAX_Hang then AGCHang:=MAX_Hang;
      Inc(AGCLoop);
      if AGCLoop >= AGCHang then AGCLoop:=0;
      // Get peak magnitude
      Vpk:=0;
      for j:=bf.Size-1 downto 0 do begin
        val:=Abs(px^);
        if val > Vpk then Vpk:=val;
        Inc(px);
      end;
      if Vpk > 0 then begin
        bf_Write(bf);
        // AGC gain factor with 6 dB headroom
        Gb[AGCLoop]:=NormalLevel/Vpk;
        // Find peak gain reduction (Min)
        Gain:=1e+6;
        for j:=AGCHang-1 downto 0 do begin
          if Gb[j] < Gain then Gain:=Gb[j];
        end;
        // Limit Gain to MaxGain
        if Gain > MaxGain then Gain:=MaxGain;
        // agc
        pf:=bf_Data(bf);
        if Gain < PrevGain then begin
          // AGC Gain is decreasing
          GainStep := (PrevGain - Gain) / ms1;       // 44 Sample ramp = 1 ms attack time
          for j:=0 to ms1-1 do                         // Ramp Gain down over 1 ms period
            pf[j]:=pf[j]*(PrevGain - ((j + 1) * GainStep));
          //for j:=ms1 to bf.Size-1 do                 // Multiply remaining Envelope by Gain
          //  pf[j]:=pf[j] * Gain;
          MulConst_Buff(@pf[ms1],bf.Size-ms1,Gain);
        end else if Gain > PrevGain then begin
          // AGC Gain is increasing
          GainStep := (Gain - PrevGain) / ms1;       // 44 Sample ramp = 1 ms attack time
          for j:=0 to ms1-1 do                         // Ramp Gain down over 1 ms period
            pf[j]:=pf[j]*(PrevGain + ((j + 1) * GainStep));
          //for j:=ms1 to bf.Size-1 do                 // Multiply remaining Envelope by Gain
          //  pf[j]:=pf[j] * Gain;
          MulConst_Buff(@pf[ms1],bf.Size-ms1,Gain);
        end else
          MulConst_Buff(px,bf.Size,Gain);           // Multiply Envelope by AGC gain
        PrevGain:=Gain;                             // Save Gain for next loop
        PropertyChanged(idCurrentGain);
      end;
    end else if MaxGain > 0 then begin
      bf_Write(bf);
      MulConst_Buff(bf_Data(bf),bf.Size,MaxGain);
    end;
    OutputPin.Put(bf);
  end;
end;
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #38 : Октябрь 11, 2020, 05:06:42 pm »
Да тот же алгоритм самый. Мусора многовато. Может для Паскаля это нормально, но С не простит по скорости такое расточительство по циклам. 
Про пиччи я ничего не увидел. Да их надо убирать через среднее значение АРУ за период, а это совсем другая история.
Да да, я знаю, у меня ничего не получится )))

Оффлайн Vlad

  • Hero Member
  • *****
  • Сообщений: 2246
Re: Цифровая АРУ 0...1
« Ответ #39 : Октябрь 11, 2020, 05:36:12 pm »
Разместил на цкьюхаме  тему эту
Если бы там хоть слышали об этой теме - давно бы забросали г... м да еще с ветиляторами. Здесь (на форуме) очень много посетителей оттель, боящихся задать простой вопрос Мэтрам из боязни быть высмеянными. (Посмотрите мой вопрос по ДПФ для поддверждения месным аматорам прописных истин). Там куча просмотров "молчаливым большинством".

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #40 : Октябрь 11, 2020, 05:42:42 pm »
Ага  lllol
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #41 : Октябрь 11, 2020, 05:50:16 pm »
Да тот же алгоритм самый
Тот да не тот :) Посмотрите внимательно как усиление выбирается и для чего буфер длиной равной времени отпускания сделан
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #42 : Октябрь 11, 2020, 06:02:08 pm »
Ага  lllol
Да, ретротема. 8 лет назад когда я еще писал что-то на сикухаме я рассказывал народу в этой теме о QER-фильтрах, доку выкладывал, рассчеты. Наткнулся на глухую стену непонимания и нежелания понимать. Это сейчас все такие умные на кверы перешли, а тогда моя "Стрекоза" была наверное первой конструкцией в рунете с таким фильтром на QER
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #43 : Октябрь 11, 2020, 06:37:50 pm »
Немного запутанно , но в принципе понятно.
Ещё из темы анализа это автонотч и приём телеграфа, но лучше фт8
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #44 : Октябрь 11, 2020, 07:01:14 pm »
Автонотч делается элементарно как LMS невысокого порядка с вычитанием
В любой схеме есть как минимум одна ненужная деталь :)