文档视界 最新最全的文档下载
当前位置:文档视界 › 实验项目3 组件与事件处理第2部分

实验项目3 组件与事件处理第2部分

实验项目3 组件与事件处理第2部分
实验项目3 组件与事件处理第2部分

实验项目3 第2部分

组件与事件处理(2)

[实验目的]

1、进一步掌握java组件及事件编程的各种方法。

2、掌握对话框的编制和事件处理方法。

3、掌握鼠标焦点事件、鼠标事件及键盘事件的处理方法。

4、掌握Swing组件及事件编程方法。

[实验要求]

1、复习理论教学中所学的内容。

2、认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。

3、认真总结实验并书写实验报告。

[实验课时] 2学时

[实验教学方式] 学生上机实验,教师随堂指导。

[实验内容]

1、字体对话框:请读懂下面模板代码,将其补充完整并调试运行。

//FontFamilyNames.java

import java.awt.GraphicsEnvironment;

public class FontFamilyNames

{ String fontName[];

public String [] getFontName()

{ GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();

fontName=ge.getAvailableFontFamilyNames();

return fontName;

}

}

//FontDialog.java

import java.awt.event.*;

import java.awt.*;

import javax.swing.JLabel;

public class FontDialog extends Dialog implements ItemListener,ActionListener { FontFamilyNames fontFamilyNames;

int fontSize=38;

String fontName;

Choice fontNameList;

JLabel label;

Font font;

Button yes,cancel;

static int YES=1,NO=0;

int state=-1;

FontDialog(Frame f)

{ super(f);

fontFamilyNames=new FontFamilyNames();

【代码1】 //对话框设置为有模式

yes=new Button("Yes");

cancel=new Button("cancel");

yes.addActionListener(this);

cancel.addActionListener(this);

label=new JLabel("hello,奥运",JLabel.CENTER); fontNameList=new Choice();

String name[]=fontFamilyNames.getFontName();

for(int k=0;k

{ fontNameList.add(name[k]);

}

fontNameList.addItemListener(this);

add(fontNameList,BorderLayout.NORTH);

add(label,BorderLayout.CENTER);

Panel pSouth=new Panel();

pSouth.add(yes);

pSouth.add(cancel);

add(pSouth,BorderLayout.SOUTH);

setBounds(100,100,280,170);

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e) { state=NO;

setVisible(false);

}

}

);

validate();

}

public void itemStateChanged(ItemEvent e)

{ fontName=(String)fontNameList.getSelectedItem();

font=new Font(fontName,Font.BOLD,fontSize);

label.setFont(font);

label.repaint();

validate();

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==yes)

{ state=YES;

【代码2】 //对话框设置为不可见

}

else if(e.getSource()==cancel)

{ state=NO;

【代码3】 //对话框设置为不可见

}

}

public int getState()

{ return state;

}

public Font getFont()

{ return font;

}

}

// FrameHaveDialog.java

import java.awt.event.*;

import java.awt.*;

import javax.swing.JTextArea;

public class FrameHaveDialog extends Frame implements ActionListener

{ JTextArea text;

Button buttonFont;

FrameHaveDialog()

{ buttonFont=new Button("设置字体");

text=new JTextArea("Java 2实用教程(第三版)");

buttonFont.addActionListener(this);

add(buttonFont,BorderLayout.NORTH);

add(text);

setBounds(60,60,300,300);

setVisible(true);

validate();

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e)

{ System.exit(0);

}

}

);

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==buttonFont)

{ FontDialog dialog=【代码4】 //创建对话框

【代码5】 //对话框设置为可见

【代码6】 //对话框设置设置标题为“字体对话框”

if(dialog.getState()==FontDialog.YES)

{ text.setFont(dialog.getFont());

text.repaint();

}

if(dialog.getState()==FontDialog.NO)

{ text.repaint();

}

}

}

}

//FontDialogMainClass.java

public class FontDialogMainClass

{ public static void main(String args[])

{ new FrameHaveDialog();

}

}

2、英语单词拼写练习:请读懂下面模板代码,将其补充完整并调试运行。

//RondomString.java

public class RondomString

{ String str="";

public String getRondomString(String s)

{ StringBuffer strBuffer=new StringBuffer(s);

int m=strBuffer.length();

for(int k=0;k

{ int index=(int)(Math.random()*strBuffer.length());

char c=strBuffer.charAt(index);

str=str+c;

strBuffer=strBuffer.deleteCharAt(index);

}

return str;

}

}

//LetterLabel.java

import java.awt.*;

import java.awt.event.*;

public class LetterLabel extends Button implements FocusListener,MouseListener { LetterLabel()

{ 【代码1】 //将当前对象注册为自身的焦点视器

【代码2】 //将当前对象注册为自身的标监视器

setBackground(Color.cyan);

setFont(new Font("",Font.BOLD,30));

}

public static LetterLabel[] getLetterLabel(int n)

{ LetterLabel a[]=new LetterLabel[n];

for(int k=0;k

{ a[k]=new LetterLabel();

}

return a;

}

public void focusGained(FocusEvent e)

{ setBackground(Color.red);

}

public void focusLost(FocusEvent e)

{ setBackground(Color.cyan);

}

public void mousePressed(MouseEvent e)

{ requestFocus();

}

public void setText(char c)

{ setLabel(""+c);

}

public void mouseReleased(MouseEvent e){}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e){}

}

//SpellingWordFrame.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.Box;

public class SpellingWordFrame extends Frame implements KeyListener,ActionListener { TextField inputWord;

Button button;

LetterLabel label[];

Panel northP,centerP;

Box wordBox;

String hintMessage="用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词";

Label messaageLabel=new Label(hintMessage);

String word="";

SpellingWordFrame()

{ inputWord=new TextField(12);

button=new Button("确定");

button.addActionListener(this);

inputWord.addActionListener(this);

northP=new Panel();

northP.add(new Label("输入一个英文单词:"));

northP.add(inputWord);

northP.add(button);

centerP=new Panel();

wordBox=Box.createHorizontalBox();

centerP.add(wordBox);

add(northP,BorderLayout.NORTH);

add(centerP,BorderLayout.CENTER);

add(messaageLabel,BorderLayout.SOUTH);

setBounds(100,100,350,180);

setVisible(true);

validate();

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e) { System.exit(0);

}

}

);

}

public void actionPerformed(ActionEvent e)

{ word=inputWord.getText();

int n=word.length();

RondomString rondom=new RondomString();

String randomWord=rondom.getRondomString(word);

wordBox.removeAll();

messaageLabel.setText(hintMessage);

if(n>0)

{ label=LetterLabel.getLetterLabel(n);

for(int k=0;k

{ 【代码3】 //将当前窗口注册为label[k]的键盘监视器

label[k].setText(""+randomWord.charAt(k));

wordBox.add(label[k]);

}

validate();

inputWord.setText(null);

label[0].requestFocus();

}

}

public void keyPressed(KeyEvent e)

{ LetterLabel sourceLabel=(LetterLabel)e.getSource();

int index=-1;

if(【代码4】) //判断按下的是否是←键)

{ for(int k=0;k

{ if(label[k]==sourceLabel)

{ index=k;

break;

}

}

if(index!=0)

{ String temp=label[index].getText();

label[index].setText(label[index-1].getText());

label[index-1].setText(temp);

label[index-1].requestFocus();

}

}

else if(【代码5】) //判断按下的是否是→键

{ for(int k=0;k

{ if(label[k]==sourceLabel)

{ index=k;

break;

}

}

if(index!=label.length-1)

{ String temp=label[index].getText();

label[index].setText(label[index+1].getText());

label[index+1].setText(temp);

label[index+1].requestFocus();

}

}

validate();

}

public void keyTyped(KeyEvent e){}

public void keyReleased(KeyEvent e)

{ String success="";

for(int k=0;k

{ String str=label[k].getText();

success=success+str;

}

if(success.equals(word))

{ messaageLabel.setText("恭喜你,你成功了");

for(int k=0;k

{ label[k].removeKeyListener(this);

label[k].removeFocusListener(label[k]);

label[k].setBackground(Color.green);

}

inputWord.requestFocus();

}

}

}

//WordMainClass.java

public class WordMainClass

{ public static void main(String args[])

{ new SpellingWordFrame();

}

}

3、JLayeredPane分层窗格

模板代码

import javax.swing.*;

import java.awt.*;

class LayerExample

{ public static void main(String args[])

{ JFrame win=new JFrame("窗体");

win.setBounds(100,100,300,300);

win.setVisible(true);

JButton b1=new JButton("我在DEFAULT_LAYER"),

b2=new JButton("我在PALETTE_LAYER"),

b3 =new JButton("我在MODAL_LAYER"),

b4 =new JButton("我在POPUP_LAYER"),

b5=new JButton("我在DRAG_LAYER");

Container contenetPane=win.getContentPane();

JLayeredPane pane= new JLayeredPane();

pane.setLayout(null);

【代码1】 //pane将组件b5放置在DRAG_LAYER层

【代码2】 //pane将组件b4放置在POPUP_LAYER层

【代码3】 //pane将组件b3放置在MODAL_LAYER层

【代码4】 //pane将组件b2放置在PALETTE_LAYER层

【代码5】 //pane将组件b3放置在DEFAULT_LAYER层 b5.setBounds(50,50,200,100);

b4.setBounds(40,40,200,100);

b3.setBounds(30,30,200,100);

b2.setBounds(20,20,200,100);

b1.setBounds(10,10,200,100);

b1.setBackground(Color.red);

b2.setBackground(Color.pink);

b3.setBackground(Color.green);

b4.setBackground(Color.orange);

b5.setBackground(Color.yellow);

contenetPane.add(pane,BorderLayout.CENTER);

contenetPane.validate();

win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

4、使用表格显示日历

//CalendarBean.java

import java.util.Calendar;

public class CalendarBean

{ int year=2005,month=0,nextDay;

public void setYear(int year)

{ this.year=year;

}

public int getYear()

{ return year;

}

public void setMonth(int month)

{ this.month=month;

}

public int getMonth()

{ return month;

}

public String[][] getCalendar()

{ String a[][]=new String[6][7];

Calendar 日历=Calendar.getInstance();

日历.set(year,month-1,1);

int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;

int day=0;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { day=31;

}

if(month==4||month==6||month==9||month==11)

{ day=30;

}

if(month==2)

{ if(((year%4==0)&&(year%100!=0))||(year%400==0))

{ day=29;

}

else

{ day=28;

}

}

nextDay=1;

for(int k=0;k<6;k++)

{ if(k==0)

for(int j=星期几;j<7;j++)

{ a[k][j]=" "+nextDay ;

nextDay++;

}

else

for(int j=0;j<7&&nextDay<=day;j++)

{ a[k][j]=""+nextDay ;

nextDay++;

}

}

return a;

}

}

//CalenderFrame.java

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class CalenderFrame extends JFrame implements ActionListener

{ JTable table;

Object name[]={"星期日","星期一","星期二","星期三", "星期四","星期五","星期六"};

JButton nextMonth,previousMonth;

int year=2006,month=5;

CalendarBean calendar;

String rili[][];

JLabel showMessage=new JLabel("",JLabel.CENTER);

JScrollPane scroll;

public CalenderFrame()

{ calendar=new CalendarBean();

calendar.setYear(year);

calendar.setMonth(month);

rili=calendar.getCalendar();

【代码1】 //使用数组rili和name创建table

table.setRowSelectionAllowed(false);

nextMonth=new JButton("下月");

previousMonth=new JButton("上月");

nextMonth.addActionListener(this);

previousMonth.addActionListener(this);

JPanel pNorth=new JPanel(),

pSouth=new JPanel();

pNorth.add(previousMonth);

pNorth.add(nextMonth);

pSouth.add(showMessage);

showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+

"月" );

scroll=new JScrollPane(table);

add(scroll,BorderLayout.CENTER);

add(pNorth,BorderLayout.NORTH);

add(pSouth,BorderLayout.SOUTH);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100,100,400,240);

setVisible(true);

validate();

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==nextMonth)

{ month=month+1;

if(month>12)

month=1;

calendar.setMonth(month);

rili=calendar.getCalendar();

remove(scroll);

【代码2】 //使用数组rili和name创建table

table.setRowSelectionAllowed(false);

scroll=new JScrollPane(table);

add(scroll,BorderLayout.CENTER);

}

else if(e.getSource()==previousMonth)

{ month=month-1;

if(month<1)

month=12;

calendar.setMonth(month);

rili=calendar.getCalendar();

remove(scroll);

【代码3】 //使用数组rili和name创建table

table.setRowSelectionAllowed(false);

scroll=new JScrollPane(table);

add(scroll,BorderLayout.CENTER);

}

showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月" );

}

}

//CalendarMainClass.java

public class CalendarMainClass

{ public static void main(String args[])

{ new CalenderFrame();

}

}

5、多文档界面(MDI)

模板代码

//MDIExample.java

import javax.swing.*;

import javax.swing.event.*;

import java.awt.*;

import java.awt.event.*;

class MyInternalFrame extends JInternalFrame

{ JTextArea text;

MyInternalFrame(String title)

{ super(title,true,true,true,true);

text=new JTextArea();

Container con=getContentPane();

con.add(new JScrollPane(text),BorderLayout.CENTER);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

addInternalFrameListener(new InternalFrameAdapter ()

{ public void internalFrameActivated(InternalFrameEvent e) { setLayer(JDesktopPane.DRAG_LAYER);

}

public void internalFrameDeactivated(InternalFrameEvent e) { setLayer(JDesktopPane.DEFAULT_LAYER);

}

});

}

public JTextArea getJTextArea()

{ return text;

}

}

class Mywindow extends JFrame implements ActionListener

{ JDesktopPane desk;

JMenuBar menubar;

JMenu menu;

JMenuItem itemNew,itemCopy,itemCut,itemPaste;

Container con;

Mywindow()

{ setSize(360,360);

setVisible(true);

con=getContentPane();

desk=【代码1】 //创建JdesktopPane对象。

desk.setDesktopManager(new DefaultDesktopManager());

con.add(desk,BorderLayout.CENTER);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

menubar=new JMenuBar();

menu=new JMenu("编辑");

itemNew=new JMenuItem("新建");

itemCopy=new JMenuItem("拷贝");

itemCut=new JMenuItem("剪切");

itemPaste=new JMenuItem("粘贴");

itemNew.addActionListener(this);

itemCopy.addActionListener(this);

itemCut.addActionListener(this);

itemPaste.addActionListener(this);

menu.add(itemNew);

menu.add(itemCopy);

menu.add(itemCut);

menu.add(itemPaste);

menubar.add(menu);

setJMenuBar(menubar);

validate();

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==itemNew)

{ JInternalFrame a[]=【代码2】//desk返回其中的全部内部窗体

for(int i=0;i

{ 【代码3】 //desk 将a[i]放置在DEFAULT_LAYER层

}

JInternalFrame newInternalFrame=new MyInternalFrame("无标题");

newInternalFrame.setBounds(10,10,300,300);

newInternalFrame.setVisible(true);

【代码4】 //desk 将newInternalFrame放置在DRAG_LAYER层

desk.validate();

con.validate();

this.validate();

}

if(e.getSource()==itemCopy)

{ MyInternalFrame internalFrame=(MyInternalFrame)desk.getSelectedFrame(); JTextArea text=internalFrame.getJTextArea();

text.copy();

}

else if(e.getSource()==itemCut)

{ MyInternalFrame internalFrame=(MyInternalFrame)desk.getSelectedFrame(); JTextArea text=internalFrame.getJTextArea();

text.cut();

}

else if(e.getSource()==itemPaste)

{ MyInternalFrame internalFrame=(MyInternalFrame)desk.getSelectedFrame(); JTextArea text=internalFrame.getJTextArea();

text.paste();

}

}

}

public class MDIExample

{ public static void main(String args[])

{ Mywindow win=new Mywindow();

}

}

第5题参考答案:

【代码1】:new JDesktopPane();

【代码2】:desk.getAllFrames();

【代码3】:desk.setLayer(a[i],JDesktopPane.DEFAULT_LAYER);

【代码4】:desk.add(newInternalFrame,JDesktopPane.DRAG_LAYER);

语音信号处理实验指导书

语音信号处理实验指导书 实验一 语音信号采集与简单处理 一、 实验目的、要求 (1)掌握语音信号采集的方法 (2)掌握一种语音信号基音周期提取方法 (3)掌握短时过零率计算方法 (4)了解Matlab 的编程方法 二、 实验原理 基本概念: (a )短时过零率: 短时内,信号跨越横轴的情况,对于连续信号,观察语音时域波形通过横轴的情况;对于离散信号,相邻的采样值具有不同的代数符号,也就是样点改变符号的次数。 对于语音信号,是宽带非平稳信号,应考察其短时平均过零率。 其中sgn[.]为符号函数 ?? ?? ?<=>=0 x(n)-1sgn(x(n))0 x(n)1sgn(x(n)) 短时平均过零的作用 1.区分清/浊音: 浊音平均过零率低,集中在低频端; 清音平均过零率高,集中在高频端。 2.从背景噪声中找出是否有语音,以及语音的起点。 (b )基音周期 基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。 ∑--= -=1 )]1(sgn[)](sgn[21N m n n n m x m x Z

由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。②声道共振峰有时会严重影响激励信号的谐波结构,所以,从语音信号中直接取出仅和声带振动有关的激励信号的信息并不容 易。③语音信号本身是准周期性的(即音调是有变化的),而且其波形的峰值点或过零点受共振峰的结构、噪声等的影响。④基音周期变化范围大,从老年男性的50Hz 到儿童和女性的450Hz ,接近三个倍频程,给基音检测带来了一定的困难。由于这些困难,所以迄今为止尚未找到一个完善的方法可以对于各类人群(包括男、女、儿童及不向语种)、各类应用领域和各种环境条件情况下都能获得满意的检测结果。 尽管基音检测有许多困难,但因为它的重要性,基音的检测提取一直是一个研究的课题,为此提出了各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法、并行处理技术、倒谱法、SIFT 、谱图法、小波法等等。 三、使用仪器、材料 微机(带声卡)、耳机,话筒。 四、 实验步骤 (1)语音信号的采集 利用Windows 语音采集工具采集语音信号,将数据保存wav 格式。 采集一组浊音信号和一组清音信号,信号的长度大于3s 。 (2)采用短时相关函数计算语音信号浊音基音周期,考虑窗长度对基音周期计算的影响。采用倒谱法求语音信号基音周期。 (3)计算短时过零率,清音和浊音的短时过零率有何区别。 五、实验过程原始记录(数据,图表,计算) 短时过零率 短时相关函数 P j j n s n s j R N j n n n n ,,1) ()()(1 =-=∑-= ∑--=-=10 )]1(sgn[)](sgn[21N m n n n m x m x Z

数字信号处理实验一

一、实验目的 1. 通过本次实验回忆并熟悉MATLAB这个软件。 2. 通过本次实验学会如何利用MATLAB进行序列的简单运算。 3. 通过本次实验深刻理解理论课上的数字信号处理的一个常见方法——对时刻n的样本附近的一些样本求平均,产生所需的输出信号。 3. 通过振幅调制信号的产生来理解载波信号与调制信号之间的关系。 二、实验内容 1. 编写程序在MATLAB中实现从被加性噪声污染的信号中移除噪声的算法,本次试验采用三点滑动平均算法,可直接输入程序P1.5。 2. 通过运行程序得出的结果回答习题Q1.31-Q1.33的问题,加深对算法思想的理解。 3. 编写程序在MATLAB中实现振幅调制信号产生的算法,可直接输入程序P1.6。 4. 通过运行程序得出的结果回答习题Q1.34-Q1.35的问题,加深对算法思想的理解。 三、主要算法与程序 1. 三点滑动平均算法的核心程序: %程序P1.5 %通过平均的信号平滑 clf; R=51; d=0.8*(rand(R,1)-0.5);%产生随噪声 m=0:R-1; s=2*m.*(0.9.^m);%产生为污染的信号 x=s+d';%产生被噪音污染的信号 subplot(2,1,1); plot(m,d','r-',m,s,'g--',m,x,'b-.');

xlabel('时间序号n');ylabel('振幅'); legend('d[n]','s[n]','x[n]'); x1=[0 0 x];x2=[0 x 0];x3=[x 0 0]; y=(x1+x2+x3)/3; subplot(2,1,2); plot(m,y(2:R+1),'r-',m,s,'g--'); legend('y[n]','s[n]'); xlabel('时间序号n');ylabel('振幅'); 2. 振幅调制信号的产生核心程序:(由于要几个结果,因此利用subplot函数画图) %程序P1.6 %振幅调制信号的产生 n=0:100; m=0.1;fH=0.1;fL=0.01; m1=0.3;fH1=0.3;fL1=0.03; xH=sin(2*pi*fH*n); xL=sin(2*pi*fL*n); y=(1+m*xL).*xH; xH1=sin(2*pi*fH1*n); xL1=sin(2*pi*fL1*n); y1=(1+m1*xL).*xH; y2=(1+m*xL).*xH1; y3=(1+m*xL1).*xH; subplot(2,2,1); stem(n,y); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.1;fH=0.1;fL=0.01;'); subplot(2,2,2); stem(n,y1); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.1;fL=0.01;'); subplot(2,2,3); stem(n,y2); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.3;fL=0.01;'); subplot(2,2,4); stem(n,y3); grid;

测试信号处理实验

实验一 离散时间系统的时域分析 一、实验目的 1. 运用MATLAB 仿真一些简单的离散时间系统,并研究它们的时域特性。 2. 运用MATLAB 中的卷积运算计算系统的输出序列,加深对离散系统的差分方程、冲激响应和卷积分析方法的理解。 二、实验原理 离散时间系统其输入、输出关系可用以下差分方程描述: ∑=∑=-=-M k k N k k k n x p k n y d 00] [][ 当输入信号为冲激信号时,系统的输出记为系统单位冲激响应 ][][n h n →δ,则系统响应为如下的卷积计算式: ∑∞ -∞=-= *=m m n h m x n h n x n y ][][][][][ 当h[n]是有限长度的(n :[0,M])时,称系统为FIR 系统;反之,称系统为IIR 系统。在MA TLAB 中,可以用函数y=Filter(p,d,x) 求解差分方程,也可以用函数 y=Conv(x,h)计算卷积。 例1 clf; n=0:40; a=1;b=2; x1= 0.1*n; x2=sin(2*pi*n); x=a*x1+b*x2; num=[1, 0.5,3]; den=[2 -3 0.1]; ic=[0 0]; %设置零初始条件 y1=filter(num,den,x1,ic); %计算输入为x1(n)时的输出y1(n) y2=filter(num,den,x2,ic); %计算输入为x2(n)时的输出y2(n) y=filter(num,den,x,ic); %计算输入为x (n)时的输出y(n) yt= a*y1+b*y2; %画出输出信号 subplot(2,1,1) stem(n,y); ylabel(‘振幅’); title(‘加权输入a*x1+b*x2的输出’);

数字信号处理实验一

实验一 离散时间信号分析 班级 信息131班 学号 201312030103 姓名 陈娇 日期 一、实验目的 掌握两个序列的相加、相乘、移位、反褶、卷积等基本运算。 二、实验原理 1.序列的基本概念 离散时间信号在数学上可用时间序列)}({n x 来表示,其中)(n x 代表序列的第n 个数字,n 代表时间的序列,n 的取值范围为+∞<<∞-n 的整数,n 取其它值)(n x 没有意义。离散时间信号可以是由模拟信号通过采样得到,例如对模拟信号)(t x a 进行等间隔采样,采样间隔为T ,得到)}({nT x a 一个有序的数字序列就是离散时间信号,简称序列。 2.常用序列 常用序列有:单位脉冲序列(单位抽样)) (n δ、单位阶跃序列)(n u 、矩形序列)(n R N 、实指数序列、复指数序列、正弦型序列等。 3.序列的基本运算 序列的运算包括移位、反褶、和、积、标乘、累加、差分运算等。 4.序列的卷积运算 ∑∞ -∞==-= m n h n x m n h m x n y )(*)()()()( 上式的运算关系称为卷积运算,式中代表两个序列卷积运算。两个序列的卷积是一个序列与另一个序列反褶后逐次移位乘积之和,故称为离散卷积,也称两序列的线性卷积。其计算的过程包括以下4个步骤。 (1)反褶:先将)(n x 和)(n h 的变量n 换成m ,变成)(m x 和)(m h ,再将)(m h 以纵轴为对称轴反褶成)(m h -。

(2)移位:将)(m h -移位n ,得)(m n h -。当n 为正数时,右移n 位;当n 为负数时,左移n 位。 (3)相乘:将)(m n h -和)(m x 的对应点值相乘。 (4)求和:将以上所有对应点的乘积累加起来,即得)(n y 。 三、主要实验仪器及材料 微型计算机、Matlab6.5 教学版、TC 编程环境。 四、实验内容 (1)用Matlab 或C 语言编制两个序列的相加、相乘、移位、反褶、卷积等的程序; (2)画出两个序列运算以后的图形; (3)对结果进行分析; (4)完成实验报告。 五、实验结果 六、实验总结

信号处理实验指导

目录 绪论 (1) 1离散时间信号和系统分析 1.1 离散时间信号产生与运算 (2) 1.2 离散时间系统的时域分析 (9) 1.3 离散时间系统的频域分析 (13) 1.4 离散时间系统频响的零极点确定 (14) 2快速傅立叶变换的应用 2.1 FFT的计算 (17) 2.2 利用FFT进行谱分析 (18) 2.3利用FFT实现快速卷积 (19) 3数字滤波器的设计 3.1数字滤波器的结构 (23) 3.2无限冲激响应(IIR)数字滤波器的设计 (25) 3.3有限冲激响应(FIR)数字滤波器的设计 (27) 4综合应用举例 4.1 语音信号处理 (32) 4.2 电话拨号音的合成与识别 (32)

绪论 数字信号处理主要研究如何对信号进行分析、变换、综合、估计与识别等加工处理的基本理论和方法。随着计算机技术和大规模集成电路技术的发展,数字信号处理以其方便、灵活等特点引起人们越来越多的重视。在40多年的发展过程中,这门学科基本形成了一套完整的理论体系,其中也包括各种快速、优良的算法,而且数字信号处理的理论和技术也在不断、快速地丰富和完善,新理论和新技术也层出不穷。学习这门课程的过程中,容易使人感到数字信号处理的概念抽象难懂,其中的分析方法与基本理论不容易很好地理解与掌握。因此,如何理解与掌握课程中的基本概念、基本原理、基本分析方法以及综合应用所学知识解决实际问题的能力,是本课程学习中所要解决的关键问题。 Matlab是一种面向科学和工程的高级语言,现已成为国际上公认的优秀的科技界应用软件,在世界范围内广为流行和使用。在欧美高等院校里,Matlab已成为大专院校学生、教师的必要基本技能,广泛应用于科学研究、工程计算、教学等。上世纪90年代末和本世纪初Matlab在我国也被越来越多地应用于科研和教学工作中。Matlab是一套功能强大的工程计算及数据处理软件,在工业,电子,医疗和建筑等众多领域均被广泛运用。它是一种面向对象的,交互式程序设计语言,其结构完整又具有优良的可移植性。它在矩阵运算,数字信号处理方面有强大的功能。另外,Matlab提供了方便的绘图功能,便于用户直观地输出处理结果。 本文通过Matlab系列仿真,旨在掌握基本的数字信号处理的理论和方法,提高综合运用所学知识,提高Matlab计算机编程的能力。进一步加强独立分析问题、解决问题的能力、综合设计及创新能力的培养,同时注意培养实事求是、严肃认真的科学作风和良好的实验习惯。

数字信号处理实验报告一

武汉工程大学 数字信号处理实验报告 姓名:周权 学号:1204140228 班级:通信工程02

一、实验设备 计算机,MATLAB语言环境。 二、实验基础理论 1.序列的相关概念 2.常见序列 3.序列的基本运算 4.离散傅里叶变换的相关概念 5.Z变换的相关概念 三、实验内容与步骤 1.离散时间信号(序列)的产生 利用MATLAB语言编程产生和绘制单位样值信号、单位阶跃序列、指数序列、正弦序列及随机离散信号的波形表示。 四实验目的 认识常用的各种信号,理解其数字表达式和波形表示,掌握在计算机中生成及绘制数字信号波形的方法,掌握序列的简单运算及计算机实现与作用,理解离散时间傅里叶变换,Z变换及它们的性质和信号的频域分

实验一离散时间信号(序列)的产生 代码一 单位样值 x=2; y=1; stem(x,y); title('单位样值 ') 单位阶跃序列 n0=0; n1=-10; n2=10; n=[n1:n2]; x=[(n-n0)>=0]; stem(n,x); xlabel('n'); ylabel('x{n}'); title('单位阶跃序列');

实指数序列 n=[0:10]; x=(0.5).^n; stem(n,x); xlabel('n'); ylabel('x{n}'); title('实指数序列');

正弦序列 n=[-100:100]; x=2*sin(0.05*pi*n); stem(n,x); xlabel('n'); ylabel('x{n}'); title('正弦序列');

随机序列 n=[1:10]; x=rand(1,10); subplot(221); stem(n,x); xlabel('n'); ylabel('x{n}'); title('随机序列');

大学本科语音信号处理实验讲义8学时

语音信号处理实验讲义 时间:2011-12

目录 实验一语音信号生成模型分析 (3) 实验二语音信号时域特征分析 (7) 实验三语音信号频域特征分析 (12) 实验四语音信号的同态处理和倒谱分析 (16)

实验一 语音信号生成模型分析 一、实验目的 1、了解语音信号的生成机理,了解由声门产生的激励函数、由声道产生的调制函数和由嘴唇产生的辐射函数。 2、编程实现声门激励波函数波形及频谱,与理论值进行比较。 3、编程实现已知语音信号的语谱图,区分浊音信号和清音信号在语谱图上的差别。 二、实验原理 语音生成系统包含三部分:由声门产生的激励函数()G z 、由声道产生的调制函数()V z 和由嘴唇产生的辐射函数()R z 。语音生成系统的传递函数由这三个函数级联而成,即 ()()()()H z G z V z R z = 1、激励模型 发浊音时,由于声门不断开启和关闭,产生间隙的脉冲。经仪器测试它类似于斜三角波的脉冲。也就是说,这时的激励波是一个以基音周期为周期的斜三角脉冲串。单个斜三角波的频谱表现出一个低通滤波器的特性。可以把它表示成z 变换的全极点形式 12 1()(1) cT G z e z --= -? 这里c 是一个常数,T 是脉冲持续时间。周期的三角波脉冲还得跟单位脉冲串的z 变换相乘: 112 1 ()()()1(1)v cT A U z E z G z z e z ---=?= ?--? 这就是整个激励模型,v A 是一个幅值因子。 2、声道模型 当声波通过声道时,受到声腔共振的影响,在某些频率附近形成谐振。反映在信号频谱图上,在谐振频率处其谱线包络产生峰值,把它称为共振峰。 一个二阶谐振器的传输函数可以写成 12 ()1i i i i A V z B z C z --= -- 实践表明,用前3个共振峰代表一个元音足够了。对于较复杂的辅音或鼻音共振峰要到5个以上。多个()i V z 叠加可以得到声道的共振峰模型 12 1 11 ()()11R r r M M i r i N k i i i i k k b z A V z V z B z C z a z -=---======---∑∑∑ ∑ 3、辐射模型 从声道模型输出的是速度波,而语音信号是声压波。二者倒比称为辐射阻抗,它表征了

数字信号处理实验

实验一 离散傅里叶变换(DFT )对确定信号进行谱分析 一.实验目的 1.加深对DFT 算法原理和基本性质的理解。 2.熟悉DFT 算法和原理的编程方法。 3.学习用DFT 对信号进行谱分析的方法,了解可能出现的误差及其原因,以便在实际中正确利用。 二.实验原理 一个连续信号)(t x a 的频谱可以用其傅里叶变换表示,即 dt e t x j X t j a a Ω-∞ ∞ -? = Ω)()( 若对)(t x a 进行理想采样可得采样序列 )(|)()(nT x t x n x a nT t a === 对)(n x 进行DTFT ,可得其频谱为: ∑∞ -∞ =-= n n j j e n x e X ωω )()( 其中数字频率ω与模拟频率Ω的关系为: s f T Ω = Ω=ω )(n x 的DFT 为∑∞ -∞ =-= n nk N j e n x k X π 2)()( 若)(t x a 是限带信号,且在满足采样定理的条件下,)(ω j e X 是)(Ωj X a 的周期延拓, )(k X 是)(ωj e X 在单位圆上的等间隔采样值,即k N j e X k X πωω2| )()(= =。 为在计算机上分析计算方便,常用)(k X 来近似)(ω j e X ,这样对于长度为N 的有限 长序列(无限长序列也可用有限长序列来逼近),便可通过DFT 求其离散频谱。 三.实验内容 1.用DFT 对下列序列进行谱分析。 (1))()04.0sin(3)(100n R n n x π=

1 (2)]0,0,0,0,0,0,0,0,1,1,1,1[)(=n x 2.为了说明高密度频谱和高分辨率频谱之间的区别,考察序列 )52.0cos()48.0cos()(n n n x ππ+= (1)当0≤n ≤10时,确定并画出x(n)的离散傅里叶变换。 (2)当0≤n ≤100时,确定并画出x(n)的离散傅里叶变换。 四.实验结果 1. (1) (2)

数字信号处理实验五

实验五:FIR数字滤波器设计与软件实现 信息学院 10电本2班王楚炘 2010304224 10.5.1 实验指导 1.实验目的 (1)掌握用窗函数法设计FIR数字滤波器的原理和方法。 (2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法。 (3)掌握FIR滤波器的快速卷积实现原理。 (4)学会调用MATLAB函数设计与实现FIR滤波器。 2.实验内容及步骤 (1)认真复习第七章中用窗函数法和等波纹最佳逼近法设计FIR数字滤波器的原理; (2)调用信号产生函数xtg产生具有加性噪声的信号xt,并自动显示xt及其频谱,如图10.5.1所示; 图10.5.1 具有加性噪声的信号x(t)及其频谱如图(3)请设计低通滤波器,从高频噪声中提取xt中的单频调幅信号,要求信号幅频失真小于0.1dB,将噪声频谱衰减60dB。先观察xt的频谱,确定滤波器指标参数。 (4)根据滤波器指标选择合适的窗函数,计算窗函数的长度N,

调用MATLAB函数fir1设计一个FIR低通滤波器。并编写程序,调用MATLAB快速卷积函数fftfilt实现对xt的滤波。绘图显示滤波器的频响特性曲线、滤波器输出信号的幅频特性图和时域波形图。 (4)重复(3),滤波器指标不变,但改用等波纹最佳逼近法,调用MATLAB函数remezord和remez设计FIR数字滤波器。并比较两种设计方法设计的滤波器阶数。 提示:MATLAB函数fir1和fftfilt的功能及其调用格式请查阅本书 第7章和第?章; 采样频率Fs=1000Hz,采样周期T=1/Fs; 根据图10.6.1(b)和实验要求,可选择滤波器指标参数:通带截止频率fp=120Hz,阻带截至频率fs=150Hz,换算成数字频率,通带截止频率,通带最大衰为0.1dB,阻带截至频率,阻带最小衰为60dB。]实验程序框图如图10.5.2所示,供读者参考。 Fs=1000,T=1/Fs xt=xtg 产生信号xt, 并显示xt及其频谱 用窗函数法或等波纹最佳逼近法 设计FIR滤波器hn 对信号xt滤波:yt=fftfilt(hn,xt) 1、计算并绘图显示滤波器损耗函数 2、绘图显示滤波器输出信号yt End 图10.5.2 实验程序框图 4.思考题 (1)如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器?请写出设计步骤. 答:用窗函数法设计线性相位低通滤波器的设计步骤: a.根据对阻带衰减及过渡带的指标要求,选择窗函数的类型,并估计窗口的长度N; b.构造希望逼近的频率响应函数; c.计算h d(n); d.加窗得到设计结果h(n)=h d(n)w(n)。 (2)如果要求用窗函数法设计带通滤波器,且给定通带上、下截止频率为和,阻带上、下截止频率为和,试求理想带通滤波器的截止频率。 答:希望逼近的理想带通滤波器的截止频率分别为:

测试信号分析与处理作业实验一二

王锋 实验一:利用FFT 作快速相关估计 一、实验目的 a.掌握信号处理的一般方法,了解相关估计在信号分析与处理中的作用。 b.熟悉FFT算法程序;熟练掌握用FFT作快速相关估计的算法。 c.了解快速相关估计的谱分布的情况。 二、实验内容 a.读入实验数据[1]。 b.编写一利用FFT作相关估计的程序[2]。 c.将计算结果表示成图形的形式,给出相关谱的分布情况图。 注[1]:实验数据文件名为“Qjt.dat”。 实验数据来源:三峡前期工程 “覃家沱大桥” 实测桥梁振动数据。 实验数据采样频率:50Hz。 可从数据文件中任意截取几段数据进行分析,数据长度N 自定。 注[2]:采用Matlab 编程。 三、算法讨论及分析 算法为有偏估计,利用FFT计算相关函数 Step 1: 对原序列补N个零,得新序列x2N(n) Step2: 作FFT[x2N(n)]得到X2N(k) Step 3: 取X2N(k)的共轭,得 Step 4: 作 Step 5: 调整与的错位。 四、实验结果分析 1. 该信号可以近似为平稳信号么? 可以近似为平稳信号,随机过程的统计特性不随样本的采样时刻而发生变化。取N=8192,分别取间隔m=500,m=700,m=1000,所得到的均值均为0.5366,方差为47369,与时间无关。

图1-1 自相关函数图 (上图表示的R0,下图为调整后的R0) 2. 该信号是否具有周期性,信噪比如何? >> load Qjt.dat; %加载数据 N=32768; %数据长度 i=1:1:N; %提取数据 plot(i,Qjt(i)); 抛去几个极值点,从图1-2可以看出,数据具有一定的周期性,杂音比较少,说明信噪比较高。 图1-2 数据图

数字信号处理实验答案完整版

数字信号处理实验答案 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

实验一熟悉Matlab环境 一、实验目的 1.熟悉MATLAB的主要操作命令。 2.学会简单的矩阵输入和数据读写。 3.掌握简单的绘图命令。 4.用MATLAB编程并学会创建函数。 5.观察离散系统的频率响应。 二、实验内容 认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。在熟悉了MATLAB基本命令的基础上,完成以下实验。 上机实验内容: (1)数组的加、减、乘、除和乘方运算。输入A=[1 2 3 4],B=[3 4 5 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出A、B、C、D、E、F、G。 clear all; a=[1 2 3 4]; b=[3 4 5 6]; c=a+b; d=a-b; e=a.*b; f=a./b; g=a.^b; n=1:4; subplot(4,2,1);stem(n,a); xlabel('n');xlim([0 5]);ylabel('A'); subplot(4,2,2);stem(n,b); xlabel('n');xlim([0 5]);ylabel('B'); subplot(4,2,3);stem(n,c); xlabel('n');xlim([0 5]);ylabel('C'); subplot(4,2,4);stem(n,d); xlabel('n');xlim([0 5]);ylabel('D'); subplot(4,2,5);stem(n,e); xlabel('n');xlim([0 5]);ylabel('E'); subplot(4,2,6);stem(n,f); xlabel('n');xlim([0 5]);ylabel('F'); subplot(4,2,7);stem(n,g); xlabel('n');xlim([0 5]);ylabel('G'); (2)用MATLAB实现下列序列: a) x(n)= 0≤n≤15 b) x(n)=e+3j)n 0≤n≤15 c) x(n)=3cosπn+π)+2sinπn+π) 0≤n≤15 d) 将c)中的x(n)扩展为以16为周期的函数x(n)=x(n+16),绘出四个周期。

数字信号处理实验指导手册

数字信号处理实验指导手册 西安文理学院 机械电子工程系

目录 实验一离散时间信号 (2) 实验二时域采样定理 (7) 实验三离散时间系统 (10) 实验四线性卷积与圆周卷积 (13) 实验五用FFT作谱分析 (16) 实验六用双线性变换法设计IIR数字滤波器 (18) 实验七 FIR滤波器设计 (20)

实验一 离散时间信号 【实验目的】 用MATLAB 实现离散时间信号的表示和运算,掌握MATLAB 的基本命令和编程方法,为后续实验打基础。 【实验原理】 在数字信号处理中,所有的信号都是离散时间信号,因此应首先解决在MATLAB 中如何表示离散信号。 设一模拟信号经A/D 变换后,得到序列信号 }),1(),0(),1(,{)}({)( x x x n x n x -== 由于MATLAB 对下标的约定为从1开始递增,因此要表示)(n x ,一般应采用两个矢量,如: ]5,4,3,2,1,0,1,2,3[---=n ]1,2,5,4,0,2,3,1,1[-=y 这表示了一个含9个采样点的矢量: )}5(,),1(),2(),3({)(x x x x n y ---= 【实验内容】 熟悉下面序列(信号)的产生方法及相关运算 1、 单位采样序列 2、 单位阶跃序列 3、 信号翻转 4、 信号相加 5、 信号折叠 6、 信号移位 【参考程序】 单位采样序列 1、impluse1.m (图1-1) n=10; x=zeros(1,n); x(1)=1;

plot(x,'*'); 2、 impluse2.m (图1-2) n=-5:5; x=[n==0]; stem(x,'*'); 3、impluse3.m (图1-3) n=1:10; n0=3; x=[(n-n0)==1]; plot(x,'*'); 单位阶跃序列 1、steps1.m (图1-4) n=10; x=ones(1,n); plot(x,'*'); 2、steps2.m (图1-5) n=10; x=ones(1,n); x(1)=0; x(2)=0; 图1-1 单位采样序列1 图1-2 单位采样序列2 图1-3 单位采样序列3

工程信号处理实验报告

( 2011-2012 学年 第二学期) 重庆理工大学研究生课程论文 课程论文题目: 《工程信号处理实验报告》 课程名称 工程信号处理实验 课程类别 □学位课 非学位课 任课教师 谢明 所在学院 汽车学院 学科专业 机械设计及理念 姓名 李文中 学 号 50110802313 提交日期 2012年4月12日

工程信号处理实验报告 姓名:李文中学号:50110802313 实验报告一 实验名称:数据信号采集及采样参数选定 1实验目的 1.1了解信号采集系统的组成,初步掌握信号采集系统的使用。 1.2加深对采样定理的理解,掌握采样参数的选择方法 1.3了解信号采集在工程信号处理中的实际应用,及注意事项。 2 实验原理 2.1 模数转换及其控制 对模拟信号进行采集,就是将模拟信号转换为数字信号,即模/数(A/D)转换,然后送入计算机或专用设备进行处理。模数转换包括三个步骤:(1)采样,(2)量化,(3)编码。采样,是对已知的模拟信号按一定的间隔抽出一个样本数据。若间隔为一定时间 T,则称这种采样为等时间间隔采样。除特别注明外,一般都采用等时间间隔采样;量化,是一种用有限字长的数字量逼近模拟量的过程。编码,是将已经量化的数字量变为二进制数码,因为数字处理器只能接受有限长的二进制数。模拟信号经过这三步转换后,变成了时间上离散、幅值上量化的数字信号。A/D转换器是完成这三个步骤的主要器件。 在信号采集系统中,A/D 转换器与计算机联合使用完成模数转换。用计算机的时钟或用软件产生等间隔采样脉冲控制 A/D 转换器采样。A/D 转换器通过内部电路进行量化与编码,输出有限长的二进制代码。信号采集系统中,通常由以 A/D转换器为核心的接口电路及控制软件,进行信号采集控制。 *注这部分是由本实验所用的信号采集器自动完成的,以上也是实验器材-信号采集器的部分工作原理。以后实验中就不再赘述。 2.2 信号采集的参数选择

2017 年全国大学生电子设计竞赛试题-调幅信号处理实验电路(F题)

2017年全国大学生电子设计竞赛试题 参赛注意事项 (1)8月9日8:00竞赛正式开始。本科组参赛队只能在【本科组】题目中任选一题;高职高专组参赛队在【高职高专组】题目中任选一题,也可以选择【本科组】题目。(2)参赛队认真填写《登记表》内容,填写好的《登记表》交赛场巡视员暂时保存。(3)参赛者必须是有正式学籍的全日制在校本、专科学生,应出示能够证明参赛者学生身份的有效证件(如学生证)随时备查。 (4)每队严格限制3人,开赛后不得中途更换队员。 (5)竞赛期间,可使用各种图书资料和网络资源,但不得在学校指定竞赛场地外进行设计制作,不得以任何方式与他人交流,包括教师在内的非参赛队员必须迴避,对违纪参赛队取消评审资格。 【本科组】 一、任务 设计并制作一个调幅信号处理实验电路。其结构框图如图1所示。输入信号为调幅度50% 的AM信号。其载波频率为250MHz~300MHz,幅度有效值V irms 为10μV~1mV,调制频率为300Hz~ 5kHz。 低噪声放大器的输入阻抗为50Ω,中频放大器输出阻抗为50Ω,中频滤波器中心频率为10.7MHz,基带放大器输出阻抗为600Ω、负载电阻为600Ω,本振信号自制。 图1调幅信号处理实验电路结构框图 二、要求 1.基本要求 (1)中频滤波器可以采用晶体滤波器或陶瓷滤波器,其中频频率为10.7MHz;

(2)当输入AM信号的载波频率为275MHz,调制频率在300Hz~ 5kHz 范围内任意设定一个频率,V irms=1mV时,要求解调输出信号为V orms=1V±0.1V的调制频率的信号,解调输出信号无明显失真; (3)改变输入信号载波频率250MHz~300MHz,步进1MHz,并在调整本振频率后,可实现AM信号的解调功能。 2.发挥部分 (1)当输入AM信号的载波频率为275MHz,V irms在10μV~1mV之间变动时,通过自动增益控制(AGC)电路(下同),要求输出信号V orms稳定在1V±0.1V; (2)当输入AM信号的载波频率为250MHz~300MHz(本振信号频率可变),V irms在10μV~1mV之间变动,调幅度为50%时,要求输出信号V orms稳定在1V±0.1V; (3)在输出信号V orms稳定在1V±0.1V的前提下,尽可能降低输入AM信号的载波信号电平; (4)在输出信号V orms稳定在1V±0.1V的前提下,尽可能扩大输入AM信号的载波信号频率范围; (5)其他。 三、说明 1.采用+12V单电源供电,所需其它电源电压自行转换; 2.中频放大器输出要预留测试端口TP。 四、评分标准

数字信号处理实验三

实验三:离散LSI 系统的频域分析 一、实验内容 2、求以下各序列的z 变换: 12030() ()sin() ()sin()n an x n na x n n x n e n ωω-=== 程序清单如下: syms w0 n z a; x1=n*a^n;X1=ztrans(x1) x2=sin(w0*n);X2=ztrans(x2) x3= exp(-a*n)*sin(w0*n);X3=ztrans(x3) 程序运行结果如下: X1 =z/(a*(z/a - 1)^2) X2 =(z*sin(w0))/(z^2 - 2*cos(w0)*z + 1) X3 =(z*exp(a)*sin(w0))/(exp(2*a)*z^2 - 2*exp(a)*cos(w0)*z + 1) 3、求下列函数的逆z 变换 0 312342 1 1() () () ()() 1j z z z z X z X z X z X z z a z a z e z ω---= = = = ---- 程序清单如下: syms w0 n z a; X1=z/(z-a);x1=iztrans(X1) X2= z/(a-z)^2;x2=iztrans(X2) X3=z/ z-exp(j*w0);x3=iztrans(X3) X4=(1-z^-3)/(1-z^-1);x4=iztrans(X4) 程序运行结果如下: x1 =a^n x2 =n*a^n/a 课程名称 数字信号 实验成绩 指导教师 实 验 报 告 院系 信息工程学院 班级 学号 姓名 日期

x3 =charfcn[0](n)-iztrans(exp(i*w0),w0,n) x4 =charfcn[2](n)+charfcn[1](n)+charfcn[0](n) 4、求一下系统函数所描述的离散系统的零极点分布图,并判断系统的稳定性 (1) (0.3)()(1)(1) z z H z z j z j -= +-++ z1=[0,0.3]';p1=[-1+j,-1-j]';k=1; [b1,a1]=zp2tf(z1,p1,k); subplot(1,2,1);zplane(z1,p1); title('极点在单位圆外); subplot(1,2,2);impz(b1,a1,20); 由图可见:当极点位于单位圆内,系统的单位序列响应随着频率的增大而收敛;当极点位于单位圆上,系统的单位序列响应为等幅振荡;当极点位于单位圆外,系统的单位序列响应随着频率的增大而发散。由此可知系统为不稳定系统。 -1 -0.5 00.51 -2 -1.5-1-0.500.511.5 2Real Part I m a g i n a r y P a r t 极点在单位圆外 n (samples) A m p l i t u d e Impulse Response

武汉工程大学数字信号处理实验二时域离散系统及系统响应

实验二时域离散系统及系统响应 一、实验目的 1、掌握求解离散时间系统冲激响应和阶跃响应的方法; 2、进一步理解卷积定理,掌握应用线性卷积求解离散时间系统响应的基本方法; 3、掌握离散系统的响应特点。 二、实验内容 1、请分别用impz 和dstep函数求解下面离散时间系统的冲激响应和阶跃响应。(1)系统的差分方程为:) y n n n y - = (n - + y+ x )2 .0 866 ) ( ( 8.0 64 ( )1 .0 a=[1,-0.8,0.64]; b=[0.866,0,0]; n=20; hn=impz(b,a,n); %冲激响应 gn=dstep(b,a,n); %阶跃响应 subplot(2,1,1),stem(hn,'filled'); %显示冲激响应曲线 title('系统的单位冲激响应'); ylabel('h(n)');xlabel('n'); axis([0,n,1.1*min(hn),1.1*max(hn)]); subplot(2,1,2),stem(gn,'filled'); %显示阶跃响应曲线

title('系统的单位阶跃响应'); ylabel('g(n)');xlabel('n'); axis([0,n,1.1*min(gn),1.1*max(gn)]); 2 4 6 8 10121416 18 20 -0.4 -0.200.20.40.6 0.8系统的单位冲激响应 h (n )n 2 4 6 8 1012 14 16 18 20 11.21.4 1.6系统的单位阶跃响应 g (n ) n (2)系统的系统函数为:2 11 15.01)(---+--=z z z z H a=[1,-1,1]; b=[1,-0.5,0]; n=20; hn=impz(b,a,n); %冲激响应 gn=dstep(b,a,n); %阶跃响应

《测试信号分析与处理》实验报告

测控1005班齐伟0121004931725 (18号)实验一差分方程、卷积、z变换 一、实验目的 通过该实验熟悉 matlab软件的基本操作指令,掌握matlab软件的使用方法,掌握数字信号处理中的基本原理、方法以及matlab函数的调用。 二、实验设备 1、微型计算机1台; 2、matlab软件1套 三、实验原理 Matlab 软件是由mathworks公司于1984年推出的一套科学计算软件,分为总包和若干个工具箱,其中包含用于信号分析与处理的sptool工具箱和用于滤波器设计的fdatool工具箱。它具有强大的矩阵计算和数据可视化能力,是广泛应用于信号分析与处理中的功能强大且使用简单方便的成熟软件。Matlab软件中已有大量的关于数字信号处理的运算函数可供调用,本实验主要是针对数字信号处理中的差分方程、卷积、z变换等基本运算的matlab函数的熟悉和应用。 差分方程(difference equation)可用来描述线性时不变、因果数字滤波器。用x表示滤波器的输入,用y表示滤波器的输出。 a0y[n]+a1y[n-1]+…+a N y[n-N]=b0x[n]+b1x[n-1]+…+b M x[n-M] (1) ak,bk 为权系数,称为滤波器系数。 N为所需过去输出的个数,M 为所需输入的个数卷积是滤波器另一种实现方法。 y[n]= ∑x[k] h[n-k] = x[n]*h[n] (2) 等式定义了数字卷积,*是卷积运算符。输出y[n] 取决于输入x[n] 和系统的脉冲响应h[n]。 传输函数H(z)是滤波器的第三种实现方法。 H(z)=输出/输入= Y(z)/X(z) (3)即分别对滤波器的输入和输出信号求z变换,二者的比值就是数字滤波器的传输函数。 序列x[n]的z变换定义为 X (z)=∑x[n]z-n (4) 把序列x[n] 的z 变换记为Z{x[n]} = X(z)。

数字信号处理实验4

数字信号处理实验四 第一题结果: (1)没有增加过渡点 源码如下: N = 15; H = [1 1 1 0.5 zeros(1,7) 0.5 1 1 1]; %确定抽样点的幅度大小 %H(3,13) = 0.75;H(5,11) = 0.25; %设置过渡点 k = 0:N-1; A = exp(-j*pi*k*(N-1)/N); %抽样点相位大小 HK = H.*A; %求抽样点的H(k) hn = ifft(HK,N); %求出FIR的单位冲激响应h(n) freqz(hn,1,256); %画出幅频相频曲线figure(2); stem(real(hn),'.'); %绘制单位冲激响应的实部 line([0,35],[0,0]);xlabel('n');ylabel('Real(h(n))'); 单位脉冲响应曲线 幅频和相频特性曲线

(2)增加过渡点 源码如下: N = 15; H = [1 1 1 0.5 zeros(1,7) 0.5 1 1 1]; %确定抽样点的幅度大小 H(3) = 0.75;H(13) = 0.75;H(5) = 0.25;H(11) = 0.25; %设置过渡点 k = 0:N-1; A = exp(-j*pi*k*(N-1)/N); %抽样点相位大小 HK = H.*A; %求抽样点的H(k) hn = ifft(HK,N); %求出FIR的单位冲激响应h(n) freqz(hn,1,256); %画出幅频相频曲线figure(2); stem(real(hn),'.'); %绘制单位冲激响应的实部 line([0,35],[0,0]);xlabel('n');ylabel('Real(h(n))'); 单位脉冲响应曲线 幅频和相频特性曲线 第二题结果:

matlab数字信号处理实验指导

电工电子实验中心实验指导书 数字信号处理 实验教程 二○○九年三月

高等学校电工电子实验系列 数字信号处理实验教程 主编石海霞周玉荣 攀枝花学院电气信息工程学院 电工电子实验中心

内容简介 数字信号处理是一门理论与实践紧密联系的课程,适当的上机实验有助于深入理解和巩固验证基本理论知识,了解并体会数字信号处理的CAD手段和方法,锻炼初学者用计算机和MATLAB语言及其工具箱函数解决数字信号处理算法的仿真和滤波器设计问题的能力。 本实验指导书结合数字信号处理的基本理论和基本内容设计了八个上机实验,每个实验对应一个主题内容,包括常见离散信号的MATLAB产生和图形显示、离散时间系统的时域分析、离散时间信号的DTFT、离散时间信号的Z变换、离散傅立叶变换DFT、快速傅立叶变换FFT及其应用、基于MATLAB的IIR和FIR数字滤波器设计等。此外,在附录中,还简单介绍了MATLAB的基本用法。每个实验中,均给出了实验方法和步骤,还有部分的MATLAB程序,通过实验可以使学生掌握数字信号处理的基本原理和方法。

目录 绪论 (1) 实验一常见离散信号的MATLAB产生和图形显示 (2) 实验二离散时间系统的时域分析 (6) 实验三离散时间信号的DTFT (9) 实验四离散时间信号的Z变换 (14) 实验五离散傅立叶变换DFT (18) 实验六快速傅立叶变换FFT及其应用 (24) 实验七基于MATLAB的IIR数字滤波器设计 (30) 实验八基于MATLAB的FIR数字滤波器设计 (33) 附录 (37) 参考文献 (40)

绪论 绪论 随着电子技术迅速地向数字化发展,《数字信号处理》越来越成为广大理工科,特别是IT领域的学生和技术人员的必修内容。 数字信号处理是把信号用数字或符号表示成序列,通过计算机或通用(专用)信号处理设备,用数值计算方法进行各种处理,达到提取有用信息便于应用的目的。数字信号处理的理论和技术一出现就受到人们的极大关注,发展非常迅速。而且随着各种电子技术及计算机技术的飞速发展,数字信号处理的理论和技术还在不断丰富和完善,新的理论和技术层出不穷。目前数字信号处理已广泛地应用在语音、雷达、声纳、地震、图象、通信、控制、生物医学、遥感遥测、地质勘探、航空航天、故障检测、自动化仪表等领域。 数字信号处理是一门理论和实践、原理和应用结合紧密的课程,由于信号处理涉及大量的运算,可以说离开了计算机及相应的软件,就不可能解决任何稍微复杂的实际应用问题。Matlab是1984年美国Math Works公司的产品,MATLAB 语言具备高效、可视化及推理能力强等特点,它的推出得到了各个领域专家学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础,是目前工程界流行最广的科学计算语言。早在20世纪90年代中期,MATLAB就己成为国际公认的信号处理的标准软件和开发平台。从1996年后,美国新出版的信号处理教材就没有一本是不用MATLAB的。 本实验指导书结合数字信号处理的基本理论和基本内容,用科学计算语言MATLAB实现数字信号处理的方法和实践,通过实验用所学理论来分析解释程序的运行结果,进一步验证、理解和巩固学到的理论知识,从而达到掌握数字信号处理的基本原理和方法的目的。

相关文档