Matlab课程设计报告

时间:2024.4.20

          

《 MATLAB 实践 》

课程设计

学生姓名:      林根在           

    号:      110800323          

专业班级:  电子信息工程(3)班    

指导教师:    郑晓明             

二○一一 626

       

1.设计目的…………………………………………………1

2.题目分析…………………………………………………1

3.总体设计.............................................................................2

4.具体设计..............................................................................3

5.结果分析..............................................................................10

6.心得体会..............................................................................10

1、设计目的:运用MATLAB实现MATLAB的GUI程序设计。

2、题目分析:

课程设计题目:MATLAB GUI的音乐键盘仿真

课程设计的基本要求:

1)熟悉和掌握MATLAB 程序设计方法。

2)掌握MATLAB GUI 程序设计。

3)学习音乐合成基本知识。

设计分析:

这次使用的设计软件是MATLAB的GUI模块,要设计一个音乐键盘要知道一个最简单的键盘本身要有36个发音键,既21个音阶和15个辅音阶。于是就要在界面上画出36个pushbutton键,再根据其他要求的功能设计出其他相应的模块。

模拟键盘发音是使用音频函数soundsc将不同频率的函数以声音的模式表现出来,而每个音阶相差频率f=440*2^2/12;音阶与相应的辅音阶相差频率f=440*2^1/12。有了音乐合成的这些基本知识后便可根据自己需要设计界面根据功能编写相应的回调函数。

课程设计的内容:

学习MATLAB GUI程序设计,设计和实现一个音乐键盘仿真系统。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。

1)设计音乐键盘GUI界面,实现单音键盘的发声。

2)实现键盘的双音多频,即每个键盘对应低音频组的一个频率和高音频组的一个频率,实现按键的发出双音。

3)能改变音乐包络形式,实现音型的改变。

4)能够演奏一段音乐。

3、总体设计

软件的总体设计框架和功能模块化分:

设全局变量,编写子函数,根据各个模块功能的需要编写相应的回调函数。模块一是各个子函数的书写,模块二是各个按键发音的子函数回调函数,模块三是单双音控制和波形控制回调函数的书写,模块四是波形显示回调函数的书写;第五模块是键盘控制回调函数;模块六是Text文档歌曲播放回调函数;Wav格式歌曲播放回调函数;Avi格式MV播放回调函数;这三个回调函数的书写。模块七是Wav格式歌曲暂停,继续,停止按键控制回调函数的书写。

整体软件结构如图所示:

 

         

 

                                                                                         

 

                           

 

                  

 

4、具体设计:

外板设计图如下:

4.1:子函数DS(A):

function DS(A)

global Y;

global B;

global n;

global ff;

f=440*2^((A-49)/12);

n=0:1/8000:1;

if B==1

    x=exp(-2*n);

elseif B==2

       x=sin(-2*n);

elseif B==3

       x=sign(sin(-2*n));

end 

if Y==1

   ff=x.*sin(f*2*pi*n)+0.5*x.*sin(f*4*pi*n);

elseif  Y==0

        ff=x.*sin(f*2*pi*n);

end

soundsc(ff);

hold off;

axes1_CreateFcn();

soundsc(ff); 实现将频率函数ff=x.*sin(f*2*pi*n);或者 ff=x.*sin(f*2*pi*n)+0.5*x.*sin(f*4*pi*n);作为音频信号发出声音,因为f=440*2^((A-49)/12);所以赋予不同的A值就可得到不同的频率发出不同的声音,同时x=exp(-2*n);  x=sin(-2*n);  x=sign(sin(-2*n)); 实现指数波,正弦波,方波等不同的包络改变声音的性质。

axes1_CreateFcn();实现将每个音的波形在axes1轴形坐标中画出来,调用的是波形显示回调函数:

global n;

global ff;

plot(n,ff);

axis([0 1 -1.2 1.2 ]);

如图所示:

4.2:例:function pushbutton1_Callback(hObject, eventdata, handles);

DS(28);

这是相应按键发音的函数,调用子函数DS(A);赋予不同的A值发出不同音阶;

4.3控制波形的回调函数:

global B;

GZ=get(handles.uipanel2,'selectedobject');

LGZ=get(GZ,'tag');

switch LGZ

case 'zhishu'

    B=1;

case 'zhengxian'

    B=2;

case 'fangbo'

    B=3;

   otherwise

    B=1;

end

由子函数DS(A)知道当B取不同值时x取相应不同的包络函数既当按下指数键是相应的波形改变为指数包络波形,同理按下其他键也一样;

如图所示:

4.4单双音切换回调函数:

global Y;

de=get(handles.uipanel1,'selectedobject');

fe=get(de,'tag');

switch fe

case 'danyin'

   Y=0;

case 'shuangyin'

    Y=1;

end

与波形切换回调函数一样,根据子函数DS(A);知当Y取不同值时音频取不同的函数;既当按下单音按钮时发单频率音,当按下双音按钮时发双音,如图所示:

4.5键盘控制回调函数function pushbutton1_KeyPressFcn(hObject, eventdata, handles)

例:if get(gcf,'CurrentCharacter')==81

  pushbutton1_Callback();

end

我个人是将整个键盘控制回调函数写在控件一的按键回调函数中,因此要用键盘是要先按下键盘上的Q字母键,键盘上的每个音对应的键盘上的那些字母数字我都标在上面,可以很清楚的看到。如图所示:

4.6text文件播放函数:function Untitled_3_Callback(hObject, eventdata, handles)

[name,path]=uigetfile('*.*','');

file=sprintf('%s%s',path,name);

de=importdata(file);

for k=1:length(de)

    yinyue(de(k),de(k+length(de)))

    axes1_CreateFcn();

end

该函数设置了打开路径,根据简谱需要的发音与节拍,在text文本文档中填入相应的数字调用子函数yinyue(a,b);实现音乐的播放;

function yinyue(a,b)

f=440*2^((a-49)/12);

n=0:1/8000:b*0.5;

x=exp(-2*n);

ff=x.*sin(f*2*pi*n);

soundsc(ff);

如图:

选择要播放的text文件播放音乐;

Wav格式歌曲播放函数:function Untitled_4_Callback(hObject, eventdata, handles)

global F;

[name,path]=uigetfile('*.*','');

F=sprintf('%s%s',path,name);

dashi(F);

该函数使用wavread函数实现wav格式音乐文件的播放,调用子函数dashi(file);

function dashi(file)

global player;

[y,fs,nbits,readinfo]=wavread(file);

player = audioplayer(y, fs);

play(player);

相应的暂停,停止,回复播放按键的控制如下:

function pushbutton38_Callback(hObject, eventdata, handles)

global player;

pause(player);

function pushbutton39_Callback(hObject, eventdata, handles)

global player;

resume(player);

function pushbutton40_Callback(hObject, eventdata, handles)

global player;

stop(player);

如图所示:

Avi格式视频播放函数function Untitled_5_Callback(hObject, eventdata, handles)

[name,path]=uigetfile('*.*','');

file=sprintf('%s%s',path,name);

mplay(file,24);

该函数设置路径选择Avi格式视频播放:播放函数mplay(file,24);如图所示:

5、结果分析

基本上要求的内容都能实现,但使用键盘发声时如果弹得太快,函数执行的速度跟不上容易形成音阶与节拍对不上位,在用其演奏歌曲时有点欠缺。另外在拓展的功能播放视频时无法将食品中的声音一起播出,我有上网查过好像MATLAB现在还无法实现播放视频连带视频中的声音。第三个欠缺的功能就是axes1轴形坐标显示,如果音频改变的速度过快axes1轴形坐标是无法跟上改变的速度的,因此当播放text文本文档中的音乐时axes1轴形坐标中是显示不出相应音频变化的。对于这些缺点我有试着去改正但是好像不管怎样改变程序都避免不了这些缺点,可能是MATLAB的这些方面的功能并不是很完整或者可能有更好的方法只是我还没发现。

6、心得体会

说实在的这次的MATLAB实验的题目比较令人感兴趣,无论是做PS,音乐键盘还是数据库都让人比较有兴趣去尝试。跟以往很学术性的实验课设题目大大不同,做完实验每个人都可以利用自己的作品要么玩弄自己的照片,要嘛编歌或者自弹自唱等!模板的设计多种做样格局自己的审美可以设计不同的界面。查数据

编程序的过程也可以让自己学到许多知识同时也培养了自己的动手能力,总之,通过这次试验和同学的交流学到了很多东西,培养了动手实验的兴趣也很有成就感。

参考书目:(五号,宋体加粗)

 [ 1 ]..................................................MATLAB实用教程(第二版)电子工业出版社

 [ 2 ]……………………《信号与系统—MATLAB综合实验》 谷源涛 高等教育出版社


第二篇:基于matlab的2PSK系统的课程设计报告


通信原理

课程设计报告

               姓    名:吴彭    

               学    号:08042235

               专    业:通信工程

               院    系:信息工程学院

               同组人:蔡臻,何国峰,王列

一、题目名称     2PSK系统的设计

二、题目意义

    运用MATLAB编程实现2PSK调制解调过程,并且输出其调制及解调过程中的波形,讨论其调制和解调效果。

三、设计原理

数字信号的传输方式分为基带传输和带通传输,在实际应用中,大多数信道具有带通特性而不能直接传输基带信号。为了使数字信号在带通信道中传输,必须使用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。这种用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。

数字调制技术的两种方法:①利用模拟调制的方法去实现数字式调制,即把数字调制看成是模拟调制的一个特例,把数字基带信号当做模拟信号的特殊情况处理;②利用数字信号的离散取值特点通过开关键控载波,从而实现数字调制。这种方法通常称为键控法,比如对载波的相位进行键控,便可获得相移键控(PSK)基本的调制方式。 

图1  相应的信号波形的示例 

             1          0        1

 

调制原理            

数字调相:如果两个频率相同的载波同时开始振荡,这两个频率同时达到正最大值,同时达到零值,同时达到负最大值,它们应处于"同相"状态;如果其中一个开始得迟了一点,就可能不相同了。如果一个达到正最大值时,另一个达到负最大值,则称为"反相"。一般把信号振荡一次(一周)作为360度。如果一个波比另一个波相差半个周期,我们说两个波的相位差180度,也就是反相。当传输数字信号时,"1"码控制发0度相位,"0"码控制发180度相位。载波的初始相位就有了移动,也就带上了信息。

相移键控是利用载波的相位变化来传递数字信息,而振幅和频率保持不变。在2PSK中,通常用初始相位0和π分别表示二进制“1”和“0”。因此,2PSK信号的时域表达式为

(t)=Acost+

其中,表示第n个符号的绝对相位:

=                 

因此,上式可以改写为

                

图2  2PSK信号波形

解调原理

2PSK信号的解调方法是相干解调法。由于PSK信号本身就是利用相位传递信息的,所以在接收端必须利用信号的相位信息来解调信号。下图2-3中给出了一种2PSK信号相干接收设备的原理框图。图中经过带通滤波的信号在相乘器中与本地载波相乘,然后用低通滤波器滤除高频分量,在进行抽样判决。判决器是按极性来判决的。即正抽样值判为1,负抽样值判为0.

2PSK信号相干解调各点时间波形如图 3 所示. 当恢复的相干载波产生180°倒相时,解调出的数字基带信号将与发送的数字基带信号正好是相反,解调器输出数字基带信号全部出错.

图 32PSK信号相干解调各点时间波形
    这种现象通常称为"倒π"现象.由于在2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信号的相干解调存在随机的"倒π"现象,从而使得2PSK方式在实际中很少采用.

四、源程序及相应实验结果

clear all;

close all;

clc;

max=10

g=zeros(1,max);

g=randint(1,max);%长度为max的随机二进制序列

cp=[];mod1=[];f=2*2*pi;t=0:2*pi/199:2*pi;

for n=1:length(g);

    if g(n)==0;

        A=zeros(1,200);%每个值200个点         

    else g(n)==1;

        A=ones(1,200);         

    end

    cp=[cp A]; %s(t),码元宽度200 

    c=cos(f*t);%载波信号 

    mod1=[mod1 c];%与s(t)等长的载波信号,变为矩阵形式

end

figure(1);subplot(4,2,1);plot(cp);grid on;

axis([0 200*length(g) -2 2]);title('二进制信号序列');

cm=[];mod=[];

for n=1:length(g);

    if g(n)==0;

        B=ones(1,200);%每个值200个点

        c=cos(f*t);  %载波信号

    else g(n)==1;

        B=ones(1,200);

        c=cos(f*t+pi);  %载波信号

    end

    cm=[cm B]; %s(t),码元宽度200  

    mod=[mod c]; %与s(t)等长的载波信号

end

tiaoz=cm.*mod;%e(t)调制

figure(1);subplot(4,2,2);plot(tiaoz);grid on;

axis([0 200*length(g) -2 2]);title('2PSK调制信号');

figure(2);subplot(4,2,1);plot(abs(fft(cp)));

axis([0 200*length(g) 0 400]);title('原始信号频谱');

figure(2);subplot(4,2,2);plot(abs(fft(tiaoz)));

axis([0 200*length(g) 0 400]);title('2PSK信号频谱');

%带有高斯白噪声的信道

tz=awgn(tiaoz,10);%信号tiaoz中加入白噪声,信噪比为10

figure(1);subplot(4,2,3);plot(tz);grid on

axis([0 200*length(g) -2 2]);title('通过高斯白噪声信道后的信号');

figure(2);subplot(4,2,3);plot(abs(fft(tz)));

axis([0 200*length(g) 0 400]);title('加入白噪声的2PSK信号频谱');

jiet=2*mod1.*tz;%同步解调

figure(1);subplot(4,2,4);plot(jiet);grid on

axis([0 200*length(g) -2 2]);title('相乘后信号波形')

figure(2);subplot(4,2,4);plot(abs(fft(jiet)));

axis([0 200*length(g) 0 400]);title('相乘后信号频谱');

%低通滤波器

fp=500;fs=700;rp=3;rs=20;fn=11025;

ws=fs/(fn/2); wp=fp/(fn/2);%计算归一化角频率

[n,wn]=buttord(wp,ws,rp,rs);%计算阶数和截止频率

[b,a]=butter(n,wn);%计算H(z)

figure(4);freqz(b,a,1000,11025);subplot(2,1,1);

axis([0 4000 -100 3 ])

title('LPF幅频相频图');

jt=filter(b,a,jiet);

figure(1);subplot(4,2,5);plot(jt);grid on

axis([0 200*length(g) -2 2]);title('经低通滤波器后信号波形')

figure(2);subplot(4,2,5);plot(abs(fft(jt)));

axis([0 200*length(g) 0 400]);title('经低通滤波器后信号频谱');

%抽样判决

for m=1:200*length(g);

    if jt(m)<0;

        jt(m)=1;      

    else jt(m)>=0;

        jt(m)=0;         

    end

end

figure(1);subplot(4,2,6);plot(jt);grid on

axis([0 200*length(g) -2 2]);title('经抽样判决后信号s^(t)波形')

figure(2);subplot(4,2,6);plot(abs(fft(jt)));

axis([0 200*length(g) 0 400]);title('经抽样判决后信号频谱');

更多相关推荐:
Matlab课程设计报告

至诚学院MATLAB实践课程设计学生姓名学号专业班级2指导教师页MATLAB课程设计第1页共1二一四年四月三十日目录1设计目的第3页2题目分析第3页3总体设计第3页4具体设计第4页5小结和心得第15页页MATL...

Matlab课程设计报告

课程设计报告设计题目专业班级学号姓名指导教师水准网平差程序设计测绘工程测绘100206束蝉芳起屹日期20xx年7月1日20xx年7月8日南京工业大学测绘学院目录1课程设计目的意义12课程设计任务和内容13程序代...

matlab课程设计报告书

课程设计题目学院专业班级姓名指导教师Matlab应用课程设计信息工程学院电子信息工程桂林20xx年12月13日Matlab应用课程设计任务书学生姓名专业班级指导教师桂林工作单位信息工程学院题目Matlab运算与...

matlab课程设计报告

电子信息系统仿真设计课程设计报告课题电子信息系统仿真设计姓名学号成绩班级指导教师开课时间20xx20xx学年第1学期目录一设计题目二主要内容三具体要求四进度安排五成绩评定六正文1三维绘图2信号的时域和频域表示3...

matlab仿真课程设计报告

一、课程设计内容此次课程设计的主要内容是2ASK调制信号仿真。二、设计原理及步骤:(一)设计原理2ASK是利用代表数字信息0或1的基带矩形脉冲去键控一个连续的载波,使载波时断时续的输出。有载波输出时表示发送1,…

一个matlab课程设计报告例子

目录目录1第1章课程设计的目的和意义2一引言3二课程设计的意义3三课程设计的要求4第2章需求分析和总体设计4一任务描述41课程设计目标42功能描述43性能描述4二任务设计51计算器52画图5第3章编码7一代码编...

武汉理工大学Matlab课程设计报告书

武汉理工大学Matlab课程设计说明书课程设计题目学院专业班级姓名指导教师年月日武汉理工大学Matlab课程设计说明书课程设计任务书学生姓名胡健指导教师李景松祝立华题目Matlab运算与应用设计1初始条件1Ma...

matlab课程设计报告

MATLAB仿真软件的使用姓名专业班级学号指导老师时间用Mtlab编程实现句柄图形应用摘要本文利用Mtlab的算法设计和程序设计的原理和方法着重介绍了句柄图形的实际运用根据提出的实际问题即画出沿曲线移动的小球给...

matlab设计报告

武汉理工大学Matlab应用实践课程设计说明书课程设计任务书学生姓名尹龙剑专业班级电信1005班指导教师祝立华阙大顺工作单位信息工程学院课程设计名称Matlab应用课程设计课程设计题目Matlab运算与应用设计...

matlab实验报告

重庆交通大学学生实验报告实验课程名称专业综合实验开课实验室交通运输工程实验教学中心学院交通运输年级二年级专业班交通运输1班学生姓名学号63120xx20开课时间20xx至20xx学年第2学期

matlab实验报告

MATLAB实践课程设计学生姓名学号专业班级通信工程指导教师郑晓明二一二年四月二十二日目录1设计目的32题目分析33总体设计34具体设计35小结和心得106参考书目111设计目的MATLAB语言是集数值计算图形...

matlab实验报告

南京工程学院课程设计说明书论文题目课程名称院系部中心专业班级学生姓名学号设计地点指导教师设计起止时间20xx年12月8日至20xx年12月12日一课程设计目的和要求1综合运用信号与线性系统通信原理以及matla...

matlab课程设计报告(11篇)