MATLAB中MSE与SNR仿真输出7*50矩阵 如何得到预期7*1矩阵
问题原因
- 原代码中
n=50,调用normrnd时指定输出维度为[1,n],会生成1行50列的高斯噪声向量 zi初始化维度为7*50,循环中将1行50列的计算结果赋值给zi(i,:)(第i行所有列),最终自然得到7×50的矩阵
调整方案
如果你需要每个SNR对应1个计算结果,得到7×1的输出,只要修改3处即可:
- 移除不必要的
n=50参数,或调整噪声生成的维度为标量 - 将
zi的初始化维度改为和SNR长度匹配的列向量 - 循环中每次仅生成1个噪声值,赋值给
zi的对应位置
修改后完整代码
x=2; snr = -5:5:25; zi = zeros(length(snr),1); % 用length(snr)适配SNR数量,后续修改SNR范围不用手动调整行数 mu = 1; for i=1:length(snr) sigma(1,i) = sqrt(1/(10^(snr(1,i)/10))); % 生成标量高斯噪声 wi = normrnd(mu,sigma(1,i)); zi(i) = x + wi; end
运行上述代码后zi就是你需要的7×1维度的向量,每个元素对应一个SNR下的计算结果。
可选场景适配:如果你保留
n=50是为了每个SNR下做50次重复实验取平均得到更稳定的结果,也可以不改噪声生成维度,只在赋值时对wi取平均即可,代码如下:
n=50; x=2; snr = -5:5:25; zi = zeros(length(snr),1); mu = 1; for i=1:length(snr) sigma(1,i) = sqrt(1/(10^(snr(1,i)/10))); wi = normrnd(mu,sigma(1,i),[1,n]); zi(i) = x + mean(wi); % 对50次采样的噪声取平均 end
内容的提问来源于stack exchange,提问作者matlabsad
相关产品推荐
相关产品推荐

