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之间随机值缩放的窗形”。
修正方法
要实现窗函数与正弦信号的逐元素相乘,需要保证两者维度一致,同时使用逐元素乘法运算符.*:
- 若需要让正弦信号点数与窗函数一致(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);
- 若要保持
t的原长度(101点),则调整窗函数长度匹配信号:
w1 = hann(length(t)); % 生成与t长度一致的汉宁窗 windowed_signal = w1 .* sin(2*pi*5e7*t);
内容的提问来源于stack exchange,提问作者Giridhar Nagamangala
相关产品推荐
相关产品推荐

