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


相关推荐
软件算法开发4 小时前
基于SIMP算法的材料结构拓扑优化matlab仿真
matlab·simp算法·材料结构·拓扑优化
机器学习之心10 小时前
TCN-LSTM时间卷积长短期记忆神经网络多变量时间序列预测(Matlab完整源码和数据)
神经网络·matlab·lstm·多变量时间序列预测·tcn-lstm·时间卷积长短期记忆神经网络
xy_optics15 小时前
Unet网络的Pytorch实现和matlab实现
网络·pytorch·matlab
xy_optics16 小时前
用matlab搭建一个简单的图像分类网络
网络·matlab·分类
机器学习之心17 小时前
回归预测 | Matlab实现NRBO-Transformer-GRU多变量回归预测
matlab·回归·transformer·多变量回归预测
xy_optics1 天前
用matlab探索卷积神经网络(Convolutional Neural Networks)-3
开发语言·matlab·cnn
weixin_428498491 天前
使用MATIO库写入MATLAB结构体(struct)数据的示例程序
matlab
机器学习之心1 天前
Transformer+BO-SVM多变量时间序列预测(Matlab)
支持向量机·matlab·transformer·贝叶斯优化·多变量时间序列预测
weixin_428498491 天前
将MATLAB神经网络数据转换为C/C++进行推理计算
c语言·神经网络·matlab
QQ__17646198241 天前
Matlab轴承故障信号仿真与故障分析
matlab·信号分析·故障分析·故障仿真