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

MATLAB R2024b中正弦信号与汉宁窗相乘结果异常求助

问题原因与解决方法

你的问题核心是矩阵维度不匹配导致的错误乘法:

  • w1 = hann(16384) 生成的是一个16384×1的列向量
  • 而sin(2*pi*5e7*t)的长度由t的维度决定:t = 0:1/Fpoints:d,计算得t共有d/(1/Fpoints)+1 = 1e-7/(1e-9)+1 = 101个元素,是一个1×101的行向量

当你执行w1 * sin(...)时,MATLAB会执行矩阵乘法(而非你需要的逐元素相乘),最终得到一个16384×101的矩阵。调用plot函数时,MATLAB会将矩阵的每一列作为一条曲线绘制,每一列的数值其实是w1乘以sin对应位置的单个采样值(范围在±1之间),所以就出现了你看到的“多个被±1之间随机值缩放的窗形”。

修正方法

要实现窗函数与正弦信号的逐元素相乘,需要保证两者维度一致,同时使用逐元素乘法运算符.*:

  1. 若需要让正弦信号点数与窗函数一致(16384点):
Fpoints = 1e9;
% 生成16384个点的时间序列
t = linspace(0, 16383/Fpoints, 16384);
w1 = hann(16384);
sin_signal = sin(2*pi*5e7*t);
% 逐元素相乘得到加窗信号
windowed_signal = w1 .* sin_signal;

figure(3);
plot(windowed_signal);
  1. 若要保持t的原长度(101点),则调整窗函数长度匹配信号:
w1 = hann(length(t)); % 生成与t长度一致的汉宁窗
windowed_signal = w1 .* sin(2*pi*5e7*t);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:28:12