前排提醒一下,过采样增益不存在,代码仿真中看到了过采样增益,原因在于对于不同过采样倍数,对应的AD采样率不同,而代码中产生了同样的噪声功率,导致噪声谱密度降低了,看起来带来了增益。
实际上,热噪声谱密度为常数,与噪声温度T有关,单边功率谱密度\(N_0=4k_BTR\),\(k_B\)为玻尔兹曼常数,T为噪声温度,R为电阻值。
AD采样后的噪声功率为\(Pn=N_0*W\)
用于搞不清楚过采样与没有过采样时怎么换算snr的选手通过仿真验证。
没有成形滤波器时,\(snr\)记为\(snr_0\),有成形滤波器记为\(snr_1\),成形滤波器过采样倍数(每个符号采样点数)为\(sps\)
则换算关系为:\(snr_0=snr_1+10*\log_{10}(sps)\)
fprintf('\n');
x=randi([0 1],1000,1);
x=qammod(x,2);
sps=10;
rrc=rcosdesign(0.22,10,sps,"sqrt");
rrc=sqrt(sps)*rrc;
x=upsample(x,10);
x=filter(rrc,1,[x;zeros(floor(length(rrc)/2),1)]);
x=x(floor(length(rrc)/2)+1:end);
noise = randn(size(x));
fprintf('信道SNR:0 dB\n\n');
fprintf('信道:噪声平均值:%.4f; 信号平均值:%.4f\n\n',rms(noise),rms(x));
noise_filter = filter(rrc,1,[noise;zeros(floor(length(rrc)/2),1)]);
noise_filter=noise_filter(floor(length(rrc)/2)+1:end);
fprintf('最佳采样点噪声平均值:%.4f\n \n',rms(noise_filter(1:sps:end)));
y = filter(rrc,1,[x;zeros(floor(length(rrc)/2),1)]);
y=y(floor(length(rrc)/2)+1:end);
fprintf('最佳采样点信号平均值:%.4f\n \n',rms(y(1:sps:end)));
snr = 20*log10(rms(y(1:10:end))/rms(noise_filter(1:sps:end)));
fprintf('过采样倍数:%3d; rx snr = %.2f dB\n',sps,snr);
运行结果为:
信道SNR:0 dB
信道:噪声平均值:0.9964; 信号平均值:0.9996
最佳采样点噪声平均值:3.2876
最佳采样点信号平均值:9.9935
过采样倍数: 10; rx snr = 9.66 dB
标签:采样,仿真,noise,sps,rrc,filter,snr
From: https://www.cnblogs.com/jiaotaiyang/p/18678985