Member 12584817 Ответов: 0

Алгоритм LMS (наименьшего среднего квадрата)


Мы разрабатываем алгоритм LMS в vhdl. Мы хотим знать, как приходит каждое значение X(n). Нам сказали, что X (n) - это комплексное число, которое является входом в эквалайзер, который приходит после прохождения через канал, страдающий от шума, потери пути и т. д.Итак, вопрос в том, получим ли мы значение X(1) после первой задержки, X(2) после 2-й задержки и так далее.

Но при проектировании через vhdl, как мы можем спроектировать канал,который будет содержать шум, задержку, путевые потери и т. д. (Например, канал затухания Рэлея).

Наш старший разработал алгоритм LMS с помощью аппаратной косимуляции, где она смоделировала канал с использованием канала затухания Рэлея. Но мы не уверены, что такой дизайн может быть выполнен в vhdl.Таким образом, мы не можем найти значение X(n) [входной сигнал] и d(n) [желаемый сигнал], с помощью которого мы можем смоделировать нашу программу vhdl.

Мы разработали алгоритм, но мы не знаем, какое значение мы должны принять для x(0), x(1),.... x(n) или d (n)...

Мы взяли четыре значения x (n) и использовали эти значения итеративно..Является ли процесс правильным(поскольку вычисления включают комплексные числа, мы разбили комплексную и вещественную части и вычислили их по отдельности)...Другой вопрос, что d(n) - это всего лишь один сигнал, однако x (n) - это так много...почему это?....

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.std_logic_signed.all;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity lms2 is
    Port (wr9,wi9,xr,xi : in STD_LOGIC_VECTOR (12 downto 0);
           --u : in integer;
         
           yr,yi,er,ei,wr8,wi8,zzz,sum1 : out STD_LOGIC_VECTOR (12 downto 0));
end lms2;

architecture Behavioral of lms2 is
signal a,b :real;
signal yr11, yi11, yr22, yi22 : real;

--variable r,s : real range 0.0 to 15.0;

begin

process(wr9,wi9,xr,xi)--process also runs without the parameters,but it gives problems during simulation
--process(u,xr,xi)
variable wr : std_logic_vector(12 downto 0);
variable wi : std_logic_vector(12 downto 0);

--variable wr : std_logic_vector(4 downto 0) :="00010";
--variable wi : std_logic_vector(4 downto 0) :="00011";
--variable wr : std_logic_vector(4 downto 0) :=wr9;
--variable wi : std_logic_vector(4 downto 0) :=wi9;
variable xr1_1 : real :=0.707;
variable xi1_1 : real :=0.701;

variable xr1_2 : real :=0.707;
variable xi1_2 : real :=0.701;

variable xr_0 : real :=0.707;
variable xi_0 : real :=0.701;

variable xr_1 : real :=0.707;
variable xi_1 : real :=0.701;

variable xr_2 : real :=0.707;
variable xi_2 : real :=0.701;

variable xr_3 : real :=0.707;
variable xi_3 : real :=0.701;

variable dr1 : real :=0.807;
variable di1 : real :=0.801;
variable yr1_1: real;
variable yi1_1 : real;
variable yr1_2 : real;
variable yi1_2 : real;

variable er1_1 : real;
variable ei1_1 : real;
variable er1_2 : real;
variable ei1_2 : real;

variable wr1_1 : real := 0.0;
variable wi1_1 : real := 0.0;

variable wr1_2 : real := 0.0;
variable wi1_2 : real := 0.0;

variable u   : real :=0.2;
variable k : integer :=0;

--variable f : real := 3.2;
--variable g : real := 2.6;
--variable h : real;
--variable hh : real;


begin

--h := f+g;
--hh := f*g;
--a <= h;
--b <=hh;

--process(xr,xi,u)
--bi <= to_integer(unsigned(k)) ;
--bj <= to_integer(unsigned(l)) ;
--bk <= bi*bj;





for z in 1 to 170 loop
if (k=0)then
xr1_1 := xr_0;
xi1_1 := xi_0;
xr1_2 := xr_3;
xr1_2 := xi_3;

elsif (k=1) then
xr1_1 := xr_1;
xi1_1 := xi_1;
xr1_2 := xr_0;
xr1_2 := xi_0;

elsif (k=2) then
xr1_1 := xr_2;
xi1_1 := xi_2;
xr1_2 := xr_1;
xr1_2 := xi_1;

elsif (k=3) then
xr1_1 := xr_3;
xi1_1 := xi_3;
xr1_2 := xr_2;
xr1_2 := xi_2;
end if;
k := k+1;
if(k=4) then
k := 0;
end if;
yr1_1 := wr1_1*xr1_1-wi1_1*xi1_1;
yi1_1 := wr1_1*xi1_1+wi1_1*xr1_1;
yr1_2 := wr1_2*xr1_2-wi1_2*xi1_2;
yi1_2 := wr1_2*xi1_2+wi1_2*xr1_2;

er1_1 := (wr1_1*xr1_1)-(wi1_1*xi1_1)-dr1;
ei1_1 := (wr1_1*xi1_1)+(wi1_1*xr1_1)-di1;
er1_2 := (wr1_2*xr1_2)-(wi1_2*xi1_2)-dr1;
ei1_2 := (wr1_2*xi1_2)+(wi1_2*xr1_2)-di1;

wr1_1 := u*(xr1_1*er1_1-xi1_1*ei1_1)+wr1_1;
wi1_1 := u*(xr1_1*ei1_1+xi1_1*er1_1)+wi1_1;
wr1_2 := u*(xr1_2*er1_2-xi1_2*ei1_2)+wr1_2;
wi1_2 := u*(xr1_2*ei1_2+xi1_2*er1_2)+wi1_2;



end loop;

yr11 <= yr1_1;
yi11 <= yi1_1;
yr22 <= yr1_2;
yi22 <= yi1_2;

end process;


end Behavioral;


Что я уже пробовал:

Мы попытались написать код алгоритмов LMS с помощью трех основных уравнений, связанных с LMS algo. Но мы не уверены, какое значение X(n) и d (n) следует использовать для моделирования.

Member 12584817

Мой главный вопрос заключается в том, какие значения x(n) и d(n) мы должны использовать для моделирования?

0 Ответов