【问题标题】:Matlab : What is the BER performance of Constant Modulus Algorithm and issue in filter functionMatlab:恒定模数算法的BER性能是什么以及滤波器功能的问题
【发布时间】:2016-01-05 08:50:59
【问题描述】:

我需要帮助来绘制不同信噪比或 Eb/N0 的 BPSK 调制方案的比特误差曲线或符号误差曲线。该图应显示模拟曲线与理论曲线,但我无法弄清楚当使用恒定模量算法作为均衡器时如何缓解问题:

(1)

 Error using  * 
Inner matrix dimensions must agree.

Error in BER_BPSK_CMA (line 50)
        yy = w'*x;

(2) 我想使用filter 函数而不是conv 来模拟移动平均通道模型chanOut = filter(ht,1,s)。但是,当我使用filter 时,我遇到了错误。如何在这里使用filter 函数?

(3)误码率计算

已解决问题 1 的更新代码。但是,我仍然无法使用 filter 并且不确定 BER 曲线是否正确。 下面是我写的代码:

% Script for computing the BER for BPSK modulation in 3 tap ISI 
% channel 


clear
N  = 10^2; % number of bits or symbols
Eb_N0_dB = [0:15]; % multiple Eb/N0 values
K = 3; %number of users
nTap = 3;
mu = 0.001;
   ht = [0.2 0.9 0.3]; 
   L  = length(ht);
for ii = 1:length(Eb_N0_dB)

   % Transmitter
   ip = rand(1,N)>0.5; % generating 0,1 with equal probability
   s = 2*ip-1; % BPSK modulation 0 -> -1; 1 -> 0 

   % Channel model, multipath channel

chanOut = conv(s,ht);
%   chanOut =  filter(ht,1,s);  %MA 
   n = 1/sqrt(2)*[randn(1,N+length(ht)-1) + j*randn(1,N+length(ht)-1)]; % white gaussian noise, 0dB variance 

   % Noise addition
   y = chanOut + 10^(-Eb_N0_dB(ii)/20)*n; % additive white gaussian noise


   %CMA
  Le =20; %Equalizer length

   e = zeros(N,1);     % error
w = zeros(Le,1);    % equalizer coefficients
w(Le)=1;            % actual filter taps are flipud(w)!  
yd = zeros(N,1);
r = y';
% while(1)
    for i = 1:N-Le,
        x = r(i:Le+i-1);
        %x = r(i:(Le+i-1));
        yy = w'*x;
        yd(i)= yy;
        e(i) = yy^2 - 1;
        mse_signal(ii,i) = mean(e.*e);
        w = w - mu * e(i) * yy * x;

    end

   sb=w'*x;   % estimate symbols (perform equalization)

   % receiver - hard decision decoding
   ipHat = real(sb)>0;

   % counting the errors
   nErr_CMA(ii) = size(find([ip- ipHat]),2);
   % calculate SER




end
simBer_CMA = nErr_CMA/N;

theoryBer = 0.5*erfc(sqrt(10.^(Eb_N0_dB/10))); % theoretical ber

for i=1:length(Eb_N0_dB),
   tmp=10.^(i/10);
   tmp=sqrt(tmp);
  theoryBer(i)=0.5*erfc(tmp);
end

figure
semilogy(theoryBer,'b'),grid;
hold on;



semilogy(Eb_N0_dB,simBer_CMA,'r-','Linewidth',2);

%axis([0 14 10^-5 0.5])
grid on
legend('sim-CMA');
xlabel('Eb/No, dB');
ylabel('Bit Error Rate');
title('Bit error probability curve for BPSK in ISI with CMA equalizer');

【问题讨论】:

    标签: matlab signal-processing equalizer


    【解决方案1】:

    这三行有错误:

    sb=w'*x;   % estimate symbols (perform equalization)
    
    % receiver - hard decision decoding
    ipHat = real(sb)>0;
    

    它们在 while 循环中工作,但您现在正在执行后估计,因此正确的行是:

    sb=conv(w,y);   % estimate symbols (perform equalization)
    
    % receiver - hard decision decoding
    ipHat = real(sb(Le+1:end-1))>0;   % account for the filter delay
    

    输出仍然存在一些问题......但我无法在分析中更进一步。

    【讨论】:

    • 没错!这就是为什么我在均衡器中得到一个样本。但是,我怎样才能得到一个合适的 CMA 曲线而不是平坦的曲线。我尝试增加样本数量 = 10^6,但我仍然保持平坦曲线。这部分你能帮忙吗?
    • 此外,使用卷积而不是线性移动平均滤波器 (FIR) 的原因是什么,因为我读过大多数均衡器都使用 FIR 滤波器。基本上, conv() 我们将估计的权重/系数与接收信号相乘以获得输入信号,但为什么不应该将估计的权重与输入相乘以获得接收信号,然后将其与无噪声信号进行比较检查噪音是否降低?
    • 您正在尝试绘制统计数据……而统计数据往往是偶然的。如果你想找到 10^-15 的 BER,你应该模拟 10^18 个样本,你仍然会在图中看到伪影(你掷骰子多少次才能有 1/6 的概率为一张脸?10 次还不够,100...也许1000)。
    • 要回答您的第二条评论,请尝试评估sbb=filter(w,1,[y zeros(1,19)]),您会看到它与sb=conv(w,y) 具有相同的值。 FIR 的实现与向量卷积非常相似,不同之处在于前者给出了相同数量的输入样本。为了适应您的过滤器延迟,请在输入中附加零。使用 conv 让生活更简单。
    【解决方案2】:
    1. 你的第一个问题很容易解决:将行改为

      x = y(i:(Le+i-1));
      
    2. 您拨打filter 看起来没问题。你得到哪个错误?

    3. 也许this 是一个开始寻找的地方。 或here(图 4 会是你想要的情节类型吗?)

    【讨论】:

    • 感谢您的回答,但我仍然在乘法 y=w'x (2) 中遇到问题(1)的相同错误使用过滤器()时,Matlab 给出错误错误使用+ 矩阵尺寸必须一致。 BER_BPSK_CMA 中的错误(第 27 行)y = chanOut + 10^(-Eb_N0_dB(ii)/20)*n; % 加性高斯白噪声
    • 感谢您提供 BER 资源;这真的很有帮助。但是除非(1)和(2)中的问题得到解决,否则我无法运行代码。感谢您的帮助和时间。
    • (错误现在在一行之后) 我不太确定你的代码是做什么用的。如果你想让y 成为一个标量,你需要做(行向量)*(列向量)。如果你想让y 成为一个矩阵,那么你需要做(列向量)*(行向量)。对于逐点乘法,您需要 (vector A).*(vector B) --查看额外的点 -- 其中 A 和 B 的大小相同。
    • y 将是表示噪声样本的向量(一行 N 列)。 w 表示从 CMA 均衡器获得的权重。使用 y,我正在尝试创建一个均衡器。操作 yy = w'*x;应该给出一个标量。尺寸(w)= 20 乘 1; Size(x) = 1 by 20。我已经提出了包括 BER 计算在内的工作代码。我也附上了图表。我不确定这是否正确。此外,过滤器不起作用。能否请您告诉我哪里出错以及如何获得正确的 BER 曲线。
    • 在过滤器命令 chanOut 之后是一个 1x100 双数组,因此可以正常工作(至少在我的 MatLab 上)。我只是在添加噪音时遇到问题,因为size(chanOut) ~= size(n)。但这很容易解决。
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2012-08-07
    • 1970-01-01
    • 2021-04-17
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多