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
相关产品推荐
相关产品推荐

