Трансиверы, передатчики, РПУ > Software Defined Radio (SDR)

Авто нотч

(1/5) > >>

ra0ahc:
Пока я не совсем понимаю как оно работает.


void arm_lms_norm_init_f32   (   arm_lms_norm_instance_f32 *    S ,
uint16_t    numTaps ,
float32_t *    pCoeffs ,
float32_t *    pState ,
float32_t    му ,
uint32_t    размер блока
)      
Параметры
[в]   S   указывает на экземпляр структуры фильтра LMS с плавающей запятой
[в]   numTaps   количество коэффициентов фильтра
[в]   pCoeffs   указывает на буфер коэффициентов
[в]   pState   указывает на буфер состояния
[в]   му   размер шага, который управляет обновлениями коэффициентов фильтра
[в]   размер блока   количество образцов для обработки
Возврат
никто
Детали
pCoeffs указывает на массив коэффициентов фильтра, хранящихся в обратном во времени порядке:
   {b [numTaps-1], b [numTaps-2], b [N-2], ..., b [1], b [0]}
Начальные коэффициенты фильтра служат отправной точкой для адаптивного фильтра. pStateуказывает на массив numTaps+blockSize-1выборок длины , где blockSize- количество входных выборок, обработанных каждым вызовом arm_lms_norm_f32().


void arm_lms_norm_f32   (   arm_lms_norm_instance_f32 *    S ,
const float32_t *    pSrc ,
float32_t *    pRef ,
float32_t *    pOut ,
float32_t *    pErr ,
uint32_t    размер блока
)      
Параметры
[в]   S   указывает на экземпляр структуры нормализованного фильтра LMS с плавающей запятой
[в]   pSrc   указывает на блок входных данных
[в]   pRef   указывает на блок справочных данных
[вне]   pOut   указывает на блок выходных данных
[вне]   pErr   указывает на блок данных об ошибке
[в]   размер блока   количество образцов для обработки

Relayer:

--- Цитата: ra0ahc от Октябрь 11, 2020, 09:16:08 pm ---А что в качестве референса использовать? Шум белый?
--- Конец цитаты ---
Нет никакого референса. Рассматривайте LMS как простой линейный предсказатель невысокого порядка. Даете ему на вход синус плюс чегото там еще - он адаптируется к самому простому сигналу - синусу. Вычитаете - остается все остальное (шум, речь и тп)

Relayer:
Вот код для LMS. Семплрейт 24к. Параметры: Order=25, Delay=20, Leakage=1E-5, AdaptationRate=0.002
Может использоваться как шумодв если FMode = fmDeNoise, но хреново и надо другие параметры. С параметрами которые я написал хорошо работает как автонотч. В случае другого семплрейт параметры возможно придется менять. order так точно можно будет уменьшить

--- Код: ---procedure TDSPLMSFilter.ApplyFilter(bf: TBuffer);
var px: PFloat32;
    i,j,idl,sz,mask,dl: integer;
    sum,sum_sq,df: double;
begin
  dl:=Delay;
  mask:=Length(DelayLine)-1;
  df:=1-Leakage*AdaptationRate;
  bf_Write(bf);
  px:=bf_Data(bf);
  sz:=Length(taps)-1;
  idl:=idelay;
  for j:=1 to bf.Size do begin
    DelayLine[idl]:=px^;
    DelayLineSqr[idl]:=px^*px^;
    sum:=0; sum_sq:=0;
    for i:=0 to sz do begin
      sum:=sum+DelayLine[(idl+i+1+dl) and mask]*taps[i];
      sum_sq:=sum_sq+DelayLineSqr[(idl+i+1+dl) and mask];
    end;
    if FMode = fmDeNoise then begin
      px^:=sum;
      sum:=DelayLine[idl]-sum;
    end else begin
      sum:=DelayLine[idl]-sum;
      px^:=sum;
    end;
    // LMS update
    sum:=sum*AdaptationRate/(sum_sq+1E-10);
    for i:=0 to sz do
      taps[i]:=taps[i]*df+sum*DelayLine[(idl+i+1+dl) and mask];
    //
    Inc(px);
    idl:=(idl-1) and mask;
  end;
  idelay:=idl;
end;

function TDSPLMSFilter.Redesign(SampleRate: integer; var DelayLen: integer): Boolean;
begin
  taps:=nil;
  Result:=False;
  if Order > 0 then begin
    SetLength(taps,Order);
    FillChar(taps[0],Length(taps)*SizeOf(TFloat32),0);
    DelayLen:=Order+Delay+10{Gap};
    SetLength(DelayLineSqr,RoundToPower2(DelayLen)*2);
    FillChar(DelayLineSqr[0],Length(DelayLineSqr)*SizeOf(TFloat32),0);
    Result:=True;
  end;
end;

--- Конец кода ---

Relayer:
Млин, можно как-то запретить форматирование? Этож ппц какой-то - съедает квадратные скобки с индексами. Что за форумный движок такой кривой?!?!?

zenit:

--- Цитата: Relayer от Октябрь 11, 2020, 10:08:02 pm ---Млин, можно как-то запретить форматирование?

--- Конец цитаты ---
Попробуйте вставлять текст как код.

--- Код: ---вот так для примера- смайлики в игноре  :)  ;)  :D
--- Конец кода ---

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии