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

如何在同图绘制多函数傅里叶变换及MATLAB代码无图排障

我来帮你逐个解决这两个MATLAB相关的问题:

问题1:如何在同一张图中绘制多个函数的傅里叶变换?

要在同一画布上展示多个函数的傅里叶变换,核心是统一采样参数、对齐频率轴,再用绘图保持功能叠加曲线。这里给你一个可直接复用的示例流程:

  1. 统一采样参数与时间轴
    所有待分析的函数必须使用相同的时间轴和采样频率,这样后续的频率轴才能对齐:
Fs = 100; % 设定采样频率(单位:Hz)
t = 0:1/Fs:2-1/Fs; % 生成2秒的时间轴,步长为采样周期
  1. 定义多个待分析函数
    比如我们选三个典型信号:
f1 = sin(2*pi*3*t); % 3Hz正弦波
f2 = square(2*pi*7*t); % 7Hz方波
f3 = f1 + 0.5*f2; % 混合信号
  1. 计算每个函数的FFT并处理频率轴
    FFT默认结果是按正频率到负频率排列的,用fftshift可以把零频移到中间,方便观察;同时归一化幅度让结果更直观:
% 计算FFT并处理
F1 = fftshift(fft(f1)/length(f1));
F2 = fftshift(fft(f2)/length(f2));
F3 = fftshift(fft(f3)/length(f3));

% 生成匹配的频率轴
freq = fftshift(fftfreq(length(t), 1/Fs));
  1. 叠加绘制并添加标注
    用hold on保持绘图窗口,依次绘制每个变换结果,最后加图例区分:
figure;
plot(freq, abs(F1), 'r-', 'LineWidth', 1.5, 'DisplayName', '3Hz正弦波');
hold on;
plot(freq, abs(F2), 'b--', 'LineWidth', 1.5, 'DisplayName', '7Hz方波');
plot(freq, abs(F3), 'g:', 'LineWidth', 1.5, 'DisplayName', '混合信号');
hold off;

% 美化图像
xlabel('频率 (Hz)');
ylabel('归一化幅度');
title('多个信号的傅里叶变换对比');
legend('Location', 'best');
grid on;

关键注意点:

  • 必须保证所有函数的时间轴完全一致,否则频率轴无法对齐
  • 归一化和fftshift不是必须的,但能让FFT结果的可读性大幅提升
  • 用不同的线型/颜色+图例,能快速区分不同曲线

问题2:MATLAB FFT绘图无图像无报错的问题分析与修复

你的代码里有两个核心问题,导致绘图异常(虽然没报错,但实际画出来的内容要么重叠到看不见,要么完全不符合预期):

问题1:x轴与y轴维度不匹配

你定义的t=0:10是11个元素(从0到10,默认步长1),所以g和g1=fft(g)都是11个元素;但x=-2:0.01:2是401个元素。当执行plot(x, abs(g1))时,MATLAB会自动把abs(g1)扩展成401行的矩阵,画出来的是一堆重叠的细线,视觉上几乎看不到,这就是你觉得“未生成图像”的原因。

问题2:频率轴定义完全错误

直接手动设定x=-2:0.01:2作为频率轴是没有依据的,FFT的频率轴必须根据采样频率和数据长度计算:

  • 你的时间轴步长dt=1,所以采样频率Fs=1/dt=1 Hz
  • 数据长度N=11,正确的频率轴需要用fftfreq生成,再用fftshift把零频移到中间

修复后的完整代码

% 1. 明确时间轴步长(避免歧义)
t = 0:1:10; % 步长为1,共11个采样点
g = -1*(exp(-t)+t-1);
N = length(g);
Fs = 1/(t(2)-t(1)); % 计算采样频率

% 2. 计算FFT并处理:归一化+移位到中心
g1 = fft(g);
g1_shifted = fftshift(g1/N); % 归一化幅度,让结果更直观

% 3. 生成正确的频率轴
freq = fftshift(fftfreq(N, 1/Fs));

% 4. 绘图
plot(freq, abs(g1_shifted), 'LineWidth', 1.5);
xlabel('频率 (Hz)');
ylabel('归一化幅度');
title('g(t)的傅里叶变换');
grid on;

额外优化建议:
如果想要更平滑的FFT结果,可以增加采样点,比如把t改成0:0.01:10,这样数据长度N更大,频率分辨率更高,绘图效果会更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:39:34