(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.迫零均衡器的输入和输出


相关推荐
机器学习之心1 小时前
MATLAB基于PSO-GA的铁路工程施工进度计划多目标优化研究
matlab·多目标优化
kaikaile19953 小时前
34节点配电网牛顿-拉夫逊潮流计算 + 分布式电源(DG)多场景分析的 MATLAB
开发语言·分布式·matlab
Altair澳汰尔5 小时前
成功案例丨平衡性能与安全的仿真:Altair助力 STARD 优化赛车空间车架设计
大数据·人工智能·仿真·fea·有限元分析·cae
gihigo19988 小时前
MATLAB数值分析方程求解方法详解
算法·机器学习·matlab
轻微的风格艾丝凡9 小时前
Simulink 在汽车工业中的深度应用与技术实践
matlab·汽车·simulink
ghie909013 小时前
MATLAB/Simulink水箱水位控制系统实现
开发语言·算法·matlab
hoiii18715 小时前
基于交替方向乘子法(ADMM)的RPCA MATLAB实现
人工智能·算法·matlab
fengfuyao98515 小时前
MATLAB的加权K-means(Warp-KMeans)聚类算法
算法·matlab·kmeans
fie888916 小时前
基于循环谱分析的盲源分离信号处理MATLAB
开发语言·matlab·信号处理
yong999017 小时前
MATLAB倍频转换效率分析与最佳匹配角模拟
开发语言·前端·matlab