(51)MATLAB迫零均衡器系统建模与性能仿真

文章目录


前言

使用MATLAB对迫零均衡器系统进行建模仿真,完整的MATLAB设计源代码形式给出设计方法和仿真结果。


一、迫零均衡器性能仿真说明

首先定义信道的冲激响应,对其进行符号间隔采样得到离散信道的冲激响应模型。

其次,为给定信道设计迫零均衡器,找到给定信道冲激响应的均衡器系数。

然后,(1)使用均衡器对接收信号的均衡,(2)计算信道和均衡器的总体响应(即查看的是均衡器对信道的补偿结果)。

最后,给出仿真的结果画图。

设定信道响应长度为L=13,因此需要长度N>L的迫零强制滤波器。仿真中,将迫零滤波器的长度固定为N=14。

下面给出仿真模型的MATLAB源代码。

二、迫零均衡器系统建模与性能仿真代码

1.仿真代码

代码如下:

c 复制代码
%% 系统参数
nSamp = 5;                % 每个符号的采样数
fs = 100;                 % 采样率
Ts = 1/fs;                % 采样间隔
Tsym = nSamp*Ts;          % 符号宽度,也是符号间隔
%% 信道------定义信道的冲激响应
% 1.采样间隔信道响应(连续时间信道模型)
k = 6;                                           % 信道响应使码元波形前后各扩展到第k个码元
t = -k*Tsym:Ts:k*Tsym;                           % 信道的时基定义在[-kTsym,+kTsym]上
h_t = 1./(1+(0.6*t/Tsym).^2);                    % 定义一种信道模型,该信道模型可替换为其他所需模型

sigma = 0.001;                                   % AWGN信道噪声的标准差
noise = sigma*randn(1,length(h_t));              % AWGN信道噪声

h_t = h_t + noise;                               % 信道响应加高斯白噪声

% 2.符号间隔信道响应(离散时间信道模型)
h_k = h_t(1:nSamp:end);
t_k = t(1:nSamp:end);                            % 符号采样时刻
% L = length(t_k);                                 % 信道频率响应长度

figure()
plot(t,h_t,'LineWidth',1.5)                      % 每个采样点时刻的信道响应,采样间隔
grid on
hold on
stem(t_k,h_k,'r','LineWidth',1.5)                % 每个符号最佳采样时刻的信道响应,符号间隔
legend('continuous-time model','discrete-time model')
title('Channel impulse response')
xlabel('Time (s)')
ylabel('Amplitude')
% xlim([-0.3 0.3])
ylim([0 1.1])
%% 迫零均衡器设计
nTaps = 14;                                      % 均衡滤波器所需的抽头数量
delay = 13;                                      % 设定的均衡器延时

% 为给定信道设计迫零均衡器,找到给定信道冲激响应的均衡器系数
% [w,error,k0] = zf_equalizer(h_k,nTaps,delay);      % 使用设定的均衡器延时
[w,error,k0] = zf_equalizer(h_k,nTaps);              % 使用均衡器最优延时

%% 均衡滤波
r_k = h_k;                                       % 以信道响应作为输入测试均衡器
d_k = conv(w,r_k);
h_sys = conv(w,h_k);

% 信道、均衡器和整个系统的频率响应
[h_channel, w1] = freqz(h_k);                    % 信道的频率响应
[h_equalizer, w2] = freqz(w);                    % 均衡器的频率响应
[h_system ,w3] = freqz(h_sys);                   % 整个系统的频率响应

%% 画图
% (1)频率响应
figure(); 
plot(w1/pi,20*log(abs(h_channel)/max(abs(h_channel))),'g','LineWidth',1.5);
hold on;
plot(w2/pi,20*log(abs(h_equalizer)/max(abs(h_equalizer))),'r','LineWidth',1.5); 
plot(w3/pi,20*log(abs(h_system)/max(abs(h_system))),'b','LineWidth',1.5);
grid on
legend('信道频响','迫零均衡器频响','系统整体频响','Location','south');
title('频率响应');
ylabel('幅度(dB)');
xlabel('归一化频率(x \pi rad/sample)');

% (2)均衡器输入与输出
figure();                         % 绘制均衡器输入和输出(时域响应)
subplot(2,1,1);
% stem(0:1:length(r_k)-1,r_k); 
stem(r_k,'LineWidth',1.5); 
grid on;
title(['均衡器输入(序列长度L =',num2str(length(r_k)),')']);
xlabel('Samples');
ylabel('Amplitude');
subplot(2,1,2);
% stem(0:1:length(d_k)-1,d_k);
stem(d_k,'LineWidth',1.5);
grid on;
title(['均衡器输出(均衡器抽头数nTaps=',num2str(nTaps), ...
       ',均衡器输出序列长度=nTaps+L-1=',num2str(nTaps+length(r_k)-1),')']);
xlabel('Samples');
ylabel('Amplitude');

2.代码说明

代码中以下两行的输入数值和计算结果的数值完全相等:

d_k = conv(w,r_k);

h_sys = conv(w,h_k);

虽然这两行代码计算结果数值上完全相同,但其所代表的意义却完全不同:

第一行表示均衡器对接收信号的均衡;
第二行表示信道和均衡器的总体响应,用于查看并评估均衡器对信道的补偿效果。

3.迫零均衡器zf_equalizer的MATLAB源码

上述仿真中使用了迫零均衡器zf_equalizer的MATLAB,其源码见:
(49)MATLAB实现迫零均衡器原理与代码

三、仿真结果

1.信道的冲击响应

2.频率响应

3.迫零均衡器的输入和输出


相关推荐
机器学习之心11 小时前
分类预测 | WOA-LightGBM基于鲸鱼算法优化轻量级梯度提升机算法数据分类预测Matlab程序
算法·matlab·分类·woa-lightgbm·轻量级梯度提升机算法
逆风远航11 小时前
MATLAB生态环境数据处理与分析
开发语言·matlab·生态学·生态环境·环境科学
梦里水乡85711 小时前
MATLAB车道检测与跟踪
人工智能·计算机视觉·matlab
阿W呀12 小时前
【Matlab】基于Prandtl−Ishlinskii的迟滞模型-RLS辨识
开发语言·matlab
梦里水乡8571 天前
MATLAB+opencv人脸疲劳检测
开发语言·opencv·matlab
机器学习之心1 天前
SCI一区级 | Matlab实现SSA-TCN-LSTM-Attention多变量时间序列预测
人工智能·matlab·lstm·attention·多变量时间序列预测·ssa-tcn-lstm
薰衣草之夏 龙2 天前
基于人脸识别系统设计与仿真-基于matlab
开发语言·matlab
真的是我22 天前
基于神经网络的农业病虫害损失预测
人工智能·深度学习·神经网络·matlab
Q8343158192 天前
JL5109C 9口交换机芯片集成MAC RMII/MII百兆以太网交换机芯片
arm开发·网络协议·web安全·网络安全·fpga开发·信息与通信·信号处理