(57)MATLAB使用迫零均衡器和MMSE均衡器的BPSK调制系统仿真
文章目录
- 前言
- 一、仿真测试模型
- 二、仿真代码
- 三、仿真结果
- 四、迫零均衡器和MMSE均衡器的实现
- 1.均衡器的MATLAB实现
- 2.均衡器的性能测试
- 总结
前言
本文给出仿真模型与MATLAB代码,分别使用具有ISI的三个不同传输特性的信道,仿真测试了使用迫零均衡器和MMSE均衡器的基带BPSK传输系统的性能,绘制出Eb/N0-SER性能曲线。
一、仿真测试模型
在设计和测试了迫零均衡器和MMSE线性均衡器之后,接下来在通信链路上测试它们的性能。线性均衡器的性能完全取决于通信发生的信道的特性。本文基于上一篇文章介绍的三个不同信道进行均衡器性能测试。
仿真测试模型如下:
在该仿真模型中,一串随机信源数据经过BPSK调制后,分别通过所设计的ISI离散信道,同时,传输的数据还叠加了加性白高斯噪声(由给定的Eb/N0值决定)。在接收端,接收到的数据分别通过延迟优化的迫零均衡器和MMSE均衡器,在两条不同的路径上独立处理。均衡器的输出通过阈值检测器,给出传输符号的估计。为了对比,还增加了一条没有均衡器的解调路径。最终,检测到的符号与原始数据序列进行对比,计算误码率。仿真在不同Eb/N0值下进行,并将结果绘制成性能曲线。
下面给出MATLAB代码。
二、仿真代码
代码如下:
%---------Input Fields------------------------
N = 1e7; % 仿真发送的符号数
EbN0_dB = 0:2:30;
% EbN0_dB = 0:2:12;
M = 2; % 调制阶数
h_c = [0.04 -0.05 0.07 -0.21 -0.5 0.72 0.36 0.21 0.03 0.07]; % 信道A
% h_c = [0.407 0.815 0.407]; % 信道B
% h_c = [0.227 0.460 0.688 0.460 0.227]; % 信道C
% h_c = [0.0102 0.0227 0.0460 0.688 0.0460 0.0227 0.0102]; % 信道D,弱ISI
nTaps = 31; % 均衡滤波器的抽头数
snr = EbN0_dB - 10*log10(0.5); % 0.5是因为实信号
[~,Imax] = max(h_c); % 取信道响应的最大值作为判决值
SER_zf = zeros(length(EbN0_dB),1);
SER_mmse = zeros(length(EbN0_dB),1);
SER_noeq = zeros(length(EbN0_dB),1);
%-----------------Transmitter---------------------
d = randi([0,1],1,N); % 生成均匀分布的随机信源符号
ref = cos(((M:-1:1)-1)/M*2*pi); % BPSK星座,[-1, 1]
s = ref(d+1); % BPSK调制
%----------------Channel---------------------
x = conv(s,h_c); % ISI信道作用于调制符号
%%
for i=1:length(EbN0_dB)
%----------------Channel---------------------
r = awgn(x,snr(i),'measured');
%---------------Receiver--------------------
%(1)不使用信道均衡
y_noeq = r(Imax:Imax+length(d)-1);
dcap_noeq = (y_noeq >= 0); % 判决,判决结果是d帽
SER_noeq(i) = sum((d~=dcap_noeq))/N; % 计算误符号率
%(2)延迟优化MMSE均衡器
[h_mmse,MSE,optDelay] = mmse_equalizer(h_c,EbN0_dB(i),nTaps); % 设计MMSE均衡器
y_mmse = conv(h_mmse,r); % 对接收信号进行MMSE均衡
y_mmse = y_mmse(optDelay+1:optDelay+N); % 考虑均衡延时
dcap_mmse = (y_mmse >= 0); % 判决
SER_mmse(i) = sum((d~=dcap_mmse))/N; % 计算误符号率
%(3)延迟优化迫零均衡器
[h_zf,error,optDelay] = zf_equalizer(h_c,nTaps); % 设计迫零均衡器
y_zf = conv(h_zf,r); % 对接收信号进行迫零均衡
y_zf = y_zf(optDelay+1:optDelay+N); % 考虑均衡延时
dcap_zf = (y_zf >= 0); % 判决
SER_zf(i) = sum((d~=dcap_zf))/N; % 计算误符号率
end
%(4)BPSK的误符号率理论值
EbN0 = 10.^(EbN0_dB/10);
SER_theoretical = 0.5*erfc(sqrt(EbN0));
三、仿真结果
仿真结果如下:
信道A:
信道B:
信道C:
可见,两种均衡器的性能在信道A中最佳,信道A具有典型的理想电话信道的响应(信道响应在整个频带内逐渐变化,没有频谱零点)。对于频谱特性最差的信道C,MMSE均衡器的性能优于ZF均衡器。信道B的MMSE均衡器性能次佳。信道B仍然存在频谱零点,但不像信道C那样严重。迫零均衡器在信道B和信道C上的性能最差。这是因为迫零均衡器在计算抽头权重时,只考虑消除码间串扰,而忽略了信道噪声。
四、迫零均衡器和MMSE均衡器的实现
1.均衡器的MATLAB实现
迫零均衡器和MMSE均衡器的实现见:
(49)MATLAB实现迫零均衡器原理与代码
(53)MATLAB实现MMSE均衡器原理与代码
2.均衡器的性能测试
迫零均衡器和MMSE均衡器的性能仿真见:
(51)MATLAB迫零均衡器系统建模与性能仿真
(55)MMSE均衡器系统MATLAB建模与性能仿真
总结
线性均衡器在表现良好的信道上能提供良好的性能,这些信道不表现出频谱零点。另一方面,对于表现出频谱零点的信道,它们不足以完全消除码间串扰,这往往是实际情况。决策反馈均衡器为这个问题提供了一个有效的解决方案,这将在后续文章中给出介绍和仿真。