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


相关推荐
guygg8810 小时前
人行走作用下板的振动响应 MATLAB 仿真
开发语言·matlab
ji1985944316 小时前
MATLAB 求散点曲线斜率
开发语言·算法·matlab
kaikaile199516 小时前
MATLAB 实现:Koch & Zhao 图像水印算法(DCT域)
开发语言·算法·matlab
阿里matlab建模师18 小时前
基于matlab时域频域处理的语音信号变声处理系统设计与算法原理(论文+程序源码+GUI图形用户界面)——变声算法
算法·matlab·语音识别
简简单单做算法18 小时前
基于OFDM的车联网雷达通信一体化感知算法matlab性能仿真
matlab·ofdm·车联网·雷达通信一体化
rit843249918 小时前
MATLAB近红外光谱预处理:平滑与求导(MSV方法)
数据结构·算法·matlab
神仙别闹18 小时前
基于 MATLAB SVM 方法对数字进行分类训练和预测
支持向量机·matlab·分类
nwsuaf_huasir19 小时前
matlab绘制尺寸和字体合适的图片插入到latex的方法
android·开发语言·matlab
network_tester21 小时前
TSN交换机研发测试怎么做?一套可落地的“信而泰仪器 + 康芯源服务”方案解读
网络·网络协议·tcp/ip·车载系统·汽车·信息与通信·信号处理
Code-keys2 天前
ARM NEON SIMD 编程实战:从音频信号处理到AI算子研发实战
arm开发·音视频·信号处理