首页 > 技术文章 > 基于HOS的FSK识别。

craftsmanhinata 2020-05-08 01:02 原文

FSK调制识别。

这边文章讨论[2FSK, 4FSK, 8FSK]的识别。可能会有错误。

首先是产生FSK信号的代码。

gen2fsk.m
function s0 = gen2fsk()
n = 1:100;
Fs=1;
s1 = 1i*2*pi*0.1*exp(1i*2*pi*0.1*(n-1));
s2 = 1i*2*pi*(-0.1)*exp(1i*2*pi*(-0.1)*(n-1));

s0 = zeros(1,1000);
m = randi([0,1],1,100);
for i = 1:100
    if m(i)==0
        s0(1+i*100-100:100*i) = s1;
    elseif m(i)==1
        s0(1+i*100-100:100*i) = s2;
    end
end
% figure;
% title('FFT');
% plot(abs(fft(s0)));
% xlabel('频率');ylabel('幅度');

%[s,f,t] = stft(s,Fs,'Window',kaiser(256,5),'OverlapLength',220,'FFTLength',512);
% [s,f,t] = stft(s3,Fs);
% figure;
% title('STFT');
% mesh(t,f,abs(s));
% xlabel('时间');ylabel('频率');
end

gen4fsk.m
function s0 = gen4fsk()
n = 1:100;
Fs=1;
s1 = 1i*2*pi*0.1*exp(1i*2*pi*0.1*(n-1));
s2 = -1i*2*pi*0.1*exp(1i*2*pi*(-0.1)*(n-1));
s3 = 1i*2*pi*0.3*exp(1i*2*pi*0.3*(n-1));
s4 = -1i*2*pi*0.3*exp(1i*2*pi*(-0.3)*(n-1));
% s1 = exp(1i*2*pi*0.1*(n-1));
% s2 = exp(1i*2*pi*(-0.1)*(n-1));

s0 = zeros(1,1000);
m = randi([0,3],1,100);
for i = 1:100
if m(i)==0
s0(1+i*100-100:100*i) = s1;
elseif m(i)==1
s0(1+i*100-100:100*i) = s2;
elseif m(i)==2
s0(1+i*100-100:100*i) = s3;
elseif m(i)==3
s0(1+i*100-100:100*i) = s4;
end
end
% figure;
% title('FFT');
% plot(abs(fft(s0)));
% xlabel('频率');ylabel('幅度');

%[s,f,t] = stft(s,Fs,'Window',kaiser(256,5),'OverlapLength',220,'FFTLength',512);
% [s,f,t] = stft(s3,Fs);
% figure;
% title('STFT');
% mesh(t,f,abs(s));
% xlabel('时间');ylabel('频率');
end



gen8fsk.m

function s0 = gen8fsk()
n = 1:100;
Fs=1;
s1 = 1i*2*pi*0.05*exp(1i*2*pi*0.05*(n-1));
s2 = -1i*2*pi*0.05*exp(1i*2*pi*(-0.05)*(n-1));
s3 = 1i*2*pi*0.15*exp(1i*2*pi*0.15*(n-1));
s4 = -1i*2*pi*0.15*exp(1i*2*pi*(-0.15)*(n-1));
s5 = 1i*2*pi*0.25*exp(1i*2*pi*0.25*(n-1));
s6 = -1i*2*pi*0.25*exp(1i*2*pi*(-0.25)*(n-1));
s7 = 1i*2*pi*0.35*exp(1i*2*pi*0.35*(n-1));
s8 = -1i*2*pi*0.35*exp(1i*2*pi*(-0.35)*(n-1));

s0 = zeros(1,1000);
m = randi([0,7],1,100);
for i = 1:100
if m(i)==0
s0(1+i*100-100:100*i) = s1;
elseif m(i)==1
s0(1+i*100-100:100*i) = s2;
elseif m(i)==2
s0(1+i*100-100:100*i) = s3;
elseif m(i)==3
s0(1+i*100-100:100*i) = s4;
elseif m(i)==4
s0(1+i*100-100:100*i) = s5;
elseif m(i)==5
s0(1+i*100-100:100*i) = s6;
elseif m(i)==6
s0(1+i*100-100:100*i) = s7;
elseif m(i)==7
s0(1+i*100-100:100*i) = s8;
end
end
% figure;
% title('FFT');
% plot(abs(fft(s0)));
% xlabel('频率');ylabel('幅度');

%[s,f,t] = stft(s,Fs,'Window',kaiser(256,5),'OverlapLength',220,'FFTLength',512);
% [s,f,t] = stft(s3,Fs);
% figure;
% title('STFT');
% mesh(t,f,abs(s));
% xlabel('时间');ylabel('频率');
end

然后计算C20、C21、C40、C41、C42

结果表明:2FSK信号和4FSK信号只有C21和C42非零。8FSK信号C21,C40,C42非零。

定义特征值F = |C42|/(C21*C21)

2FSK 的特征值为1.

4FSK 的特征值为0.4附近.

8FSK 的特征值为0.2附近.

根据上述特征,应该能够识别出三种调制方式。不知道对不对?

100次试验发现,特征值的方差有些大,如下图,从上到下依次是2FSK, 4FSK, 8FSK。

 

推荐阅读