调制识别HOM去噪方法
本文章复现的是Sofiane Kharbech等,于2020年在IEEE Wireless Communications Letters发表的论文《Denoising Higher-Order Moments for Blind Digital Modulation Identification in Multiple-Antenna Systems》(多天线系统中数字调制盲识别的高阶矩去噪方法)
论文复现
本文章复现的是Sofiane Kharbech等,于2020年在IEEE Wireless Communications Letters发表的论文《Denoising Higher-Order Moments for Blind Digital Modulation Identification in Multiple-Antenna Systems》(多天线系统中数字调制盲识别的高阶矩去噪方法)
首先编码三个函数文件,分别实现:
f_HOS_Extraction.m
从接收信号中提取高阶统计量(HOS)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51function HOS=f_HOS_Extraction(M,SNR,K,Nt,Nr,pbee,cfo,phznoise)
switch M
case 1
x = randi([0,1],1,Nt*K);
x_mod = pskmod(x,2);
case 2
x = randi([0,3],1,Nt*K);
x_mod = pskmod(x,4);
case 3
x = randi([0,7],1,Nt*K);
x_mod = pskmod(x,8);
case 4
x = randi([0,3],1,Nt*K);
x_mod = pammod(x,4);
case 5
x = randi([0,7],1,Nt*K);
x_mod = pammod(x,8);
case 6
x = randi([0,15],1,Nt*K);
x_mod = qammod(x,16);
otherwise
disp('Unknown modulation type');
end
scale = modnorm(x_mod,'avpow',1); % scaling factor
x_mod = x_mod*scale; % scaling avg. power to 1W
%------------------------------------------------> Channel (MIMO + AWGN)
H = randn(Nr,Nt)+1i*randn(Nr,Nt);
y_mimo = H*reshape(x_mod,Nt,[]);
cfo_mat = repmat(exp(2i*pi*(1:1:K)*cfo),Nr,1);
y_mimo = y_mimo.*cfo_mat;
if phznoise ~=0
for cptNr=1:Nr
y_mimo(cptNr,:) = phznoise(y_mimo(cptNr,:).').';
end
end
y_mimo_SNR = awgn(y_mimo,SNR,'measured');
Pb = mean(abs(reshape(y_mimo_SNR-y_mimo,1,[]).^2)) + pbee; % noise power
R = mean(real(x_mod).^4) / mean(real(x_mod).^2);
[W,yeg] = f_SCMA(Nt,Nr,y_mimo_SNR,R);
Pbf = Pb*W.'*conj(W); % power of the filtered noise
% bf = W.'*(y_mimo_SNR-y_mimo) % fchk
% mean(abs(bf(1,:).^2)) % fchk
%----> HOS extraction
for cpt=1:Nt
HOS(cpt,:) = f_CalcHOS(yeg(cpt,:),Pbf(cpt,cpt));
endf_CalcHOS.m
该函数计算输入信号的各种高阶矩和累积量。它计算矩,如m20, m40, m60,以及累积量,如c40, c60等。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68% x : the signal
% Pb : the noise power
function hos=f_CalcHOS(x, Pb)
x=x-mean(x);
m20=real(mean(x.^2));
m22=real(mean(conj(x).^2));
m40=real(mean(x.^4));
m60=real(mean(x.^6));
m21y=real(mean(x.*(conj(x))));
m41y=real(mean((x.^3).*(conj(x))));
m42y=real(mean((x.^2).*(conj(x).^2)));
m43y=real(mean(x.*(conj(x).^3)));
m61y=real(mean((x.^5).*(conj(x))));
m62y=real(mean((x.^4).*(conj(x).^2)));
m63y=real(mean((x.^3).*(conj(x).^3)));
m84y=real(mean((x.^4).*(conj(x).^4)));
% denoising
m21=m21y-Pb;
m41=m41y-3*m20*Pb;
m42=m42y-2*Pb^2-4*Pb*m21;
m43=m43y-3*m22*Pb;
m61=m61y-5*m40*Pb;
m62=m62y-12*m20*Pb^2-8*m41*Pb;
m63=m63y-18*m21*Pb^2-9*m42*Pb-6*Pb^3;
m84=m84y-16*m63*Pb-72*m42*Pb^2-96*m21*Pb^3-24*Pb^4;
%--------------------------> Cumulants <--------------------------%
c40=m40-3*(m20.^2);
c60=m60-15*m20*m40+30*(m20.^3);
c41=m41-3*m20*m21;
c42=m42-(abs(m20).^2)-2*(m21.^2);
c61=m61-5*m21*m40-10*m20*m41+30*m21*(m20.^2);
c62=m62-6*m42*m20-8*m21*m41-m22*m40+6*m22*m20^2+24*m20*m21^2;
c63=m63-9*m42*m21+12*(m21.^3)-3*m20*m43-3*m22*m41+18*m20*m21*m22;
%--------------------------> Normalization <--------------------------%
m40_n=m40/m21^2;
m41_n=m41/m21^2;
m42_n=m42/m21^2;
m60_n=m60/m21^3;
m61_n=m61/m21^3;
m62_n=m62/m21^3;
m63_n=m63/m21^3;
m84_n=m84/m21^4;
c40_n=c40/m21^2;
c41_n=c41/m21^2;
c42_n=c42/m21^2;
c60_n=c60/m21^3;
c61_n=c61/m21^3;
c62_n=c62/m21^3;
c63_n=c63/m21^3;
m41y_n=m41y/m21y^2;
m42y_n=m42y/m21y^2;
m61y_n=m61y/m21y^3;
m62y_n=m62y/m21y^3;
m63y_n=m63y/m21y^3;
m84y_n=m84y/m21y^4;
hos=real([m40_n m41_n m41y_n m42_n m42y_n m60_n m61_n m61y_n m62_n m62y_n m63_n m63y_n m84_n m84y_n ...
c40_n c41_n c42_n c60_n c61_n c62_n c63_n]);f_SCMA.m
该函数为MIMO系统执行信号盲源分离(BSS)。利用提取的信号特征和噪声特征,对接收信号进行白化变换,然后利用随机梯度下降(SGD)估计BSS的分离矩阵W。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39function [G,yeg]=f_SCMA(Nt,Nr,y_mimo_SNR,R)
%----------------------------------> Pre-processing: batch whitening
Ry = (y_mimo_SNR*y_mimo_SNR')/size(y_mimo_SNR,2);
[U,SIG] = eig(Ry); % Eigendecomposition
SIG = SIG(Nr:-1:(Nr-Nt+1),Nr:-1:(Nr-Nt+1)); % Required condition: Nr>=Nt
U = U(:,Nr:-1:(Nr-Nt+1));
B = (SIG^-0.5)*U'; % Whitening matrix
YW = B*y_mimo_SNR; % Whited signals
%----------------------------------> Estimating the separator W
W = eye(Nt); % Initialization
% W = toeplitz(1:Nt);
% W = toeplitz(1:Nr,1:Nt);
mu=1e-2; % Step size
% mu=5e-3;
for ns=1:size(YW,2) % Stochastic gradient descent (SGD)
YW_ns = YW(:,ns);
z_ns = W.'*YW_ns;
for n=1:Nt
e = (real(z_ns(n)).^2-R).*real(z_ns(n));
W(:,n) = W(:,n)-mu.*e.*conj(YW_ns);
end
W = f_GramSchmidt(W); % Post-processing: orthonormalization
end
%----------------------------------> Applying BSS
yeg = W.'*YW;
G = B.'*W;
function Q = f_GramSchmidt(W)
Q = zeros(size(W));
Q(:,1) = W(:,1)/norm(W(:,1));
for i=2:size(W,2)
s_proj = 0;
for j=1:i-1
s_proj = s_proj+((Q(:,j)'*W(:,i))/(Q(:,j)'*Q(:,j)))*Q(:,j);
end
e = W(:,i)-s_proj;
Q(:,i) = e/norm(e);
end
随后,我们需要生成高阶统计(HOS)特征的数据集。模拟各种调制方案下的MIMO传输,计算每个传输信号的HOS特征,并将数据组织成矩阵。生成的数据集是一个三维矩阵(mat_HOS),形状为==特征向量 × 样本指标 × MIMO系统的天线指标==。
1 |
|
最后,我们使用HOS数据集(mat_HOS)根据计算的特征对调制类型进行分类。它通过绘制正确识别概率(PCI)作为信噪比的函数来评估调制识别的性能。
1 |
|
到这里,对论文的复现就完成了。
One More Thing
如果需要实现对某一信号分类的效果,也就是输入信号x,输出信号的调制方式1-6的效果,可以对代码做如下改进。
1 |
|