Matlab画星座图

本文通过两个实例展示了如何使用MATLAB进行PSK调制,并绘制相应的星座图。第一个实例采用八进制调制,第二个实例则采用四进制调制并设置了初始相位。每个实例都包括了生成随机消息、调制过程及星座图的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

clear all;
msg = randi([0,7],1,80); % 八进制,80个符号
figure(1);stem(msg);
msg1 = pskmod(msg,8); % psk调制
scatterplot(msg1); % 画星座图
hold on;
rectangle('Position',[-1, -1, 2, 2],'Curvature',[1, 1]);axis equal; % 画圆

  

 2.

clear all;
msg = randi([0,3],1,20); % 4进制,20个符号
figure(1);stem(msg);
msg1 = pskmod(msg,4,pi/4); % 4psk调制  初始相位为 pi/4
scatterplot(msg1); axis([-1.2,1.2,-1.2,1.2]);% 画星座图
hold on;
rectangle('Position',[-1, -1, 2, 2],'Curvature',[1, 1]);axis equal; % 画圆

  

 

转载于:https://www.cnblogs.com/htj10/p/8609291.html

MATLAB 中绘制星座图通常用于可视化数字调制信号,例如 QAM(正交幅度调制)或 PSK(相移键控)信号的分布。可以通过内置函数 `scatterplot` 或 `plot` 来实现星座图的绘制。以下是几种常见的实现方法。 ### 使用 `scatterplot` 函数绘制星座图 `scatterplot` 是专门用于绘制信号星座图的函数,尤其适用于调制信号的可视化。以 16QAM 调制为例: ```matlab % 参数设置 M = 16; % 调制阶数 numSymbols = 1000; % 生成的符号数量 % 生成随机信号 data = randi([0 M-1], numSymbols, 1); % 进行 16QAM 调制 modData = qammod(data, M); % 绘制星座图 scatterplot(modData); title('16QAM 星座图'); xlabel('实部'); ylabel('虚部'); grid on; axis equal; ``` ### 使用 `plot` 函数手动绘制星座图 如果希望更灵活地控制图形样式,可以使用 `plot` 函数结合 `qammod` 或其他调制函数生成的信号点进行绘制: ```matlab % 参数设置 M = 16; numSymbols = 1000; % 生成随机数据并调制 data = randi([0 M-1], numSymbols, 1); modData = qammod(data, M); % 提取实部和虚部 realPart = real(modData); imagPart = imag(modData); % 使用 plot 绘制星座图 figure; plot(realPart, imagPart, 'o'); title('QAM 星座图'); xlabel('实部'); ylabel('虚部'); grid on; axis equal; ``` ### 添加参考圆(如 16QAM 星座图中的同心圆) 对于 16QAM 星座图,可以添加参考圆以帮助识别信号点分布。这些圆的半径通常为 √2、√10 和 3√2: ```matlab % 生成参考圆 t = 0:0.01:2*pi; r1 = sqrt(2); r2 = sqrt(10); r3 = 3*sqrt(2); x1 = r1 * cos(t); y1 = r1 * sin(t); x2 = r2 * cos(t); y2 = r2 * sin(t); x3 = r3 * cos(t); y3 = r3 * sin(t); % 绘制星座图和参考圆 scatterplot(modData); hold on; plot(x1, y1, 'k--'); plot(x2, y2, 'k--'); plot(x3, y3, 'k--'); title('16QAM 星座图(带参考圆)'); xlabel('实部'); ylabel('虚部'); grid on; axis equal; hold off; ``` ### 自定义交互式星座图绘制(鼠标操作) 如果需要交互式绘制星座图,可以结合 MATLAB 的 GUI 功能实现,例如通过鼠标点击添加星座点: ```matlab % 创建图形窗口 fig = figure; ax = axes('Parent', fig); title('绘制星座图'); xlabel('实部'); ylabel('虚部'); grid on; axis([0 10 0 10]); % 初始化数据存储 points = []; % 鼠标点击回调函数 set(fig, 'WindowButtonDownFcn', @(src, event) startDrawing(src, event, ax)); set(fig, 'WindowButtonUpFcn', @(src, event) stopDrawing(src, event, ax)); % 开始绘制 function startDrawing(~, ~, ax) % 获取当前鼠标位置 cp = get(ax, 'CurrentPoint'); x = cp(1, 1); y = cp(1, 2); plot(x, y, 'bo', 'Parent', ax); drawnow; end % 结束绘制 function stopDrawing(~, ~, ax) % 获取当前鼠标位置 cp = get(ax, 'CurrentPoint'); x = cp(1, 1); y = cp(1, 2); plot(x, y, 'ro', 'Parent', ax); drawnow; end ``` ### 总结 MATLAB 提供了多种方法来绘制星座图,从简单的 `scatterplot` 到复杂的交互式绘图。通过调制函数(如 `qammod`)和绘图函数(如 `scatterplot` 或 `plot`)的结合,可以实现对信号分布的直观展示。对于需要进一步分析的应用,还可以添加参考圆或自定义交互功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值