当前位置: 首页 > news >正文

利用MATLAB的linkaxes函数实现子图频率轴同步缩放

《利用 MATLAB linkaxes 函数实现子图频率轴同步缩放》

一、引言

在工程和科学研究中,常常需要同时展示信号或系统在不同频率下的多种特性,如幅值和相位。MATLAB 作为一款强大的科学计算软件,为我们提供了丰富的绘图功能。在绘制多张子图时,若能实现子图之间特定坐标轴的同步操作,将极大地提升数据观察和分析的效率。linkaxes 函数便是 MATLAB 中用于实现此功能的有效工具,它可以让不同子图的坐标轴在缩放、平移等操作上保持一致。本文将通过一个简单的示例详细介绍如何使用 linkaxes 函数实现子图频率轴的同步缩放。

二、linkaxes 函数简介

linkaxes 函数用于关联多个坐标轴的行为,其基本语法如下:

linkaxes(ax, dim)

其中,ax 是一个包含要关联的坐标轴对象的向量,dim 是指定要关联的坐标轴维度的字符串,常见取值为 'x''y''z',分别对应关联 x 轴、y 轴或 z 轴。当 dim'x' 时,对关联的坐标轴进行 x 轴方向的缩放、平移等操作时,这些坐标轴会同步变化。

三、代码示例及解释

3.1 代码示例

% 清除工作区和命令窗口
clear all;
close all;
clc;

% 生成频率向量
f = logspace(0, 3, 100); % 频率范围从 1Hz 到 1000Hz
w = 2 * pi * f; % 转换为角频率

% 定义传递函数(示例)
H = 1./(1 + 1j * w);

% 计算幅值和相位
magnitude = abs(H);
phase = angle(H) * 180 / pi;

% 创建图形窗口
figure;

% 绘制幅值子图
ax1 = subplot(2, 1, 1);
semilogx(f, 20 * log10(magnitude), 'LineWidth', 1.5);
grid on;
title('Magnitude Plot');
ylabel('Magnitude (dB)');
xlim([min(f), max(f)]);

% 绘制相位子图
ax2 = subplot(2, 1, 2);
semilogx(f, phase, 'LineWidth', 1.5);
grid on;
title('Phase Plot');
xlabel('Frequency (Hz)');
ylabel('Phase (degrees)');
xlim([min(f), max(f)]);

% 关联两个子图的 x 轴
linkaxes([ax1, ax2], 'x');

3.2 代码详细解释

3.2.1 初始化部分
clear all;
close all;
clc;

这三行代码的作用分别是清除工作区的所有变量、关闭所有打开的图形窗口以及清空命令窗口,确保代码运行环境的干净。

3.2.2 生成频率向量
f = logspace(0, 3, 100);
w = 2 * pi * f;

使用 logspace 函数生成从 1 0 0 10^0 100(即 1Hz)到 1 0 3 10^3 103(即 1000Hz)的 100 个对数间隔的频率点,存储在变量 f 中。然后将这些频率点转换为角频率 w,方便后续计算。

3.2.3 定义传递函数并计算幅值和相位
H = 1./(1 + 1j * w);
magnitude = abs(H);
phase = angle(H) * 180 / pi;

定义一个简单的一阶传递函数 H = 1 1 + j ω H = \frac{1}{1 + j\omega} H=1+1,其中 ω \omega ω 为角频率。使用 abs 函数计算传递函数的幅值,使用 angle 函数计算相位,并将相位从弧度转换为度。

3.2.4 创建图形窗口并绘制子图
figure;
ax1 = subplot(2, 1, 1);
semilogx(f, 20 * log10(magnitude), 'LineWidth', 1.5);
grid on;
title('Magnitude Plot');
ylabel('Magnitude (dB)');
xlim([min(f), max(f)]);

ax2 = subplot(2, 1, 2);
semilogx(f, phase, 'LineWidth', 1.5);
grid on;
title('Phase Plot');
xlabel('Frequency (Hz)');
ylabel('Phase (degrees)');
xlim([min(f), max(f)]);

使用 figure 函数创建一个新的图形窗口。通过 subplot(2, 1, 1)subplot(2, 1, 2) 分别创建两个子图,将窗口划分为上下两个区域。在第一个子图中,使用 semilogx 函数绘制对数频率坐标轴的幅值曲线,并设置曲线线宽为 1.5,添加网格、标题和 y 轴标签,同时设置 x 轴的显示范围为频率向量的最小值到最大值。在第二个子图中,同样使用 semilogx 函数绘制相位曲线,并进行类似的图形设置,同时添加 x 轴标签。

3.2.5 关联两个子图的 x
linkaxes([ax1, ax2], 'x');

这行代码将幅值子图和相位子图的 x 轴关联起来。当我们在图形窗口中使用缩放工具对其中一个子图的 x 轴进行缩放操作时,另一个子图的 x 轴会自动同步缩放,方便我们同时观察不同频率下幅值和相位的变化情况。

四、总结

linkaxes 函数为 MATLAB 用户提供了一种便捷的方式来关联多个子图的坐标轴。通过使用该函数,我们可以轻松实现子图频率轴的同步缩放,使得在分析信号或系统的频率特性时更加直观和高效。无论是在教学、科研还是工程应用中,这种同步缩放功能都能帮助我们更好地理解和处理数据。在实际应用中,我们可以根据需要关联更多子图的坐标轴,以满足不同的数据分析需求。

相关文章:

  • DateConverter does not support default String to ‘Date‘ conversion.
  • HARCT 2025 分论坛9:专用设备和机器人系统
  • WebGL 导入 OBJ 文件全解析
  • jenkins-获取当前时间戳
  • 买卖股票的最佳时机II(力扣122)
  • Python使用Flask结合DeepSeek开发
  • 2D 游戏艺术、动画和光照
  • Vue 2 — 配置请求转发
  • 【第5章:深度生成模型— 5.4 深度生成模型前沿全景:从Diffusion到多模态,揭秘AI生成技术的未来】
  • $ npx electron-forge import 一直报权限问题 resource busy or locked,
  • EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS
  • win10右键使用IDEA打开
  • 日志2025.2.14
  • 深入浅出 Python Logging:从基础到进阶日志管理
  • Vue笔记(九)
  • ADC入门准备(九):信号与系统知识回顾
  • JVM学习
  • JPA应用@Formula注解
  • Windows 11 卸载 Edge
  • intellij idea篇
  • 个人主页类网站开发背景/网络舆情监测与研判
  • 搜索引擎网站推广怎么做/推广模式包括哪些模式
  • 做淘宝客网站需要工商营业执照/免费关键词搜索工具
  • 云南网站开发公司推荐/湖南网站设计
  • 怎么让别人看到自己做的网站/网络推广预算方案
  • 如何使用上线了app建设网站/武汉搜索引擎营销