这里首先介绍一个网站,可以理解他是一个在线版的matlab,可以运行基本的命令。
Octave onlinehttps://octave-online.net/
- 首先用
函数生成信源
x = randi([0 M-1], 1000, 1); % 随机生成1000个0到M-1之间的整数,作为原始信号
- 用
函数对信源进行调制,输入参数有两个,一个是信源x,一个是阶数M。
s1 = qammod(x, M); % 将原始信号x进行QAM调制
- 我们在星座图中把同幅度的点画在同一个圆里,这里借鉴高中所学的圆的参数方程来绘制。
t = 0:1e-2:2*pi; % 参数t用于绘制圆形
x1 = sqrt(2)*cos(t); % 绘制半径为sqrt(2)的圆形的x坐标
y1 = sqrt(2)*sin(t); % 绘制半径为sqrt(2)的圆形的y坐标
x2 = sqrt(10)*cos(t); % 绘制半径为sqrt(10)的圆形的x坐标
y2 = sqrt(10)*sin(t); % 绘制半径为sqrt(10)的圆形的y坐标
x3 = 3*sqrt(2)*cos(t); % 绘制半径为3*sqrt(2)的圆形的x坐标
y3 = 3*sqrt(2)*sin(t); % 绘制半径为3*sqrt(2)的圆形的y坐标
完整代码如下:
clc; clear; % 清除命令行和工作区变量
M = 16; % QAM调制器的调制阶数
x = randi([0 M-1], 1000, 1); % 随机生成1000个0到M-1之间的整数,作为原始信号
t = 0:1e-2:2*pi; % 参数t用于绘制圆形
x1 = sqrt(2)*cos(t); % 绘制半径为sqrt(2)的圆形的x坐标
y1 = sqrt(2)*sin(t); % 绘制半径为sqrt(2)的圆形的y坐标
x2 = sqrt(10)*cos(t); % 绘制半径为sqrt(10)的圆形的x坐标
y2 = sqrt(10)*sin(t); % 绘制半径为sqrt(10)的圆形的y坐标
x3 = 3*sqrt(2)*cos(t); % 绘制半径为3*sqrt(2)的圆形的x坐标
y3 = 3*sqrt(2)*sin(t); % 绘制半径为3*sqrt(2)的圆形的y坐标
s1 = qammod(x, M); % 将原始信号x进行QAM调制
scatterplot(s1); % 绘制QAM信号的星座图,横纵坐标分别表示信号实部和虚部
axis equal; % 设置横纵坐标比例相等
grid on; % 显示网格线
hold on; % 保持当前图形,并在其上添加新内容
plot(x1, y1); % 在当前图形上绘制半径为sqrt(2)的圆形
hold on; % 保持当前图形,并在其上添加新内容
plot(x2, y2); % 在当前图形上绘制半径为sqrt(10)的圆形
hold on; % 保持当前图形,并在其上添加新内容
plot(x3, y3); % 在当前图形上绘制半径为3*sqrt(2)的圆形
plot(x1, y1); % 再次绘制半径为sqrt(2)的圆形(为了使其覆盖之前绘制的圆形)
hold off; % 关闭“保持”模式,以便后续绘图不会影响当前图形