本篇博客记录论文中技术理论涉及的部分,也是论文最主要的部分。
信号模型部分
1. 信号模型的重要性
很重要,是仿真的基础。通信就是数学,公式的正确性需要蒙特卡洛仿真或者其他方式去验证。
MATLAB仿真部分
1. 加性高斯白噪声信道仿真
仿真使用awgn函数。书里找到的。要了解通信工程专业在matlab中常用的函数。
代码如下——锯齿波在经过awgn信道时的情况。
t=0:.1:10;
x=sawtooth(t);
y=awgn(x,10,'measured'); %x是通过awgn信道的信号
plot(t,x,t,y);
legend('原始信号','有噪信号');
仿真图像如下。
2. 作图加入交点和最大值点的标注
(1)交点坐标
A. 方法一:绝对值求交点(缺点是精度需要自取,有些相距较近的图形容易出现多组标注)
%% 求y1与y2的交点
clear,clc;
x = 0:0.1:20;
y1 = 3.*x;
y2 = -x+20;
is = find(abs(y1-y2)<1e-2);
% 因为是交点,所以标注一个就可以
x1_is = x(is);
y1_is = 3*x1_is;
% 标记点方法1
plot(x,y1,x,y2,x1_is,y1_is,'*');
% 标记点方法2——单独标记
% text(x1_is,y1_is,'*','color','k');
% 写入坐标
text(x1_is,y1_is, ['(',num2str(x1_is),',',num2str(y1_is),')'],'color','k');
legend('y1','y2');
B. 方法二:调用fsolve / fzero函数(缺点是需要将函数表达式列入其中,不可以使用变量表达式)
%% 求y1与y2的交点
clear, clc;
x = 0:0.1:20;
y1 = 2.*x;
y2 = -x+20;
yfind = y1-y2;
is = fzero(@(x)2.*x+x-20,6);
% 上一行代码直接解出交点横坐标OK
y1_is = 2*is;
% 标记点方法1
plot(x,y1,x,y2,is,y1_is,'*');
% 标记点方法2——单独标记
% text(is,y1_is,'*','color','k');
% 写入坐标
text(is,y1_is, ['(',num2str(is),',',num2str(y1_is),')'],'color','k');
legend('y1','y2');
(2)最大值点坐标
A. 一维图像的最值(最大值的写法max(B))
%% 找出B函数的最大值并标注坐标
plot(alpha_num, B,'k*-','LineWidth',1.2); hold on;
% 找到最大值的索引B_max,前一个参数~是最大值
[~,B_max] = max(B);
% 标记点
text(alpha_num(B_max),B(B_max),'o','color','r');
% 标记坐标
text(alpha_num(B_max)-0.1,B(B_max)-2e4, ['(',num2str(alpha_num(B_max)),',',num2str(B(B_max)),')'],'color','k');
B. 多维图像的最值(与一维的主要区别在于找最大值的写法max(B(:)))
%% 找出三维图像B函数的最大值点
mesh(tau1,rho1,B);
% 找到多维矩阵的最大值
%(max_val就是最大值;position是指索引,所有元素纵向排列后)
[max_val, B_max] = max(B(:));
% 标记点和坐标
text(tau1(B_max),rho1(B_max),B(B_max),'*','color','k');
text(tau1(B_max),rho1(B_max)-0.1,B(B_max)+5e3, ['(',num2str(tau1(B_max)),',',num2str(rho1(B_max)),',',num2str(B(B_max)),')'],'color','k');