M2M4算法估计信噪比

利用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']);