Labview课程设计报告-张凯强

课程设计报告

摘要:要在LABVIEW环境中进行对声卡编程,就是运用常用周期信号及测试领域特殊信号的双通道模拟输出。由于专用数据采集卡成本比较昂贵、而且和计算机兼容性比较差等缺点,这个论文就是应用性能良好、价格低廉的计算机声卡设计一套基于 LabVIEW 的信号采集分析系统。该系统具有双通道、高保真、22K 甚至 44KHz 的采样率,实现了音频信号的实时采集、实时存储、回放、信号分析(时域分析和频域分析)等多种功能。实验结果表明:该设计方案具有设计简便、成本低、通用性高、扩展性好、界面大方简洁等优点,可广泛应用于工程测量和科学实验室等环境。

关键词:声卡;数据采集;虚拟仪器;LabVIEW ;

1 声卡信号采集系统总体设计方案

声卡采集系统原理框图如下图1所示。它主要由声源、信号调理模块、计算机声卡以及安装于计算机机上的LabVIEW软件等几部分组成。

图1 声卡采集系统原理框图

工作过程为:输入时,测试信号首先经过信号调理电路,利用PC机声卡的麦克风输入(mic in)或线路输入(line in)作为信号的输入端口,将获取到的模拟音频信号经过左右两个通道和A/D转换后送入计算机,通过LabVIEW编写的采集程序进行各种处理和保存;输出时,经过采集系统处理的数据通过总线将数字化的信号以PCM方式送到D/A转换器,编程模拟的音频信号由线路输出(line out)端口通过耳机或音响转换为音波播放出来。

信号调理电路:在信号进入声卡之前必须经过信号调理,主要包括信号的放大、滤波、隔离和线性化处理,以使其能够被声卡正确的识别。声卡的麦克风(mic in)输入端具有高增益放大器,会使得信号产生较大失真,所以选择线路(line in)输入信号时,其输入电压应为-1~+1V。

声卡:计算机的声卡作为数据采集卡,其A/D转换功能已经成熟,而且计算机无需添加额外配件便能完成所有音频信号的采集功能,具有价格低廉、采样精度高,与LabView结合编程简单等优点,因此,利用声卡可以构成一个较高采样精度、中等采样频率、灵活性好的信号采集系统。

声卡主要技术指标有采样位数、采样频率、频率范围和频率响应、基准电压等。

(1)采样位数:采样位数可以理解为声卡处理声音的解析度。这个数值越大,解析度就越高,录制和回放的声音就越真实。如今市面上所有的主流产品都是16位的声卡,而一般的数据采集卡大多也才有12位,因此,声卡相较于常用的数据采集卡毫不逊色[3]。

(2)采样频率:采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。在当今的主流民用声卡上,采样频率一般共分为8 KHz 、11.025KHz、22.05KHz和44.1KHz四个等级,少数可以达到48 KHz 。对于20Hz~20KHz范围内的音频信号,如果采用48 KHz采样频率,虽然理论上是可行的,但是效果已经不是最好。因而使用声卡的局限性就是不允许用户在最高采样率下随意设定采样频率。对于高于48KHz的采样频率人耳已无法辨别出来了,因此没有实用价值。

(3)频率范围和频率响应:前者是指音响系统能够回放的最低有效回放频率与最高有效回放频率之间的范围;后者是指将一个以恒电压输出的音频信号与系统相连接时,音箱产生的声压随频率的变化而发生增大或衰减、相位随频率而发生变化的现象。以声卡作为虚拟测试仪器的硬件设备必须对其频率特性有所了解。本系统所用计算机主板集成声卡是Reaktek的ALC880 Codec,根据其性能指标,设置采样率为44.1KHz,采样位数为双通道,采样比特数为16位,以保证采样时的干扰较小、波形稳定[4]。

(4)基准电压:声卡没有基准电压,因此无论是A/D还是D/A转换器,都需要用户参照基准电压进行标定[5]。

2.1 虚拟示波器的设计

虚拟示波器的前面板是应该根据实际中的仪器面板以及该仪器所要实现的各种功能进行设计的程序交互式图形化用户界面。根据计算机声卡的实际特性,将声卡设置为双通道、44.1kHz采样频率、16位采样比特数、连续采样等,如图2所示。本设计根据实际显示需要,设计的显示前面板如图3所示,该虚拟示波器界面实时显示了所采集歌声的实时信号。同时,实时显示界面的示波器属性设置为X、Y轴均设置为“自动调整标尺”,从而保证无论信号幅值如何改变,总可以在纵坐标上是清晰显示,这样不仅方便用户操作,而且观察方便。

图2 声卡参数设置

图3 实际采集音频信号实时显示

图4 虚拟示波器后面板程序

虚拟示波器主要是对声卡采集音频信号的时域实时显示,其后面板程序主要使用while循环(图太大没有方便截出)结构实现数据实时显示和数据实时存储,实际后面板如图4所示。

2.2 虚拟数据分析仪设计

数据分析仪主要包括数据回放、信号参量、幅度相位谱和功率谱的测量等。数据回放主要是将已存储的信号重新读取然后进行分析;数据信号参量测量主要从时域上对信号的周期平均值、周期均方值、峰峰值、均值等测量;幅度相位谱和功率谱主要是从频域上对录音信号的幅度、相位以及功率进行测量。

对手动保存的历史采样信号文件,通过历史数据回放功能,可以逐块地由软件象采集真实数据一样,重新由软件显示、处理;由此可以重现试验过程、检验各种功能、验证用户的各种设置;在软件模块中,用户可以进一步对LabVIEW采集的数据进行进一步分析、处理;历史数据回放功能能让用户在试验前就调试程序、在试验后反复用试验数据验证,即用实际数据仿真试验,减少试验成本、重现关键试验。历史波形回放程序框图如图5所示。

图5 波形回放后面板程序

时域分析是一种直接在时间域中对系统进行分析的方法,具有直观、准确的优点,可以提供数据采集系统时间响应的全部信息。

图6 虚拟数据分析仪框图程序

频域分析是通过傅里叶变换将时域信号变换到频域,其主要是了解信号的频谱成分以及各种成分的强度。本设计主要实现了对采集信号的幅度谱、相位谱和功率谱分析等功能。实际程序如图6所示。其中,对信号加窗时,使用矩形窗将信号突然截断,在频域上造成很宽的、原信号中不存在的附加频率成分,即有限化带来的泄露问题。为了防止采集信号发生泄露,对所采集信号进行加窗处理,系统选择了汉宁窗。虚拟分析仪的界面如图7所示,该图显示为实际采集音频信号的FFT变换频谱。

图7 虚拟频谱分析仪界面

3 结束语

利用计算机声卡代替昂贵的数据采集卡采集数据,以图形化编程语言的虚拟仪器软件LabVIEW为开发工具,充分利用计算机强大的信息处理能力和LabVIEW模块化编程技术,实现了常见音频信号的实时采集、显示、存储,回放以及分析等功能。其有效的利用了计算机资源,节约了数据采集成本,易于构建和升级,并且界面友好,操作简单,成本较低,易于实现,不仅可以应用于科研试验,而且可以应用于检测车辆等方面,具有比较广阔的应用前景。

参考文献

[1] National Instruments. LabVIEW User Manual [M]. Texas: National Instruments, 2003.

[2] 陈锡辉.LabVIEW 8.20 程序设计从入门到精通[M].北京:清华大学出版社,2007

[3] 王珍宁,吴先球,张诚,陈俊芳.基于声卡的远程数据采集[J].微计算机信息(测试自动化),2007,23(4):141~142.

[4] 周爱军,马海瑞.基于声卡的 LabView 数据采集与分析系统设计[J].微计算机信息,2005,21(9):108~110.

[5] 徐继宁,程志强.基于声卡的虚拟信号发生器设计与实现[J].工业控制与计算机,2007,20(2):72~73.

[6] 周林,殷侠等.数据采集与分析技术[M].西安电子科技大学出版社,2005

 

第二篇:java课程设计报告,java Eclipse PowerDesigner实现文件分割合并功能

  Java程序设计语言课程设计(论文)

题目:       文件合并、分割软件     

院 (系):          

专业班级:         

学    号:          

学生姓名:          

指导教师:         

教师职称:          

起止时间:          


目  录

第1章 课程设计的目的与要求. 1

1.1   课程设计的目的. 1

1.2   课程设计的实验环境. 1

1.3   课程设计的预备知识. 1

1.4   课程设计的要求. 1

第2章 课程设计的内容. 2

2.1   设计内容概述. 2

2.1.1 设计目标. 2

2.1.2 设计思路. 2

2.2   系统概要设计. 2

2.2.1 系统开发环境. 2

2.2.2 系统主界面设计. 2

2.2.3 系统功能说明. 3

2.2.4 类图ClassDiagram设计. 5

2.3   系统详细设计. 6

2.3.1 使用的java系统类说明. 6

2.3.2 自定义类及方法说明. 6

2.4   系统测试分析. 14

2.4.1 系统运行测试. 14

2.4.2 系统测试结果分析. 16

第3章 课程设计总结. 17

参考文献  18

                                                                         第1章 课程设计的目的与要求

1.1      课程设计的目的

《JAVA面向对象程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA面向对象程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

1.2      课程设计的实验环境

本课程设计借助的硬件环境为能运行Windows XP、Vista或Windows 7的微机系统,软件需求为Eclipse代码编辑器、PowerDesigner类图设计软件。

1.3      课程设计的预备知识

熟悉《JAVA 面向对象程序设计》教材,熟悉Eclipse软件和PowerDesigner软件的功能并能熟练运用。

1.4      课程设计的要求

按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

                                                                                   第2章 课程设计的内容

2.1      设计内容概述

2.1.1 设计目标

本次课程设计内容为设计一个文件分割、合并器。实现对任意文件的分割,并且能够对分割后的文件进行合并还原。并将处理后的文件存入指定路径的目录当中。实现系统托盘,最小化时到系统托盘。

2.1.2 设计思路

要实现对任意文件的分割,这就需要找到所有文件的共同之处。其实,也很简单,我们把文件都看作是一连串的字节流组成的即可。利用java.io包中的FileOutputStream和FileInputStream 对文件进行字节流的读写。文件和并,通过对欲合并文件的辨认(本程序通过后缀“-split”来确定),将分割后的文件加入一个ArrayList<File>中,利用迭代器用文件分割同样的道理进行合并还原。

2.2      系统概要设计

2.2.1 系统开发环境

开发平台:Microsoft Windows XP Professional Service Pack 2

开发工具:PowerDesigner 11.0 + JDK 1.6.0_02 + Eclipse

2.2.2 系统主界面设计

软件主界面如图2.1A和2.1B所示。

图2.1A 软件分割功能主界面图

图2.1B 软件合并功能主界面图

2.2.3 系统功能说明

1、软件功能特点

(1)可以实现对系统磁盘中的任意文件的分割。

(2)可以实现对系统磁盘中的任意文件的合并。

(3)可以将指定文件按大小或按数目进行分割。

(4)可以按不同的单位量对文件进行分割。

(5)可以设置文件分割时参数。

(6)可以将处理后的文件存入指定的磁盘路径中。

(7)可以调用系统的计算器在文件处理时帮助计算相关数据。

(8)在文件处理过程中显示相关处理状态的信息。

2、工作流程图

系统工作流程图如图2.2所示。

图2.2 系统工作流程图

2.2.4 类图ClassDiagram设计

系统的类图设计如图2.3所示。

图2.3 类图ClassDiagram

2.3      系统详细设计

2.3.1 使用的java系统类说明

本软件的设计使用到的java系统类为以下包中的类:(设计代码)

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

import java.sql.Date;

import java.util.*;

import javax.swing.*;

import javax.swing.border.LineBorder;

其中主要的类为JFrame、Canvas。

使用到的java系统中接口有四种:WindowListener、ActionListener、ItemListener、ActionListener。

2.3.2 自定义类及方法说明

1、类名: FileCut

作用: 自定义的主类。
继承的父类: JFrame类。
实现的接口: Cloneable接口。

public class FileCut extends JFrame implements Cloneable{

public FileCut() {// 构造函数  }

public static void main(String[] args) {//主函数  }

}
2、类名: BrowseSourceFile
作用: 自定义的类,实现浏览文件或文件夹的功能,当找不到指定文件或文件夹时捕获异常。
继承的父类: 没有。 
实现的接口: ActionListener接口。

class BrowseSourceFile implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {  }

catch (Exception ex) {  }

}

}

弹出浏览窗口如图2.4A和2.4B所示。

图2.4A 分割文件时选择目标文件浏览窗口

图2.4B 合并文件时选择目标文件浏览窗口

3、类名: SplitItemListener
作用: 自定义的类,实现分割文件的功能。
继承的父类: 没有。
实现的接口: ItemListener接口。

class SplitItemListener implements ItemListener {//分割文件功能

public void itemStateChanged(ItemEvent e) {

}

}
4、类名: UnionItemListener
作用: 自定义的类,实现合并文件的功能。
继承的父类: 没有。
实现的接口: ItemListener接口。

class UnionItemListener implements ItemListener {//合并文件功能

public void itemStateChanged(ItemEvent e) {

}

}
5、类名: BigOrSmallItemListener
作用: 自定义的类,实现在分割文件时按大小分割的功能。
继承的父类: 没有。 
实现的接口: ItemListener接口。

class BigOrSmallItemListener implements ItemListener {//按大小分割

public void itemStateChanged(ItemEvent e) {

}

}
6、类名: FileNumberItemListener
作用: 自定义的类,实现在分割文件时按数目分割的功能。
继承的父类: 没有。 
实现的接口: ItemListener接口。

class FileNumberItemListener implements ItemListener {//按数目分割

public void itemStateChanged(ItemEvent e) {

}

}
7、类名: SourceActionListener
作用: 自定义的类,对文件进行不同方式处理时设定对象限制,即在分割处理时只能选择指定文件,在合并处理时可选择文件或文件夹,当指定目标为空时或找不到指定文件或文件夹时捕获异常。
继承的父类: 没有。 
实现的接口: ActionListener接口。

class SourceActionListener implements ActionListener {//源文件

public void actionPerformed(ActionEvent e) {

try {  }

catch (NullPointerException npe) {

return;// 直接关闭窗体退出的情况}

catch (Exception exception) {

FileCut.message.setText("找不到指定文件或文件夹!");}

}

}
8、类名: TargetActionListener
作用: 自定义的类,实现将处理后的文件存放到指定路径的文件当中的功能。
继承的父类: 没有。 
实现的接口: ActionListener接口。

class TargetActionListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

}

}

弹出的浏览窗口如图2.5A和2.5B所示。

图2.5A 分割文件时指定存储位置浏览窗口

图2.5B 合并文件时指定存储位置浏览窗口

9、类名: CalcuAction
作用: 自定义的类,实现调用微机系统中计算器的功能。
继承的父类: 没有。 
实现的接口: ActionListener接口。

class CalcuAction implements ActionListener {

public void actionPerformed(ActionEvent e) {

}

}
10、类名: EnterAction
作用: 自定义的类,实现“确定”按钮的功能,对文件进行相关处理。
继承的父类: 没有。
实现的接口: ActionListener接口。

class EnterAction implements ActionListener {

public void actionPerformed(ActionEvent e) {// 调用核心功能代码

if (FileCut.operateKind == 1)

ProcessFile.cutFile();

else

ProcessFile.unionFile();

}

}
11、类名: CancelAction
作用: 自定义的类,实现“取消”按钮的功能,所有编辑框以及信息提示框清空。
继承的父类: 没有。
实现的接口: ActionListener接口。

class CancelAction implements ActionListener {

public void actionPerformed(ActionEvent e) {

FileCut.JTextField1.setText("");

FileCut.JTextField2.setText("");

FileCut.JTextField3.setText("");

FileCut.message.setText("");

}

}
12、类名: ClearAction
作用: 自定义的类,实现“重置”按钮的功能,所有编辑框清空。

继承的父类: 没有。
实现的接口: ActionListener接口。

class ClearAction implements ActionListener {

public void actionPerformed(ActionEvent e) {

FileCut.JTextField1.setText("");

FileCut.JTextField2.setText("");

FileCut.JTextField3.setText("");

}

}
13、类名: ProcessFile

作用: 自定义的类,实现在对文件分割或合并时显示相关处理状态和结果的功能。
继承的父类: 没有。 
实现的接口: 没有。

class ProcessFile {

public static void cutFile() { // 文件分割 }

public static void unionFile() {// 文件合并 }

}
14、类名: MyCanvas
作用: 自定义的类,用于实现对软件主界面顶部图片的添加功能。
继承的父类: Canvas类。
实现的接口: 没有。

class MyCanvas extends Canvas {// 加载顶部图片

MyCanvas() {setSize(438, 45); }

public void paint(Graphics g) {

g.drawImage(myimage, 0, 0, myimage.getWidth(this), myimage.getHeight(this), this);}

}
15、类名: MyWindowListener
作用: 自定义的类,实现对系统主窗口的一些基本操作的功能。
继承的父类: 没有。 
实现的接口: WindowListener接口。

class MyWindowListener implements WindowListener {

// 利用singleton(单态)模式获取唯一对象

private static MyWindowListener mwl = new MyWindowListener();

private MyWindowListener() {

}

public static MyWindowListener getInstance() {

return mwl;

}

public void windowActivated(WindowEvent e) {

}

public void windowClosed(WindowEvent e) {

}

public void windowClosing(WindowEvent e) {

System.exit(0);//关闭窗体,退出程序

}

public void windowDeactivated(WindowEvent e) {

}

public void windowDeiconified(WindowEvent e) {

}

public void windowIconified(WindowEvent e) {//最小化到托盘图标

e.getWindow().dispose();

DesktopTray.creatDesktopTray();

}

public void windowOpened(WindowEvent e) {

}

}
16、类名: DesktopTray
作用: 自定义的类,实现将系统窗口进行最小化托盘或最大化的功能。
继承的父类: 没有。 
实现的接口: 没有。

class DesktopTray {//实现托盘图标

public static void creatDesktopTray() {  }

public static void disposeDesktopTray() { }

public static void sendMail(String mail) {  }

public static void calculator(String proName) {  }

public static void createPopupMenu() {//托盘的弹出菜单  }

}

2.4      系统测试分析

2.4.1 系统运行测试

系统设计完成之后,需要进一步对系统的运行情况进行测试,目的是检验程序代码的完整性和准确性,同时检验窗口是否出现异常情况。在系统测试中,检验方法主要是运行系统,即分别利用软件的分割和合并功能对目标文件进行相关处理,然后检查处理结果是否正确。本次测试选取的目标文件为Word文件,以按数目的方式对同一个文件进行分割和合并,测试结果如图2.6及图2.7A、图2.7B、图2.7C所示。

图2.6 按数目分割文件测试结果

将第一个分割后的子文件放入指定文件夹中。

图2.7A 合并文件第一步结果图

将第二个分割后的子文件放入同一个指定文件夹中。

图2.7B 合并文件第二部结果图

将第三个分割后的子文件放入同一个指定文件夹中。

图2.7C 合并文件第三步结果图

2.4.2 系统测试结果分析

经过测试,系统的各个部分的功能均能完整实现,测试结果完全正确。因此,该系统软件可以用于实际应用当中。

                                                                                      第3章 课程设计总结

我自己感觉此次课程设计做得挺成功的,通过这一次课程设计我学到了不少实际编程的知识。最重要的是我在这一学期对《Java 面向对象程序设计》这一教材学习得很努力,掌握了一定的java基础知识,使得此次课程设计进展相对顺利,基本遇到的问题都能自己独立解决了。

在课程设计开始的几天里,我主要搜取相关资料,在互联网上搜取了大量关于java课程设计的材料,然后从中选取了一份作为主要参考依据,进行此次的java课程设计。

设计过程中我主要完成了类图的设计以及java课程设计说明的编写。

在这课程设计期间我的学长帮助了我,有些东西是我们一起探讨,一起解决方法的。当然在学习Java和设计程序的过程中还得到了刘维军老师的辛勤指导,为我解答了不少的疑问。同时,在刘老师身上我们学到了很多实用的东西,在此表示衷心的感谢!同时,还要感谢帮助过我的学长及其他同学! 
    此次课程设计使我学到了不少书本上没有的知识;学到了很多java编程知识,并学会了简单的使用PowerDesigner来设计类图,由此我发现了不少的问题。他使我对PowerDesigner软件有了一定的了解,并掌握了一些基础的功能使用方法。

经过这次的课程设计,尽管遇到了很多难题,但是让我更加受益的是在这次课程设计中得到的经验、心得和锻炼。这让我发现编译程序的过程其实就是不断解决问题的过程,从中也感受到了编写软件的乐趣,一个人永远有学不完的知识,就算开发软件的各项知识都学会了,但在实际开发过程中仍然会遇到不少问题,这是就要做到以下这两点:一个是“查”,另一个则是“问”。通过仔细的查阅资料和询问老师以及同学,最终解决了不少的问题。这也是使我认识到解决问题一方面依靠外界的帮助,更重要的是依靠自己的能力。这次课程设计给我以前学过的知识做了一个总结,为我深入学习编程做了铺垫。

参考文献

[1] 陈明.JAVA学教程.科技出版社,2002.

[2] 飞思科技产品研发中心.JAVA应用开发.北京:电子工业出版社.2003.5

[3] JAVA高手突破.北京:清华大学出版社.2002.8

[4] 乔林.JAVA应用技术.中国铁道出版社.2003.12

[5] 张立科.实用JAVA应用学.北京:人民邮电出版社.2002.9

[6] 严蔚敏.JAVA第二版.北京:清华大学出版社.2001.7

[7] 王珍玲.实用JAVA工程教程.北京:高等教育出版社.2004.6

[8] 李维.面向对象开发实践之路.北京:电子工业出版社.2004.4

[9] 袁绍欣,赵祥模,葛玮等.Java面向对象程序设计.北京:清华大学出版社.2007.8

相关推荐