为何向信号添加噪声未达预期效果?附Matlab代码及异常图
问题分析与修正方案
你的代码存在两个核心问题,直接导致了图像混乱:
- 维度不匹配:
x是行向量(1×801),但r是列向量(801×1)。Matlab中旧版本不支持行、列向量的自动广播相加,会触发维度错误;即使新版本支持广播,也会因维度逻辑不符导致绘图异常。 - 变量
f未定义:代码里使用了频率参数f但没有赋值,Matlab会抛出未定义变量错误,或在残留旧值的环境下生成异常频率的正弦信号,最终导致图像混乱。
修正后的代码
% 先显式定义正弦信号的频率,示例设为1Hz f = 1; x = 0:0.005:4; % 直接用size(x)生成和信号同维度的噪声,避免手动计算出错 r = 0.1.*randn(size(x)); y = 2.5 * sin(2 * pi * f * x); plot(x, y); hold on; plot(x, r + y); hold off; % 建议添加,避免后续绘图受当前hold状态影响
额外说明
- 用
size(x)替代手动计算长度,能确保噪声向量和信号向量的维度、长度完全匹配,彻底规避维度问题。 - 必须给
f设置具体数值(比如1、2等),正弦信号才能按预期生成。
内容的提问来源于stack exchange,提问作者erzis
相关产品推荐
相关产品推荐

