调制识别 基于高阶累积量的经典类内调制识别算法

前前言

        接触到这一领域才发现传统方法的性能在基于神经网络的方法面前有多乏力。因为研究方向不是这方面的所以在此做一点简单的记录。

前言

        通信信号的调制识别是介于能量检测和信号解调之间的过程。其目的是在未知调制信息内容的前提下正确判断通信信号的调制类型。现有的传统调制识别算法有部分是基于基带信号进行识别的,而实际应用过程中接收信号一般带有载频,因此该部分算法需要在部署过程中考虑下变频带来的影响,下面的高阶累积量算法显然对实际环境中频率估计算法的误差、噪声特性与多径效应皆不具有很好的鲁棒性。

高阶累积量

        有一随机过程\left \{ x \left ( t \right ) \right \},则其k阶累积量的定义为:

\begin{aligned}C_{kx}\left(f_1,f_2,\cdots,f_k\right)=\text{Cum}\left(x(t),x\left(t+f_1\right),\cdots,x\left(t+f_{k-1}\right)\right)\end{aligned}

其中\text{Cum}\left ( \cdot \right )为求累量操作,该累积量操作可表示为其高阶混合矩的运算,因此定义该随机过程的p阶混合矩定义为:

M_{pq} =E\{[x(t)^{p-q}x^*(t)^q]\}

式中*表示该随机序列的共轭,q为共轭操作的累乘次数。则该随机过程的各阶累积量如下所示:

C_{20}= M_{​{20}}

C_{​{21}}= M{_{21}}

C _{​{40}}=M_{​{40}}-3M_{​{20}}^2

C _{41}=M_{41}-3M_{​{20}}M_{​{21}}

C_{42}=M_{​{42}}-M_{​{20}}^2-2M_{​{21}}^2

C _{​{60}}=M_{​{\delta_0}}-15M_{​{40}}M_{​{20}}+30M_{​{20}}^3

C_{​{63}}=M_{​{63}}-6M_{​{41}}M_{​{20}}-9M_{​{42}}M_{​{21}}+18M_{​{20}}^2M_{​{21}}+12M_{​{21}}^3

C_{80}=M_{80} -26M_{20}M_{60}-35M_{40}^2+420M_{20}^2M_{40}-630M_{20}^4

        高阶累积量主要反应的是高阶矩中的相位信息,因此需要对信号进行下变频,对其基带信号作高阶累积量变换才能正确地得到该信号的高阶矩,且由于其对非高斯噪声较低的鲁棒性,非精确的下变频会导致该信号的高阶累积量值严重失真,以下是本人整理的部分调制信号的基带高阶累积量:

C20C21C40C41C42C60C63C80
BPSK11-2-2-2-1616-272
4PSK0110-104-34
8PSK0100-1041
16PSK0100-1040
2FSK0100-104
4FSK0100-104
8FSK0100-104
8QAM0.68110.894.7354.15
16QAM01-0.680-0.6802.0813.98

函数如下所示:

function [output_var] = cumulate(input_array,cum_order,cum_t)
%UNTITLED 此处提供此函数的摘要
%   此处提供详细说明
m20 = MM(input_array,2,0);
m21 = MM(input_array,2,1);
m40 = MM(input_array,4,0);
m41 = MM(input_array,4,1);
m42 = MM(input_array,4,2);
m60 = MM(input_array,6,0);
m63 = MM(input_array,6,3);
m80 = MM(input_array,8,0);
if cum_order == 2 && cum_t == 0
    output_var = m20;
end
if cum_order == 2 && cum_t == 1
    output_var = m21; 
end
if cum_order == 4 && cum_t == 0
    output_var = m40-3*m20.^2; 
end
if cum_order == 4 && cum_t == 1
    output_var = m41-3*m21.*m20;
end
if cum_order == 4 && cum_t == 2
    output_var = m42-abs(m20).^2-2*m21.^2; 
end
if cum_order == 6 && cum_t == 0
    output_var = m60-15.*m40.*m20+30.*m20.^3; 
end
if cum_order == 6 && cum_t == 3
    output_var = m63-6*m20.*m41-9*m42.*m21+18*m20.^2.*m21+12*m21.^3;
end
if cum_order == 8 && cum_t == 0
    output_var = m80-28*m20.*m60-35*m40.^2+420*m20.^2.*m40-630*m20.^4;
end
end
function [output_array] = MM(input_array,ma,mb)
%UNTITLED2 此处提供此函数的摘要
%   此处提供详细说明
output_array = mean(input_array.^(ma-mb).*conj(input_array).^mb);
end

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值