Алгоритм 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) мы должны использовать для моделирования?