现代信号处理大作业题目+答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

研究生“现代信号处理”课程大型作业

(以下四个题目任选三题做)

1. 请用多层感知器(MLP )神经网络误差反向传播(BP )算法实现异或问题(输入为

[00;01;10;11]X T =,要求可以判别输出为0或1)

,并画出学习曲线。其中,非线性函数采用S 型Logistic 函数。

2. 试用奇阶互补法设计两带滤波器组(高、低通互补),进而实现四带滤波器组;并画出其频响。滤波器设计参数为:F p =1.7KHz , F r =2.3KHz , F s =8KHz , A rmin ≥70dB 。

3. 根据《现代数字信号处理》(姚天任等,华中理工大学出版社,2001)第四章附录提供的数据(pp.352-353),试用如下方法估计其功率谱,并画出不同参数情况下的功率谱曲线:

1) Levinson 算法

2) Burg 算法

3) ARMA 模型法

4) MUSIC 算法

4. 图1为均衡带限信号所引起失真的横向或格型自适应均衡器(其中横向FIR 系统长M =11), 系统输入是取值为±1的随机序列)(n x ,其均值为零;参考信号)7()(-=n x n d ;信道具有脉冲响应:

12(2)[1cos()]1,2,3()20 n n h n W π-⎧+=⎪=⎨⎪⎩其它

式中W 用来控制信道的幅度失真(W = 2~4, 如取W = 2.9,3.1,3.3,3.5等),且信道受到均

值为零、方差001.02=v σ(相当于信噪比为30dB)的高斯白噪声)(n v 的干扰。试比较基

于下列几种算法的自适应均衡器在不同信道失真、不同噪声干扰下的收敛情况(对应于每一种情况,在同一坐标下画出其学习曲线):

1) 横向/格-梯型结构LMS 算法

2) 横向/格-梯型结构RLS 算法

并分析其结果。

图1 横向或格-梯型自适应均衡器

参考文献

[1] 姚天任, 孙洪. 现代数字信号处理[M]. 武汉: 华中理工大学出版社, 2001

[2] 杨绿溪. 现代数字信号处理[M]. 北京: 科学出版社, 2007

[3] S. K. Mitra. 孙洪等译. 数字信号处理——基于计算机的方法(第三版)[M]. 北京: 电子工

业出版社, 2006

[4] S.Haykin, 郑宝玉等译. 自适应滤波器原理(第四版)[M].北京: 电子工业出版社, 2003

[5] J. G. Proakis, C. M. Rader, F. Y. Ling, etc. Algorithms for Statistical Signal Processing [M].

Beijing: Tsinghua University Press, 2003

一、请用多层感知器(MLP)神经网络误差反向传播(BP)算法实现异或问题(输入为[00;01;10;11]

,要求可以判别输出为0或1),并画出学习曲线。其X T

中,非线性函数采用S型Logistic函数。

1、原理:

反向传播(BP)算法:

(1)、多层感知器的中间隐层不直接与外界连接,其误差无法估计。

(2)、反向传播算法:从后向前(反向)逐层“传播”输出层的误差,以间接算

出隐层误差。分两个阶段:

正向过程:从输入层经隐层逐层正向计算各单元的输出

反向过程:由输出层误差逐层反向计算隐层各单元的误差,并用此误差修正前层的权值。

2、流程图:

j

3、程序:

%使用了3层结构,第二层隐藏层4个单元。2,3层都使用Logisitic函数。%训练xor数据。

function mlp()

f= fopen('XOR.txt');

A = fscanf(f, '%g',[3 inf]);

A = A;

p = A(1:2, :)';%训练输入数据

t = A(3, :)';%desire out

[train_num , input_scale]= size(p) ;%规模

fclose(f);

accumulate_error=zeros(1,3001);

alpha = 0.5;%学习率

threshold = 0.005;% 收敛条件∑e^2 < threshold

wd1=0; wd2=0;

bd1=0; bd2=0;

circle_time =0;

hidden_unitnum = 4; %隐藏层的单元数

w1 = rand(hidden_unitnum,2);%4个神经元,每个神经元接受2个输入w2 = rand(1,hidden_unitnum);%一个神经元,每个神经元接受4个输入b1 = rand(hidden_unitnum,1);

b2 = rand(1,1);

while 1

temp=0;

circle_time = circle_time +1;

for i=1:train_num

%前向传播

a0 = double ( p(i,:)' );%第i行数据

n1 = w1*a0+b1;

a1 = Logistic(n1);%第一个的输出

n2 = w2*a1+b2;

a2 = Logistic(n2);%第二个的输出

a = a2;

%后向传播敏感性

e = t(i,:)-a;

accumulate_error(circle_time) = temp + abs(e)^2;

temp=accumulate_error(circle_time);

s2 = F(a2)*e; %输出层delta值

s1 = F(a1)*w2'*s2;%隐层delta值

%修改权值

wd1 = alpha .* s1*a0';

wd2 = alpha .* s2*a1';

w1 = w1 + wd1;

w2 = w2 + wd2;

bd1 = alpha .* s1;

bd2 = alpha .* s2;

b1 = b1 + bd1;

b2 = b2 + bd2;

end;%end of for

if accumulate_error(circle_time) <= threshold| circle_time>3001 %then break;

end;%end of if

end;%end of while

plot(accumulate_error,'m');

grid;

xlabel('学习次数')

ylabel('误差')

disp(['计算误差= ',num2str(accumulate_error(circle_time))] ) ;

disp(['迭代次数= ',num2str(circle_time)]);

%测试

a0 = double ([0 0]');

n1 = w1*a0+b1;

a1 = Logistic(n1);

n2 = w2*a1+b2;

a2 = Logistic(n2);

a = a2;

disp(['0 0 = ',num2str(a)]);

a0 = double ([0 1]');

n1 = w1*a0+b1;

相关文档
最新文档