我曾问过关于恒定模量算法的概念性问题。我正在实现算法的简单步骤,因为我没有cma()
内置模块。
我正在考虑一个有限脉冲响应 (FIR) 系统,其真实系数为. 该算法简要介绍:
:由输入信号驱动的 FIR 滤波器的输出,是一个白色高斯信号,通过命令驱动 FIR 过程
s=round(rand(1,N))*2-1;
u = filter(h,1,s);
我们收到一个噪声信号,它是被 AWGN 破坏的系统的输出。设噪声破坏信号为
构建均衡器
要通过梯度下降最小化的成本函数是
权重更新方程由下式给出
哪里出错,
操作员是转置和假设实信号,没有任何虚数和复数部分。
下面是代码。该算法在权重估计方面没有给出正确的结果。
问题 1:算法返回的估计权重与信噪比的均方误差(以 DB 为单位)的图表给出了相反的趋势,即 MSE 不是随着 SNR 的增加而降低,而是当我重新- 运行程序!!下面是我的意思的图像。第一个数字是正确的,但是使用相同的代码,我再次运行它并得到第二个数字。为什么会这样?我该如何预防?
我不确定这是否是由于变量的初始化,滤波器阶数 = 延迟数 = 2。对于以下形式的 FIR 滤波器,有些东西对我来说并不直截了当:,什么是滤波器阶数、平滑长度和未知权重的数量?有人可以帮忙吗?
clear all
clc
N = 256;
h = [1 0.45 -0.2];
R2 = 2;
mu = 1.0000e-009;
noisedB =0;
L=2; % smoothing length L+1
ChL=1; % length of the channel= ChL+1
EqD=round((L+ChL)/2); % channel equalization delay
i=sqrt(-1);
Ch=[1 0.45 -0.2]; %Channel
%Ch=[0.8+i*0.1 .9-i*0.2]; %complex channel
Ch=Ch/norm(Ch);% normalize
skip =1
for l=1:6
i = 1;
TxS=round(rand(1,N))*2-1; % QPSK symbols are transmitted symbols
%TxS=TxS+sqrt(-1)*(round(rand(1,N))*2-1);
x=filter(Ch,1,TxS); %channel distortion
n=randn(1,N); % additive white gaussian noise
n=n/norm(n)*10^(-noisedB/20)*norm(x); % scale noise power
x1=x+n; % received noisy signal
%estimation using CMA
K=N-L; %% Discard initial samples for avoiding 0's and negative
X=zeros(L+1,K); %each vector
for j=1:K
X(:,j)=x1(j+L:-1:j).'; %y_n = w^T x_n
end
e=zeros(1,K);
w=zeros(L+1,1);
w(EqD)=1; % initial condition
while i<=K
e(i)=abs(w.'*X(:,i))^2-R2; % initial error
w=w-mu*2*e(i)*X(:,i)*X(:,i)'*w; % update equalizer co-efficients
cma_mse_h(l,i) = sum((w'-h).^2)/3;
est_w(i,:) = w;
w(EqD)= 1;
i = i+1;
end
noisedB = noisedB + 5;
end
for ii = 1:6
Error(ii) = 10*log10(mean(cma_mse_h(ii,:)));
end
plot([0:5:25], Error(1:6));
grid on;
xlabel ('SNR(dB)')
ylabel('MSE_h')
第二个问题:真正的 FIR 信道系数不是虚数,只有实数部分。但是,如果我使用实数和复数表示,估计的权重将同时具有实数和虚数。在这种情况下,如何正确计算权重及其 MSE?