赞
踩
根据是否需要辅助数据,信噪比估计算法可以分为数据辅助类算法(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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。