利用moment函数求接收信号的二阶矩和四阶矩,并根据国内外文献上的公式进行了程序编写,但是估计出的结果与预置的信噪比并不一样。有没有研究过这方面的可以解答一下
%---------------------------------M2M4-该代码是经典的信噪比估计算法,用到了统计学中基于矩估计的思想,利用信号的2、4阶矩来估计接收信号的信噪比------------------------------------
clc
clear
% Generate data.
M = 4; % QPSK modulation order
Pd = 500; % Length of data
x = randi([0 M-1], Pd, 1); % Random bit stream
ini_phase = pi/4; %ini_phase
psksig = pskmod(x,M,ini_phase); % PSK signal
A = 2; % ampitude of signal
snr_theory = -6:2:10; % Theoretical value of SNR
QQ = 10.^(snr_theory/10); % SNR in decimal
for m = 1:length(snr_theory)
SNR=num2str(snr_theory(m))
for n=1:500
rxsig = awgn(psksig,snr_theory(m)); % Add Gaussion noise
M2 = mean(rxsig.*conj(rxsig)); % Two order Moments
M4 = mean((rxsig.*conj(rxsig)).^2); % Four order Moments
s1 = sqrt(2*M2.^2-M4);
s2 = M2-s1;
snr_est_M2M4(n) = 10*log10(abs(s1./s2));
M2M4_snr_est(m) = mean(snr_est_M2M4); % estimation value
snr_est12(n) = 10.^(snr_est_M2M4(n)/10); % SNR in decimal
snr_est2(m) = mean(snr_est12);
NMSE_M2M4(m) = mean(((QQ(m)-snr_est12)/QQ(m)).^2); % Normalized MSE
STD_M2M4(m) = var(snr_est_M2M4); %standard deviation
NB_M2M4(m) = mean((QQ(m)-snr_est12)./QQ(m)); % normalized bias
end
end
% 第一幅图:理论信噪比与估计信噪比之间的关系
figure(1)
plot(snr_theory, snr_theory, 'k--', 'LineWidth', 2); % 理论信噪比值与自身的直线
hold on
plot(snr_theory, M2M4_snr_est, '-o', 'LineWidth', 2); % 信噪比估计值与理论信噪比之间的关系
hold off
xlabel('理论信噪比 (dB)', 'FontSize', 12)
ylabel('估计信噪比 (dB)', 'FontSize', 12)
legend('理论信噪比', '估计信噪比', 'FontSize', 12)
title('理论信噪比与估计信噪比之间的关系', 'FontSize', 14)
% 第二幅图:信噪比估计的均方误差(NMSE)
figure(2)
semilogy(snr_theory, NMSE_M2M4, '-*', 'LineWidth', 2)
xlabel('理论信噪比 (dB)', 'FontSize', 12)
ylabel('NMSE', 'FontSize', 12)
title('信噪比估计的均方误差(NMSE)', 'FontSize', 14)
% 第三幅图:信噪比估计的标准差(STD)
figure(3)
plot(snr_theory, STD_M2M4, '-*', 'LineWidth', 2)
xlabel('理论信噪比 (dB)', 'FontSize', 12)
ylabel('标准差', 'FontSize', 12)
title('信噪比估计的标准差(STD)', 'FontSize', 14)
% 第四幅图:信噪比估计的标准化偏差(NB)
figure(4)
plot(snr_theory, NB_M2M4, '-*', 'LineWidth', 2)
xlabel('理论信噪比 (dB)', 'FontSize', 12)
ylabel('标准化偏差', 'FontSize', 12)
title('信噪比估计的标准化偏差(NB)', 'FontSize', 14)
grid
chatgpt:不喜勿喷
% 生成具有信号和噪声的接收信号
n = 1000; % 信号长度
s = sin(2*pi*10*(1:n)/100); % 信号
noise = randn(1,n); % 高斯白噪声
x = s + noise; % 接收信号
% 计算接收信号的二阶矩和四阶矩
M2 = mean(abs(x).^2); % 二阶矩
M4 = mean(abs(x).^4); % 四阶矩
% 用M2M4算法估计信噪比
SNR_M2M4 = M2^2 / (M4 - M2^2);
% 显示估计出的信噪比
disp(['估计出的信噪比:', num2str(SNR_M2M4), ' dB']);