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。

原文:https://www.cnblogs.com/craftsmanhinata/p/12846999.html