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