如何用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; % 让曲面颜色更平滑
关键思路说明
- 网格矩阵的作用:
meshgrid会把一维的时间、频率向量转换成二维矩阵,这样每个(T(i,j), F(i,j))对应一个时间-频率组合点,mag(i,j)就是该点的叠加幅值,完美匹配3D绘图的输入要求 - 避免循环索引错误:手动循环很容易搞混索引顺序,用向量+矩阵运算的方式更符合MATLAB的风格,代码也更简洁
- 相位的直观写法:把原代码中的
0.25*2转换成pi/2(因为正弦波相位通常用π的倍数表示),方便理解相位偏移的物理意义
看到你说已经找到解决方案啦,上面的思路也可以作为补充参考,帮你巩固3D绘图的核心逻辑~
内容的提问来源于stack exchange,提问作者John Galt
相关产品推荐
相关产品推荐

