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

Matlab R2015b中给定双信号计算SNR仅显示噪声图问题求助

问题原因
  • 绘图内容被覆盖:Matlab默认每次调用plot()命令时,会清空当前坐标轴内的所有已有绘图内容。你先执行plot(signal_1)绘制正弦信号,紧接着执行plot(noise_1)时会直接覆盖前一次绘制的信号曲线,因此最终窗口仅显示噪声图像。
  • snr函数版本不兼容:Matlab R2015b自带信号处理工具箱中的snr()函数,不支持snr(目标信号, 噪声序列)的双输入传参格式,该调用语法是R2017b及后续版本才新增的特性。在R2015b中运行这行代码会触发参数不匹配的运行错误,代码执行中断后自然无法输出以分贝为单位的SNR计算结果。
  • 额外风险:你使用length作为自定义变量名存在隐患,length是Matlab内置的计算序列长度的函数,同名自定义变量容易引发非预期的运行错误。
修正方案

以下修正代码完全适配Matlab R2015b版本,运行后可同时显示信号与噪声曲线,同时在命令行窗口输出dB单位的SNR计算结果:

% 替换原变量名length,避免与内置函数冲突
sample_axis = linspace(-2*pi, 2*pi);
signal_1 = sin(sample_axis);
noise_1 = 0.5*rand(size(signal_1));

% 开启绘图保留模式,避免曲线被覆盖
figure
plot(signal_1, 'b', 'LineWidth', 1.2)
hold on
plot(noise_1, 'r', 'LineWidth', 1)
legend('原始正弦信号', '加性随机噪声')
xlabel('采样点序号')
ylabel('幅值')
hold off

% 按照SNR的分贝定义手动计算,兼容R2015b版本
signal_power = mean(signal_1 .^ 2);
noise_power = mean(noise_1 .^ 2);
% 行末不加分号,直接在命令行打印计算结果
snr_22 = 10 * log10(signal_power / noise_power)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:09:22