noise12=sqrt(snr/2)*(randn(1,len12)); noise13=sqrt(snr/2)*(randn(1,len13)); noise14=sqrt(snr/2)*(randn(1,len14)); Y_11=Y11+noise11; %%加噪声 Y_12=Y12+noise12; Y_13=Y13+noise13; Y_14=Y14+noise14;
YY1=[Y_11 zeros(1,length(Y_13)-length(Y_11))]; YY2=[Y_12 zeros(1,length(Y_13)-length(Y_12))]; YY4=[Y_14 zeros(1,length(Y_13)-length(Y_14))]; YY3=Y_13;
receive1=YY1+YY2+YY3+YY4; %%接收机1接收的信号 figure;
plot(abs(receive1));
title('接收机1收到的信号'); %%%%接收机2接收的信号
Y21=[zeros(1,fs*shiyan2(1)) Y1];len21=length(Y21); %加时延 Y22=[zeros(1,fs*shiyan2(2)) Y2];len22=length(Y22); Y23=[zeros(1,fs*shiyan2(3)) Y3];len23=length(Y23); Y24=[zeros(1,fs*shiyan2(4)) Y4];len24=length(Y24); % noise21=awgn(Y21,noise); % noise22=awgn(Y22,noise); % noise23=awgn(Y23,noise); % noise24=awgn(Y24,noise);
noise21=sqrt(snr/2)*(randn(1,len21)); noise22=sqrt(snr/2)*(randn(1,len22)); noise23=sqrt(snr/2)*(randn(1,len23)); noise24=sqrt(snr/2)*(randn(1,len24)); Y_21=Y21+noise21;
Y_22=Y22+noise22; %加噪声 Y_23=Y23+noise23; Y_24=Y24+noise24;
YYY1=[Y_21 zeros(1,length(Y_23)-length(Y_21))]; YYY2=[Y_22 zeros(1,length(Y_23)-length(Y_22))]; YYY4=[Y_24 zeros(1,length(Y_23)-length(Y_24))]; YYY3=Y_23;
receive2=YYY1+YYY2+YYY3+YYY4; %%接收机2接收的信号 figure;
plot(abs(receive2));
title('接收机2收到的信号');
fid = fopen('C:\\Documents and Settings\\Administrator\\桌面\\信号分析\\receive1.dat','w'); fwrite(fid,receive1,'double');
fid = fopen('C:\\Documents and Settings\\Administrator\\桌面\\信号分析\\receive2.dat','w'); fwrite(fid,receive2,'double');
%% 信号分析
clc;closeall;clear all;
fid=fopen('C:\\Documents and Settings\\Administrator\\桌面\\信号分析\\receive1.dat'); s=fread(fid,'double'); s=abs(s'); plot(s);
% noise=s(1:10000);
% noisemean=mean(noise); % noisevar=var(noise);
T=0.3; %%%设定门限 fs=10e7;
% b=zeros(length(s),2); %%脉宽
m=1;n=1;q=0;summ=0;count=0;%定义参数初值 %% 将信号二值化 as=zeros(1,length(s)); for i=1:length(s)
if s(i)>=T %%如果信号幅度大于等于门限,则判为1 as(i)=1; else
as(i)=0;%否则判为0 end end
%% 求脉冲的起始位置和结束位置 for i=2:length(s)-300 summ=sum(as(i:i+300)); if as(i)==1&&count==0 ifsumm>=220
b(m,1)=i; % b矩阵的第一列存放脉冲起始位置 m=m+1; count=1; end end
if count==1&&summ<40
b(n,2)=i; % b矩阵的第二列存放脉冲结束位置 n=n+1; count=0; end end
%% 求脉宽
a=b(:,2)-b(:,1); %a矩阵存放脉宽
figure; stem(a);
axis([0,200,0,4000]); title('脉宽'); %% 载频 N=10000;
for i=1:length(b)
maichong=[s(b(i,1):b(i,2))];
maichong_FFT=abs(fft(maichong,N)); maichong_FFT(1:60)=0;
maichong_FFT(9940:10000)=0; [Fcmax,k]=max(maichong_FFT); Fc(i)=k/(2*N)*fs; ü矩阵存放载频 end figure; stem(Fc);
title('载频');
%% K均值聚类法对脉冲进行分类 % %选择聚类中心 maizu=[a';Fc/10000];
jlzx=[maizu(:,1),maizu(:,2),maizu(:,102),maizu(:,128)]; %聚类中心 jlzl(1,1)=1; jlzl(2,1)=2; jlzl(3,1)=102;
jlzl(4,1)=128; %聚类种类 %%
%设置判决条件 panjue=20; panjue_js=25;
whilepanjue_js>panjue
%对每个脉冲进行分类 jljl=zeros(1,4); %聚类距离 m1=2;m2=2;m3=2;m4=2; M=length(a); jljl_min=zeros(1,M); for n=1:M
jljl(:)=sqrt((jlzx(1,:)-maizu(1,n)).^2+(jlzx(2,:)-maizu(2,n)).^2); jljl_min(n)=min(jljl); ifjljl_min(n)>500 continue; end
ifjljl(1)==jljl_min(n) jlzl(1,m1)=n;
m1=m1+1;
elseifjljl(2)==jljl_min(n) jlzl(2,m2)=n;
m2=m2+1; elseifjljl(3)==jljl_min(n) jlzl(3,m3)=n;
m3=m3+1; else
jlzl(4,m4)=n;
m4=m4+1; end end
Mjl(1)=m1-1;Mjl(2)=m2-1;Mjl(3)=m3-1;Mjl(4)=m4-1; %对每类求出新的聚类中心 jlzx_n=zeros(2,4); for n=1:4
sum1=0;sum2=0; fornn=1:Mjl(n)
sum1=sum1+maizu(1,jlzl(n,nn)); sum2=sum2+maizu(2,jlzl(n,nn)); jlzx_n(1,n)=sum1/Mjl(n); jlzx_n(2,n)=sum2/Mjl(n); end end
%判决条件(新旧两个聚类中心)距离较小 panjue_js=sqrt(sum(sum((jlzx-jlzx_n).^2))); %设置新的判决中心 jlzx=jlzx_n; end
%聚类种类每类个数