How to implement Minimum mean-squared error (MMSE) equalization?

I have the channel estimation and noise power estimation and I need a matlab implementation of time domain siso channel Equalization.

Theory:

Consider the FIR filter of length $$N+1:$$ $$\hat{s}_{k}=\sum_{m=k-N}^{k} h_{k-m} y_{m}=\sum_{i=0}^{N} h_{i} y_{k-i}$$ We need to find the coefficients $$\left(h_{i}\right)$$ that minimize the MSE: $$E\left(s_{k}-\hat{s}_{k}\right)^{2} \longrightarrow \min$$ To find $$\left(h_{i}\right),$$ we can differentiate the error. More conveniently, start with the orthogonality principle: $$E\left[\left(s_{k}-\hat{s}_{k}\right) y_{k-j}\right]=0, \quad j=0,1, \ldots, N$$ This gives $$\begin{array}{l} \sum_{i=0}^{N} h_{i} E\left[y_{k-i} y_{k-j}\right]=E\left(s_{i} y_{k-j}\right) \\ \sum_{i=0}^{N} h_{i} R_{y}(i-j)=R_{x y}(j) \end{array}$$ In matrix form: $$\left[\begin{array}{cccc} R_{y}(0) & R_{y}(1) & \ldots & R_{y}(N) \\ R_{y}(1) & \ddots & \ddots & \ddots \\ \ddots & \ddots & \ddots & R_{y}(1) \\ R_{y}(N) & \ddots & R_{y}(1) & R_{y}(0) \end{array}\right]\left[\begin{array}{c} h_{0} \\ \vdots \\ \vdots \\ h_{X} \end{array}\right]=\left[\begin{array}{c} R_{x y}(0) \\ \vdots \\ \vdots \\ R_{x y}(N) \end{array}\right]$$ $$R_{v} h=r_{x y} \quad \Rightarrow h=R_{y}^{-1} r_{s y}$$

How can I introduce the noise power estimation in my computations, and fine the delay of the wiener solution ?

Any help would be really appreciated

Here is my own matlab implementation

clear all;
clc;
depth = 50; % solution depth
ntaps = 8;
MQAM = 2;
N = 1e2;
delay=floor(ntaps/2);
s = randi([0 1],1, N);
h = [1 0.5*exp(1i*pi/6)  0.1*exp(-1i*pi/8)]';
smod = qammod(s,MQAM,'gray','InputType','bit');
r = awgn(filter(h, 1,smod),0, 'measured');
A=convmtx(r(1:depth).',ntaps);
R=A'*A;
X=[zeros(1,delay) s(1:depth) zeros(1,ceil(ntaps/2)-1)].';
ro=A'*X;
coeff=(inv(R)*ro);
decision = filter( r(1:depth),1, coeff);
dem = qamdemod(decision,MQAM,'gray','OutputType','bit');
cmp = [dem(1:10)', s(1:10)']


Here cmp is the concatenation of the input signal and dem is the output of the MMSE Equalization :we can see that because of the delay, dem and s don't match !

• What is blocking you, you know the formula? – Dsp guy sam May 1 '20 at 14:47
• Cmp in my code don't match – user47976 May 1 '20 at 15:50
• Looks familiar! Can you provide more details on your input and what isn’t matching? – Dan Boschen May 1 '20 at 22:05
• I've updated the post, cmp contains few values of the mmse Equalized signal and the input signal – user47976 May 1 '20 at 22:34
• I know it is the delay that I am not setting right ... I need to fine tune the delay but how? – user47976 May 3 '20 at 0:13