BP神经网络实验报告

时间:2024.4.13

深 圳 大 学 实 验 报 告

实验课程名称: 人工神经网络技术

实验项目名称: BP神经网络对蝴蝶花分类

学院: 专业: 软件工程

报告人: 学号: 班级:

同组人: 无

指导教师:

实验时间:

实验报告提交时间:

教务处制

一、 实验目的

初步熟悉MATLAB 工作环境,熟悉命令窗口,学会使用帮助窗口查找帮助信息。

二、 实验内容

1、网络设计,包括输入层、隐含层、输出层节点个数的设计。

2、算法步骤

3、编程,注意原始数据的通用化,数据输入的随机性。

4、网络训练,注意训练数据与验证数据分开。

5、网络验证

6、结果分析,修改隐含层节点个数,修改学习率,分别对结果的影响。

三、实验步骤

直接在Matlab软件中的Editor中运行以下代码:(完善的代码用红色字体表示)

% li.m

% A BP NN with momentum to solve Fisher's Iris Flower problem

% by lixiujuan, Nov 13, 2011

%

% the NN architecture

% it is a three layers neural network 4-3-3.

%

% parameter description

% h=4 the node numer of input layer

% i=3 the node numer of hidden layer

% j=3 the node numer of output layer

% V[h,i] the weights between input and hidden layers

% W[i,j] the weights between hidden and output layers

% Pi[i] the thresholds of hidden layer nodes

% Tau[j] the thresholds of output layer nodes

% a[h] the input values

% b[i] the hidden layer node activations

% c[j] the output layer node activations

% ck[j] the desired output of output layer nodes

% d[j] the eror in output layer nodes

% e[i] the eror in hidden layer nodes

% DeltaW[i,j] the amount of change for the weights W[i,j]

% DeltaV[h,i] the amount of change for the weights V[h,i]

% DeltaPi[i] the amount of change for the thresholds Pi[i]

% DeltaTau[j] the amount of change for the thresholds Tau[j]

% Alpha=0.1 the leaning rate

% Beta=0.1 the leaning rate

% Gamma=0.8 the constant determines effect of past weight changes

% Tor=0.001 the torrelance that determines when to stop training

% Maxepoch=1000 the max iterate number

%

% other parameters

% Ntrain=115 the number of trainning sets

% Ntest=35 the number of test sets

% Otrain[115] the output of training sets

% Otest[35] the output of test sets

% Odesired[150] the desired output of training and test sets

%

% function description

% f(x)=logsig(x)

% f(x)=1/(1+exp(-x))

%

% data file

% input file: data.dat

%

close all; clc; clf; clear all;

% parameters for the NN structure

h=4;

i=3;

j=3;

Alpha=0.1;

Beta=0.1;

Gamma=0.85;

Tor=0.0005;

Maxepoch=2000;

Accuracy=0;

Ntrain=115;

Ntest=35;

%assign random values in the range [-1, +1]

V=2*(rand(h,i)-0.5);

W=2*(rand(i,j)-0.5);

Pi=2*(rand(1,i)-0.5);

Tau=2*(rand(1,j)-0.5);

DeltaWOld(i,j)=0; %set the delat of Wij to 0

DeltaVOld(h,i)=0; %set the delat of Vij to 0

DeltaPiOld(i)=0; %set the delat of Pi to 0

DeltaTauOld(j)=0; %set the delat of Tau to 0

% the learning process

Epoch=1;

Error=10;

% load the training set data and test set data

load data.dat

Odesired=data(:,2); % get the desired of output of 150 data sets

% normalize the input data to rang [-1 +1]

datanew=data(:,3:6);

maxv=max(max(datanew));

minv=min(min(datanew));

datanorm=2*((datanew-minv)/(maxv-minv)-0.5);

while Error>Tor

Err(Epoch)=0;

for k=1:Ntrain % k = the index of tranning set

a=datanorm(k,:); % get the input

% set the desired output ck[j]

if data(k,2)==0

ck=[1 0 0];

elseif data(k,2)==1

ck=[0 1 0];

else

ck=[0 0 1];

end;

% calculate the hidden nodes activation

for ki=1:i

b(ki)=logsig(a*V(:,ki)+Pi(ki));

end;

% calculate the output nodes activation

for kj=1:j

c(kj)=logsig(b*W(:,kj)+Tau(kj));

end;

% calculate error in output Layer FC

d=c.*(1-c).*(ck-c);

% calculate error in hidden layer FB

e=b.*(1-b).*(d*W');

% adjust weights Wij between FB and FC

for ki=1:i

for kj=1:j

DeltaW(ki,kj)=Alpha*b(ki)*d(kj)+Gamma*DeltaWOld(ki,kj);

end

end;

W=W+DeltaW;

DeltaWOld=DeltaW;

% adjust weights Vij between FA and FB

for kh=1:h

for ki=1:i

DeltaV(kh,ki)=Beta*a(kh)*e(ki);

end

end;

V=V+DeltaV;

DeltaVold=DeltaV;

% adjust thresholds Pi and Tau

DeltaPi=Beta*e+Gamma*DeltaPiOld;

Pi=Pi+DeltaPi;

DeltaPiold=DeltaPi;

DeltaTau=Alpha*d+Gamma*DeltaTauOld;

Tau=Tau+DeltaTau;

DeltaTauold=DeltaTau;

% the error is the max of d(1),d(2),d(3)

Err(Epoch)=Err(Epoch)+0.5*(d(1)*d(1)+d(2)*d(2)+d(3)*d(3));

end %for k=1:Ntrain

Err(Epoch)=Err(Epoch)/Ntrain;

Error=Err(Epoch);

% the training stops when iterate is too much

if Epoch > Maxepoch

break;

end

Epoch = Epoch +1; % update the iterate number

end

% test data

for k=1:Ntest % k = the index of test set

a=datanorm(Ntrain+k,:); % get the input of test sets

% calculate the hidden nodes activation

for ki=1:i

b(ki)=logsig(a*V(:,ki)+Pi(ki));

end;

% calculate the output of test sets

for kj=1:j

c(kj)=logsig(b*W(:,kj)+Tau(kj));

end;

% transfer the output to one field format

if (c(1)> 0.9)

Otest(k)=0;

elseif (c(2)> 0.9)

Otest(k)=1;

elseif (c(3)> 0.9)

Otest(k)=2;

else

Otest(k)=3;

end;

% calculate the accuracy of test sets

if Otest(k)==Odesired(Ntrain+k)

Accuracy=Accuracy+1;

end;

end; % k=1:Ntest

% plot the error

plot(Err);

% plot the NN output and desired output during test

N=1:Ntest;

figure; plot(N,Otest,'b-',N,Odesired(116:150),'r-');

% display the accuracy

Accuracy = 100*Accuracy/Ntest;

t=['TESTING RESULT, the accuracy of test sets is: ' num2str(Accuracy) '%' ];

disp(t);

当中间隐藏层结点数为i=3时,得出下图:

BP神经网络实验报告

BP神经网络实验报告

当Alpha=0.08;Beta=0.08时;如下图:

BP神经网络实验报告

当Alpha=0.05;Beta=0.05时;如下图:

BP神经网络实验报告

当Alpha=0.2;Beta=0.2时;如下图:

BP神经网络实验报告

当Alpha=0.3;Beta=0.3时;如下图:

BP神经网络实验报告

当Alpha=0.2;Beta=0.3时;如下图:

BP神经网络实验报告

当Alpha=0.3;Beta=0.2时;如下图:

BP神经网络实验报告

BP神经网络实验报告

当中间隐藏层结点数为i=4时,得出下图:

BP神经网络实验报告

BP神经网络实验报告

BP神经网络实验报告

当中间隐藏层结点数为i=2时,得出下图:

BP神经网络实验报告

BP神经网络实验报告

当Alpha=0.05;Beta=0.05时;如下图:

BP神经网络实验报告

当中间隐藏层结点数为i=1时,得出下图:

BP神经网络实验报告

BP神经网络实验报告

BP神经网络实验报告

四、总结分析

由于对MATLAB的不熟悉,一开始还是不知道怎么完成这个实验,但是在同学的帮助下,渐渐懂得怎么导入数据和代码实现,进而了解怎么样使用BP神经网络来进行蝴蝶花的分类。通过修改中间隐藏层的结点数,进行对比,发现i=3以及i=4的时候所得到的图是一样的,说明在i大于等于3的时候,实验结果误差较小以至于可以忽略不计,又进行了一次i=2的实验,结果发现结果也是几乎一样的,再进行进一步的实验,将i改为1,发现期望输出与实际输出存在明显区别,到后期才重合。所以,我觉得在这次的实验中,中间隐藏层结点数需要大于等于2比较合适。还有就是学习率的问题,刚开始实验,就只是改了隐藏节点,而忽略了学习率的问题。所以在原来的基础上,有改动了一下学习率,发现Figure1还是有很大地变动的,但是Figure2反而没什么不同。我觉得学习率的范围应该在0.1以内的。可是还是不知道学习率具体是起什么作用的。这次实验还是大概的完成了,但是对MATLAB还是有一些不懂的地方,仍需在接下来的实验中继续学习。


第二篇:实验报告


电子情报侦察分析综合实验

一、实验目的

领会专业的特色,掌握电子情报侦察分析的基本流程,理解雷达原理与雷达截获分析课程的联系。

二、实验要求

1、工具采用MATLAB

2、对实验结果进行理论分析,并给出自己的见解

三、实验计划

1、拟将18名学员分成两组,进行电子情报模拟对抗

2、每名学员编程产生雷达信号,汇集给教员,由教员随机配对,对产生的信号进行分析。

四、实验步骤和内容

4.1产生不同体制的雷达信号

1、实验原理

加强对简单脉冲信号、频率分集信号、频率捷变信号、重频参差信号、PRI抖动和PRI跳变信号、PRI滑变信号、PRI排定信号、脉组PRI变化信号、双脉冲信号、脉冲压缩信号等信号的直观认识;使学员从多角度描述雷达信号。

常见的雷达信号形式内容:

(1)简单脉冲信号

指载频、脉冲重复频率和脉冲宽度等三个参数均固定不变的信号

(2)频率分集信号

指一部雷达同时或在相隔很短的时间内发射多个载频以完成同一任务。频率分集信号中,不同载频的脉冲可以同时发射,也可以顺序发射。频率分集信号的频谱是各个不同频率脉冲频谱的合成。

(3)脉冲重复间隔(PRI)变化信号

PRI变化信号脉冲指脉冲的PRI在相邻脉冲之间或脉组之间变化的信号。

①重频参差信号。重频参差信号指PRI在相邻脉冲之间或脉组之间变化的信号

②PRI抖动信号和PRI跳变信号

PRI抖动指相邻脉冲的PRI在一定范围内抖动,即相邻的脉冲时间间隔不相等。一般PRI抖动的范围小于中心值的5%。

PRI跳变信号是指PRI在其平均值附近的有限几个点上按照某一分布规律跳动,其跳动范围可高达平均值得30%。

PRI抖动信号与PRI跳变信号的差别是,前者可以在无限个点上变化,后者只能在有限个点上变化;前者变化范围小,后者变化范围大。

③PRI滑变信号

这种信号的特点是PRI值周期性单调增加或下降,在两个极值之间周期性变化,PRI滑变信号可以消除盲距,还可以提供恒定高度范围内的仰角扫描,达到最佳性能。在这种应用中,最小PRI的值与最大的值之比大致等于仰角扫描系统的最小作用距离与最大作用距离之比。通常这个值为3~6。

④PRI排定信号

这种信号的特点是PRI值按排定的多个数值周期性的变化,其PRI数值一把为十几至二十几点。PRI排定信号一把用于多功能雷达。

⑤脉组PRI变化

脉组PRI变化信号是指信号在PRI为T1值上发射几个脉冲,然后又在PRI为T2值上发射几个脉冲,并且具有周期性。每组的脉冲数一般不少于四个。

(4) 双脉冲信号

这是指在每个PRI内发射两个脉冲,这两个脉冲的宽度可以相同,也可以不同,两脉冲间的间隔通常为脉冲宽度的几倍。

(5) 脉冲压缩信号

是指单脉冲内的频率呈线性变化。

2、实验要求

(1)、绘制出各种形式的雷达信号;

(2)、频率变化的信号要频率分析各雷达信号;

(3)、总结该雷达信号特征,说明选用该波形的目的以及这样波形的优缺点;

(4)、给出源代码。

4.2雷达信号截获与定位实验

1、实验原理:

不同雷达发射不同体制雷达信号,经电磁空间传播被雷达信号截获接收机接收,本实验,根据侦察方程模拟该过程。

仿真3~5部雷达信号,体制分别为简单体制、重频参差、脉压信号(线性调频)、频率捷变等,脉冲个数至少有100个;雷达信号统一为1;雷达天线增益函数为https://upload.fanwen118.com/wk-img/img100/3637188_1.jpg,设每部雷达波束20度,扫描速度10转/分;不考虑损耗与大气传播影响;

雷达信号截获接收机有1~3个,且同时截获雷达信号;

截获接收机天线采用全向天线;

2、实验要求:

(1)、仿真出雷达信号截获接收机截获的雷达信号;

(2)、给出雷达信号参数(载频、脉宽、到达时刻、脉幅)测量方法,并给出测量值;

(3)、根据截获的雷达信号,给出相应的定位方法,并给出位置信息。

4.3雷达信号分选实验

1、实验原理

对截获接收机的PDW输出流进行去交错处理,即雷达信号脉冲分选。按照分选采用的参数的不同分为多参数分选与PRI分选等。

多参数分选即按照到达方向、载频、脉宽等参数进行分选,也可以看作是多参数聚类分析。常用的聚类算法有K均值、最大最小方法以及神经网络方法等。

PRI分选即在多参数分选后,按照雷达脉冲到达时刻信息,获取脉冲间隔信息,然后采用统计、变换域等方法进行PRI分选。

2、实验内容

(1)选取任一种聚类方法,完成多参数雷达信号多参数分选;

(2)采用CDIF等PRI分选方法,完成PRI分选,重点观察重频参差信号的分选效果。

3、实验要求

(1)以实验二的结果进行该实验。

五、实验结果及分析

5.1产生不同体制的雷达信号

1.简单脉冲信号

产生的简单脉冲如图5.1所示。

https://upload.fanwen118.com/wk-img/img100/3637188_2.jpg

图5.1

参数设置如下:

2.线性调频脉冲信号

产生的脉冲如图5.2所示。

https://upload.fanwen118.com/wk-img/img100/3637188_3.jpg

图5.2

参数设置如下:

3.重频参差脉冲信号

产生的脉冲如图5.3所示。

https://upload.fanwen118.com/wk-img/img100/3637188_4.jpg

图5.3

参数设置如下:

4.重频参差脉冲信号

产生的脉冲如图5.4所示。

https://upload.fanwen118.com/wk-img/img100/3637188_5.jpg

图5.4

参数设置如下:

1.仿真出雷达信号截获接收机截获的雷达信号;

(1)仿真两个雷达接收机,其参数如下:

一号接收机:(50km ,62km) 天线有效面积:1

二号接收机:(1.5km ,6km) 天线有效面积:1.2

在信号接收过程中,由于四部雷达的距离不同,会产生不同的时延,且在传输过程中会夹杂着噪声,因此,在仿真接收信号中加入了时延和高斯噪声(信噪比为20,信噪比不能太大,否则有可能噪声将信号淹没,无法进行检测)。

加时延的代码如下:

c=3e8;

shiyan1=rand(1,4)/1e3;

for i=1:4

shiyan2(i)=shiyan1(i)+(R2(i)-R1(i))/c;

end

加噪声的代码如下:

SNR=20;

snr=1/(10^(SNR/10));

Y11=[zeros(1,fs*shiyan1(1)) Y1];len11=length(Y11);

noise11=sqrt(snr/2)*(randn(1,len11));

Y_11=Y11+noise11;

在接收信号时,由于四种信号的点数不同,需要以最长的信号为准,在其他信号后补零,以保证正确的叠加。

(2)两个接收机收到的雷达信号分别如图5.5和图5.6所示。

https://upload.fanwen118.com/wk-img/img100/3637188_6.jpg

图5.5

https://upload.fanwen118.com/wk-img/img100/3637188_7.jpg

图5.6

2. 给出雷达信号参数(载频、脉宽、到达时刻、脉幅)测量方法,并给出测量值。

(1)从接收到的信号中提取脉冲

思路步骤:先设定一个门限值,然后对信号进行判别,如果大于门限,则判为起始位置,若小于门限,则判为结束位置。其中需要注意的是:

A.门限的设置必须合理;

B.在判断起始位置和结束位置时,需要考虑脉内小于或大于门限的点,因此,通过将后边200个点求和,设定一个门限,判断是否为起始和结束位置。

为了判断门限更简便,首先将信号二值化处理,然后比较容易的设定门限。

信号二值化代码如下:

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

if summ>=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

实验结果如图5.7所示:测得脉冲个数为212个

https://upload.fanwen118.com/wk-img/img100/3637188_8.jpg

图5.7

(2)求脉宽

思路步骤:上一步将脉冲的起始位置和结束位置存放在一个矩阵b中,脉宽的测量只需用结束位置减去起始位置,求出点数,然后除以采样频率fs,即可得到脉宽。

求脉宽的代码如下:

a=b(:,2)-b(:,1); %a矩阵存放脉宽

figure;

stem(a);

axis([0,200,0,4000]);

实验结果如图:

https://upload.fanwen118.com/wk-img/img100/3637188_9.jpg

图5.8

通过观察可看出,测得的脉宽大量集中于6us,10us,20us,30us,还有部分零散分布在30—40us,与了雷达发射信号的脉宽近似符合,测量结果比较准确。

(3)求载频

思路步骤:求载频时,将每个脉冲做傅里叶变换,从中提取出最大幅度的即为载频位置,然后根据公式fc=k/N*fs得到载频。

需要注意的是,在傅里叶变换后,会有较大的直流分量的影响,因此需要将直流分量去除,然后再求最大值。

求载频的代码如下:

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/N*fs; %Fc矩阵存放载频

End

实验结果如图5.9所示:

https://upload.fanwen118.com/wk-img/img100/3637188_10.jpg

图5.9

通过观察可看出,测得的载频大量集中于5MHz,10MHz,15MHz,20MHz,还有部分零散分布在20—25MHz,与了雷达发射信号的载频近似符合,测量结果比较准确。

5.3雷达信号分选实验

思路步骤:根据测得的脉宽和载频,利用K均值聚类法,对测得的脉冲进行聚类分选,其难点在于K均值聚类。

K均值聚类的思想是,先人为选定四个与真实值较为接近的聚类中心,然后设定四个聚类种类,求出其余各点与聚类中心的距离,将这些距离求均值,如果此均值与原聚类中心的距离小于一个门限值,则说明此聚类中心比较合适,聚类结束;若此均值与原聚类中心的距离大于门限,则将此均值当做新的聚类中心,从头开始,在进行聚类,直到聚类结束,最终得到四类。

实验中较大的难点在于门限值的设置,需要根据每次得到的数据进行分析,设定一个合适的门限。

实验结果:

通过上表可以看出,四种体制的脉冲信号的脉宽和载频的测量值与实际值在误差允许的范围内较为精确,基本能够分选出四种体制信号的参数;但脉冲个数的聚类结果与实际值相差较大。

脉冲个数误差较大的原因主要有:a. 脉冲的重叠,产生很大脉宽的脉冲,在筛选脉冲时将其舍弃;

b. 聚类时,由于误差的存在,部分脉冲与聚类中心距离较大,在门限值之外,因此将其舍弃。

六、实验心得

本次实验是一个比较综合的实验,是对以前学习的五门课程知识的综合总结。虽然最终没有完成全部的实验内容,但通过完成的实验内容,我感觉收获已经很多。

实验中产生四种不同体制的雷达信号,这在电子战实验中已经做过了,但需要产生100个脉冲,因此需要理解脉冲重复间隔和时间的关系,根据采样定理,还需要使采样率大于2倍的载频。在这部分中,我对各种体制雷达信号的原理有了一定掌握,之前对于这些信号调制原理根本不懂。此外,在测量脉宽和载频时,加深了对信号点数与脉宽、载频之间的转换关系。

通过实验,我收获最大的是使用matlab编程的能力有了明显提高,这个实验的程序应该是我大学四年编程最长最综合的一次,在编程过程中不断理解原理,思考编程思路,如何将原理转变成程序来实现,不断调试程序、修改程序,最终得到较为满意的实验结果,这为我下学期的毕业设计打下了较好的基础。

实验过程中,我得到了教员以及一些能力水平比较高的同志的帮助和指导,可以看出自己与某些同志之间的差距,这对我的帮助也是很大的,在感谢教员和同志们的同时,我也会从整个实验过程中总结经验,在今后的学习中弥补不足。

七、源代码附录

%% %%%%%%%%简单脉冲雷达信号%%%%%%%%

clc

clear all

close all

PW=6e-6; %脉宽

fs=10e7; %采样频率

fc=10e6; %载频

prt=30e-6;%脉冲重复间隔

pri=1/prt; %脉冲重复频率

t=0:1/fs:100*prt;

y=cos(2*pi*fc*t-0.5);

duty=100*PW/prt; %占空比

s=(square(2*pi*pri*t,duty)+1)/2; %产生方波

Y1=y.*s;

plot(t*1e6,Y1);

xlabel('t/us');ylabel('幅度');title('简单脉冲信号');

%% %%%%%%%%%%%线性调频雷达信号%%%%%%%%%%

pw=20e-6; %发射脉宽

B=10e6; %调频带宽

% fs=10e7; %采样频率

fc=20e6; %载频

prt=70e-6;

pri=1/prt; %脉冲重频

t=0:1/fs:prt;

f0=rectpuls(t-pw/2,pw);

Fc=f0.*exp(j*2*pi*(fc*t+B/pw*t.*t));

% figure

% plot(abs(fft(Fc)));

% figure;

% plot(t*1e6,real(Fc));title('线性调频信号');xlabel('t/us');

Y2=repmat(Fc,1,100);

figure;

plot(real(Y2));title('线性调频脉冲发射信号');

%% %%%%%%%%%PRI参差%%%%%%%%%

fc=5e6; %载频

tao=10e-6; %脉宽

prt1=100e-6;

prt2=200e-6;

prt3=300e-6; %脉冲间隔

% fs=3*fc; %采样频率

prt=prt1+prt2+prt3; %参差脉冲间隔

pri=1/prt; %参差脉冲重频

t=0:1/fs:33*prt;

zhankong=tao/prt*100; %占空比

x=sin(2*pi*fc*t);

y =(square(2*pi*pri*t,zhankong)+1)/2;

s1=(square(2*pi* pri *(t-prt1), zhankong)+1)/2;

s2=(square(2*pi* pri *(t-prt1-prt2), zhankong)+1)/2;

s3=(square(2*pi* pri *(t-prt1-prt2-prt3), zhankong)+1)/2;

Y3=x.*s1+x.*s2+x.*s3;

figure;

plot(t*1e6,abs(Y3));title('PRI参差信号');

xlabel('t/us');ylabel('幅度');

%% % %%%%%%%重频抖动信号%%%%%%

fc=15e6; %载频

pw=30e-6;%脉宽

prix=(rand(1,4)*0.5*50+50)*1e-6;

pri1=prix(1);pri2=prix(2);pri3=prix(3);pri4=prix(4);

pri=pri1+pri2+pri3+pri4;

prt=1/pri;

zhankong=pw/pri*100; %占空比

t=0:1/fs:25*pri;

x=sin(2*pi*fc*t);

y1=(square(2*pi*prt*t,zhankong)+1)/2;

y2=(square(2*pi*prt*(t-pri1),zhankong)+1)/2;

y3=(square(2*pi*prt*(t-pri1-pri2),zhankong)+1)/2;

y4=(square(2*pi*prt*(t-pri1-pri2-pri3),zhankong)+1)/2;

y5=(square(2*pi*prt*(t-pri1-pri2-pri3-pri4),zhankong)+1)/2;

Y4=x.*y2+x.*y3+x.*y4+x.*y5;

figure;

plot(t*1e6,abs(Y4));

title('PRI抖动雷达脉冲信号');

xlabel('t/us');ylabel('幅度');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 雷达信号截获

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4

%%%设定雷达和接收机的坐标

% clc;close all;clear all;

leidax=[1e4 2.3e4 3.5e4 7e4];

leiday=[4e4 1.8e4 4.5e4 3e4];

jieshoux=[5e4 6.2e4];

jieshouy=[1.5e3 6e3];

% stem(leidax,leiday);hold on;

% stem(jieshoux,jieshouy,'r');

% axis([0,1e5,0,5e4]);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 计算接收机与雷达的距离

%%%%%%%%与接收机1的距离%%%%%%

for i=1:4

R1(i)=sqrt((leidax(i)-jieshoux(1))^2+(leiday(i)-jieshouy(1))^2);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%与接收机2的距离%%%%%%

for i=1:4

R2(i)=sqrt((leidax(i)-jieshoux(2))^2+(leiday(i)-jieshouy(2))^2);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%

Pt=[1e7 2e7 3e7 4e7];%各雷达的发射功率

Ar=[1 1.2];%两个接收机的有效接收面积

Gt=[30 31 32 33];

Gtt=10.^(Gt./10); %各雷达天线增益

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 接收机的接收功率

for i=1:4

Pr1(i)=(Pt(i).*Gtt(i)*Ar(1))./(4*pi*(R1(i)^2));%求接收机1的接收功率

end

for i=1:4

Pr2(i)=(Pt(i).*Gtt(i)*Ar(2))./(4*pi*(R1(i)^2));%求接收机2的接收功率

end

%% 加时沿

c=3e8;

shiyan1=rand(1,4)/1e3; %产生接收机1的随机时延

for i=1:4

shiyan2(i)=shiyan1(i)+(R2(i)-R1(i))/c; %接收机2的时延与时延1有关

end

%% 加噪声

SNR=20; %信噪比

snr=1/(10^(SNR/10));

% noise=-30;

%%%%接收机1接收的信号

Y11=[zeros(1,fs*shiyan1(1)) Y1];len11=length(Y11); %%加时延

Y12=[zeros(1,fs*shiyan1(2)) Y2];len12=length(Y12);

Y13=[zeros(1,fs*shiyan1(3)) Y3];len13=length(Y13);

Y14=[zeros(1,fs*shiyan1(4)) Y4];len14=length(Y14);

% noise11=awgn(Y11,noise);

% noise12=awgn(Y12,noise);

% noise13=awgn(Y13,noise);

% noise14=awgn(Y14,noise);

noise11=sqrt(snr/2)*(randn(1,len11));

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;close all;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

if summ>=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; %Fc矩阵存放载频

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;

while panjue_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);

if jljl_min(n)>500

continue;

end

if jljl(1)==jljl_min(n)

jlzl(1,m1)=n;

m1=m1+1;

elseif jljl(2)==jljl_min(n)

jlzl(2,m2)=n;

m2=m2+1;

elseif jljl(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;

for nn=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

更多相关推荐:
神经网络实验报告

实验报告课程名称实验名称实验仪器系别专业班级学号学生姓名实验日期成绩指导老师BP神经网络实验一级倒立摆实验matlab一级倒立摆实验台自动化20xx年4月8日一级倒立摆实验实验目的1熟悉MatlabSimuli...

BP神经网络实验报告

BP神经网络实验报告一实验目的1熟悉MATLAB中神经网络工具箱的使用方法2通过在MATLAB下面编程实现BP网络逼近标准正弦函数来加深对BP网络的了解和认识理解信号的正向传播和误差的反向传递过程二实验原理由于...

神经网络实验报告

电气工程学院神经网络实验报告院系电气工程学院专业电气工程及其自动化实验二基于BP网络的多层感知器一实验目的1理解基于BP网络的多层感知器的工作原理2通过调节算法参数的了解参数的变化对BP多层感知器训练的影响3了...

BP神经网络实验报告

作业8编程题实验报告一实验内容实现多层前馈神经网络的反向传播学习算法使用32节上机生成的数据集对神经网络进行训练和测试观察层数增加和隐层数增加是否会造成过拟合二实验原理1前向传播以单隐层神经网络为例三层神经网络...

BP神经网络实验报告

BP神经网络一实验目的初步熟悉MATLAB工作环境熟悉命令窗口学会使用帮助窗口查找帮助信息二实验内容一Matlab程序如下读取训练数据f1f2f3f4classtextread39trainDatatxt393...

神经网络数学建模实验报告

云南财经大学实验报告系院统计与数学学院专业信息与计算科学班级信计091学号20xx05001465姓名课程名称数学建模实验时间20xx年6月20日指导教师云南财经大学教务处制123456

基于BP神经网络的图像压缩--神经网络实验报告

一实验名称基于BP神经网络的图像压缩二实验目的1熟悉掌握神经网络知识2学习多层感知器神经网络的设计方法和Matlab实现3进一步了解掌握图像压缩的方式方法分析仿真图像压缩效果三实验要求1学习神经网络的典型结构2...

20xx年数模实验报告《用人工神经网络对人口进行预测》

实验七用人工神经网络对人口进行预测20xx1216一问题表述某地区19xx20xx年的户籍人口统计数据如下年20xx年的人口数进行预测二实验过程与结果含程序代码第一步数据预处理由于原始数属于时间序列但是神经网络...

数据挖掘神经网络报告

西安邮电大学计算机学院课内实验报告实验名称神经网络专业名称班级学生姓名学号8实验日期20xx年10月20日一实验目的及实验环境1熟悉SPSSClementine软件安装功能和操作特点2了解SPSSClement...

神经网络实验指导书

人工智能的数学基础实验指导实验一神经网络一实验目的1巩固对matlab等编程工具的知识2学会使用matlab示例程序辅助对神经网络中神经元与反向传播网络的学习3学会通过matlab等编程工具实现简单的神经元为今...

BP神经网络仿真实验指导书

BP神经网络设计指导书一实验目的1熟悉神经网络的特征结构以及学习算法2了解神经网络的结构对控制效果的影响3掌握用MATLAB实现神经网络控制系统仿真的方法二实验原理人工神经网络ANNArtificialNeur...

计算机网络实验报告

计算机网络实验报告学号0604305015姓名杨宁班级06计算机专业计算机科学与技术指导教师刘海雄实验名称IE及Outlook设置与应用实验目的使学生学会设置和使用IE浏览器以及outlook收发邮件实验内容与...

神经网络实验报告(18篇)