You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matlab 3Dplot绘制多相位正弦波叠加的幅频时三维图?

刚接触3D绘图确实容易在数据维度上卡壳,我来帮你梳理下原代码的问题,再给出适配3D绘图的调整思路~

原代码的核心问题

你的循环逻辑和数组索引有两处明显问题:

  • 循环嵌套顺序搞反了:先循环时间再循环频率,但索引变量i和i2的更新逻辑会导致数组维度混乱
  • combined(i,i2,i)的索引完全不合理,3D绘图需要的是时间×频率的二维幅值矩阵,而不是三维数组

调整后的代码(适配MATLAB 3D绘图)

我们可以用meshgrid直接生成时间和频率的网格矩阵,避免循环索引的麻烦:

clear; clc;
inc = 100;

% 1. 生成均匀分布的时间、频率向量
t = linspace(0, 2.413E-9, inc);  % 从0到2.413e-9秒,生成inc个点
f = linspace(56E9, 64E9, inc);   % 从56GHz到64GHz,生成inc个点

% 2. 创建时间-频率网格矩阵(3D绘图的x、y轴基础)
[T, F] = meshgrid(t, f);

% 3. 计算角频率和三个正弦波
W = 2*pi*F;
wave1 = 0.5*sin(W.*T + pi/2);    % 原代码0.25*2=0.5,对应π/2相位偏移,这样写更直观
wave2 = 0.5*sin(W.*T);
wave3 = 0.5*sin(W.*T - pi/2);

% 4. 计算叠加后的幅值矩阵
mag = wave1 + wave2 + wave3;

% 5. 绘制3D曲面图
figure;
surf(T, F, mag);  % 也可以用mesh(),风格不同
xlabel('时间 (s)');
ylabel('频率 (Hz)');
zlabel('叠加幅值');
title('不同频率下正弦波叠加幅值随时间的变化');
shading interp;  % 让曲面颜色更平滑

关键思路说明

  1. 网格矩阵的作用:meshgrid会把一维的时间、频率向量转换成二维矩阵,这样每个(T(i,j), F(i,j))对应一个时间-频率组合点,mag(i,j)就是该点的叠加幅值,完美匹配3D绘图的输入要求
  2. 避免循环索引错误:手动循环很容易搞混索引顺序,用向量+矩阵运算的方式更符合MATLAB的风格,代码也更简洁
  3. 相位的直观写法:把原代码中的0.25*2转换成pi/2(因为正弦波相位通常用π的倍数表示),方便理解相位偏移的物理意义

看到你说已经找到解决方案啦,上面的思路也可以作为补充参考,帮你巩固3D绘图的核心逻辑~

内容的提问来源于stack exchange,提问作者John Galt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:02:47