通信系统中基于matlab的BPSK信噪比检测算法及实现

根据是否需要辅助数据,信噪比估计算法可以分为数据辅助类算法(Data aided, DA)和非数据辅助类算法(No Data aided, NDA)。DA估计算法准确性较高,但是需要提供先验信息,需要牺牲信道传输效率。NDA方法在传输数据信息的同时进行信噪比估计,不影响信息传输效率,适用范围较广。

根据所采纳的信号处理方法,信噪比估计可以分为最大似然估计(Maximum Likelihood, ML)、谱分析法以及统计量法。在这三种方法中,最大似然估计能够在存在辅助信号的情况下得到最高水平的精度。

二进制相移键控(Binary Phase Shift Keying ,BPSK)是一种数字频带调制中的非线性调制,通过调制载波的不同相位来传送数据。由于BPSK是一种相位调制方式,在相位上引入信息,对接受信号的幅度变化不敏感,因此BPSK具有抗干扰性强、抗多径衰落等优点。

是二进制基带信号时间间隔,是持续时间为,高度为1的矩形脉冲。BPSK可以通过模拟调相法、数字键控法调制,采用与接收的BPSK信号同频同相的相干载波解调。在解调时,用以恢复的本地载波与所需的相干载波可能同相,也可能反相,这会造成倒现象,可用2DPSK取代克服该问题。

基于统计量的估计方法有二阶四阶矩估计法(Second and Fourth Order Moments, M2M4)与分离符号矩(Split Symbol Moment, SSME),通过构造统计量分离信号和噪声。

M2M4算法精确度与采样信号数成正比,在小信噪比时误差较大。采样信号的二阶矩如下:

由于信号与噪声相互独立,为实数,因此的互相关系数为0。且噪声为零均值单位方差加性高斯白噪声,即,。因此,上式可化简为:

同理,四阶矩可化简为下式:

其中,

联立两式可得:

则,信噪比可表示为:

M2M4算法在实践中使用时间平均替代统计平均,对采样信号求二次方、四次方,在四种算法中计算最为简单。

该估计算法要求将BPSK信号解调至基带信号,即双极性不归零信号。本文仅为演示算法,不涉及bpsk调制,解调部分

matlab参考代码如下:

clear;clc;
%% 参数设置
global M2 M4 ;
    bps = 1000;% 码元速率(每秒比特数)
    SNRs = zeros(size(bps)); % 保存信噪比结果
    SNR_estimaed=[];
    T = 1/bps; % 符号持续时间
    fs =10000; % 采样频率为码元速率的50倍
    Ts = 1/fs; % 采样间隔
    Ns = T/Ts; % 每个码元的采样点数
    sps=2;%rcondesign,upfirdn的采样点数
    t=0:1/fs:T-1/fs;
    fc=1e3;%载波频率
    count=1;
    N=500;%二进制符号数
%% 计算bps码元速率下的信噪比
    %% 生成BPSK信号

        bits = randi([0 1], 1, N); % 随机生成1000个二进制比特
        symbols = 2*bits - 1; % BPSK调制,映射到实数值序列
        upsamples = repmat(symbols, Ns, 1); % 扩展为持续时间为T的矩形波
        waveform = upsamples(:)'; % 将矩阵转换为向量
        input=waveform;
%        modulation=real(exp(2i*pi*fc*t));%调制函数
%         modulation=exp(2i*pi*fc*t);%调制函数
        modulation=ones(1,Ns);
  %% 加成形滤波器(M2M4不适合加滤波器)
%     rrcfilter=rcosdesign(0.5,Ns/2,sps,'sqrt');%x=10*sps+1个点升余弦滤波器
%     input=upfirdn(waveform,rrcfilter,sps);%y=x+(bpsk-1)*sps个点
%         L=Ns/2+1;%矩形滤波器长度
%         rectangle=rectwin(L)'/L;
%         input=conv(rectangle,input);
    %% 调制
        b=[];%存储bpsk调制
        for j=1:N
            start=Ns*j-Ns+1;
            stop=Ns*j;
            a=waveform(start:stop);
            b = [b,a.*modulation];
        end
        input=b;
    %% 添加高斯白噪声
    for x =1:30
        SNRdB =x-10;% 信噪比(以dB为单位)
        output=[,];
        received = awgn(input, SNRdB, 'measured'); % 添加高斯白噪声
    %% 加匹配滤波器 M2M4算法加滤波器将影响大信噪比时估计准确性
%         output=upfirdn(received,conj(fliplr(rrcfilter)),1,sps);%对rrc滤波器先反折再共轭
%         output=conv(received,conj(fliplr(rectangle)));
%         received=output;
    %% 使用M2M4算法计算信噪比
        SNR_estimated(count,x)=M2M4(received);
    end

%% 打印结果
% 生成信噪比范围
a = -9:20; % 信噪比范围
%% 理论信噪比的影响
% 第一个图:信噪比估计值与实际值比较
figure; % 创建一个新的图形窗口
hold on; % 启用绘图保持模式
grid on; % 显示网格线
plot(a, SNR_estimated,'ok-', 'linewidth', 1.1, 'markerfacecolor', [36, 169, 225]/255); % 绘制信噪比估计值曲线
plot(a, a,'ok-', 'linewidth', 1.1, 'markerfacecolor', [29, 191, 151]/255); % 绘制实际信噪比曲线
xlabel('理论信噪比值'); % 设置横轴标签
ylabel('估计信噪比值'); % 设置纵轴标签
title('信噪比估计值与实际值比较'); % 设置子图标题
legend('估计信噪比', '实际信噪比'); % 设置图例

hold off; % 关闭绘图保持模式

% 第二个图:估计误差与理论信噪比值关系
figure
hold on
grid on; % 显示网格线
plot(a, SNR_estimated - a,'ok-', 'linewidth', 1.1, 'markerfacecolor', [36, 169, 225]/255); % 绘制估计误差与理论信噪比之间的关系曲线
xlabel('理论信噪比值'); % 设置横轴标签
ylabel('估计误差值'); % 设置纵轴标签
legend('估计误差'); % 设置图例
title('估计误差与理论信噪比关系'); % 设置子图标题
function [SNR] = M2M4(sig)
if isreal(sig)==1
    M2 = mean(sig .* conj(sig)); % 计算接收信号的2阶矩
    M4 = mean(sig.^4); % 计算接收信号的4阶矩
    s1 = sqrt(6 * M2.^2 - 2*M4); 
    s2 = 2*M2 -s1; 
    SNR= 10 * log10(abs(s1 ./ s2)); % 信噪比估计
else
    M2 = mean(sig .* conj(sig)); % 计算接收信号的2阶矩
    M4 = mean((sig .* conj(sig)).^2); % 计算接收信号的4阶矩
    s1 = sqrt(2 * M2.^2 - M4); 
    s2 = M2 - s1; 
    SNR= 10 * log10(abs(s1 ./ s2)); % 信噪比估计
end

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值