01/27

本文是北京理工大学2012年秋季学期开设的“数字信号处理”的课程设计报告。

基于MATLAB与VB.NET混合编程的数字信号分析软件设计

1 需求分析

用户需求

  1.  产生多种数字信号;
  2.  对产生的数字信号进行谱分析;
  3.  对产生出的数字信号进行滤波处理;
  4.  以图形/曲线方式,对产生出的数字信号及其经分析和滤波处理后的结果进行显示;
  5.  软件可视化效果良好,操作灵活方便。

需求抽象

图1 需求模型 如图1所示,用户需求的系统可以抽象为三个环节:信号源、滤波器、谱分析。其中:

  1. 信号源 需要能够产生方波、正弦波、白高斯噪声,并可以进行相互自由叠加;
  2. 滤波器 需要能够根据指标自动设计低通、带通、高通滤波器,并能够对信号源进行滤波处理;
  3. 谱分析 需要能够对信号源进行频谱和功率谱估计。

系统模型

1K__Learning_Fall_2012_INF05150_DigitalSgnlPrcssng_project_report_flowchart_filters 图2 系统模型 Definition 1. 信号源(Sources) 存储了规定的采样频率、时间轴下信号在各点处的幅度值。信号源之间能够相互进行加减等运算。 如图2所示,滤波器模块通过信号源输入输出,谱分析模块需要信号源输入。 信号源为本系统的基本运算对象。

2 设计方案及实现

MATLAB虽然具有强大的数学计算能力,但缺乏灵活的界面设计功能,同时MATLAB所采用的语言并不完备、表达能力有限。 本设计采用混合编程的方式,将MATLAB强大的计算能力与VB.NET良好的界面设计以及BASIC语言具有的清晰易读性结合起来,二者通过动态链接库(DLL)连结。

2.1 总体设计

图3 总体设计图 如图3所示,设计分为三个子项目:

Alpaca's Library
使用MATLAB实现本设计中所需的所有计算功能,以函数的形式封装入动态链接库中;
Mr.Alpaca
使用VB.NET设计用户界面,并根据用户的指令调用相应的Alpaca's Library函数,通过与之数据交换获取到计算结果呈现给用户;
Alpaca.Net
通过网站的Web界面向用户提供相关的计算服务,该模块暂不予实现。

2.2 Alpaca's Library 设计方案及实现

Alpaca's Library为MATLAB的“.NET Assembly”可部署项目。

2.2.1 Source类

本设计通过定义Source类的形式实现前述的“信号源”模型。其内部存储有时间点向量、数据点向量,每次初始化操作将清除所有数据并重新设置时间点向量。

属性

  1. Source.time_vector 时间点向量
  2. Source.data 数据点向量
  3. Source.length 时间点个数

方法

Source类还重载了+、-、.*、./运算符,提供了plot(...)、awgn(...)等数个函数的数据接口。

2.2.2 信号源模块

由于MATLAB语言的缺陷,其不能将类编译到动态链接库中,因此需要人工加入接口函数。

函数列表

  1. addSineWave 在当前信号源中加入正弦信号;
  2. addSquareWave 在当前信号源中加入方波信号;
  3. addWhiteGaussianNoise 在当前信号源中加入白高斯噪声;
  4. createSource 初始化信号源。

2.2.3 滤波器模块

如图4,该模块利用MATLAB的fdesign类根据输入指标进行滤波器的设计操作,并将设计的滤波器作用到当前信号源上。 图4 滤波器模块工作模式

函数列表

  1. allpass 全通滤波器设计指标设定(未启用);
  2. applyFilter 将当前滤波器应用到当前信号源;
  3. bandpass 带通滤波器设计指标设定;
  4. bandstop 带阻滤波器设计指标设定;
  5. clearFilter 清除当前滤波器设计指标;
  6. filterView 在新窗口绘制滤波器的频率特性;
  7. getAvailableMethods 获取当前指标所能使用的设计方法列表(未启用);
  8. getFilter 根据当前指标和设定的设计方法设计滤波器(内部调用);
  9. getFilterView 获取滤波器的频率特性图的数据流;
  10. highpass 高通滤波器设计指标设定;
  11. lowpass 低通滤波器设计指标设定。

2.2.4 谱分析模块

由于信号的样本总是有限长的,样本数也不可能像功率谱定义要求的那样有无限个(1),所以频谱和功率谱绘制都是对原始信号的谱进行估计的过程。本设计中,将FFT抽象成为对信号频谱的估计,因此FFT被归入估计方式,因此本模块的工作模式可以抽象成为如图5所示的模式。 图5 谱分析模块工作模式 本模块利用MATLAB的spectrum类实现功率谱的估计。

函数列表

  1. closeSpectrum 关闭谱分析模块;
  2. fftPlot FFT频谱估计图绘制(内部调用);
  3. spectrumCov 设定估计方式为“自相关法(功率谱)”;
  4. spectrumFFT 设定估计方式为“快速傅立叶变换法(频谱)”;
  5. spectrumMcov 设定估计方式为“改进的自相关法(功率谱)”;
  6. spectrumPeriodogram 设定估计方式为“周期图法(功率谱)”;
  7. spectrumPlot 根据指定的估计方式绘制谱估计图;
  8. spectrumWelch 设定估计方式为“Welch法(功率谱)”;
  9. spectrumYulear 设定估计方式为“Yulear法(功率谱)”。

2.2.5 绘图控制与输出模块

函数列表

  1. bigPlot 在新窗口中绘制信号、谱的汇总图;
  2. getBigPlot 获取汇总图的数据流;
  3. saveBigPlot 将汇总图按照指定格式存储到磁盘中;
  4. closePlot 关闭已经打开的绘图窗口;
  5. plotSource 在新窗口绘制信号源时域波形(已废弃);
  6. savePlotSource 磁盘存储信号源时域波形(已废弃)。

2.3 Mr.Alpaca 设计方案及实现

Mr.Alpaca为Visual Studio 2012的“VB.NET Windows Application”项目。界面设计如图6所示。 图6 程序主界面

2.3.1 实时绘图与图像控制

考虑到操作方便,设计者在见面中增加了波形的显示。由于采用了混合编程技术,不可能像在MATLAB中那样直接“改”绘图句柄来修改图片。

图像显示

设计者在Alpaca's Library项目中建立了例如getBigPlot(...)的绘图函数,将绘制的图片的字节流作为函数返回值返回给Mr.Alpaca.

尺寸控制

由于Mr.Alpaca中的图框可以自由调整大小,每次调用绘图函数的时候都会传入所需图片的尺寸,以匹配实际图框。

2.3.2 参数管理与数模切换及参数配置

参数存储

为了获得比较好的用户体验,设计者采用PropertyGridEx组件进行参数输入。 在信号源管理页面上,信号源以图标的形式显示。每一个信号源的数据都作为一个ListViewItem成员存储在图表视窗ListView中,参数值以ListViewItem.SubItem的形式存储到信号源对应的图标上。而在设定参数时,其则又需要被装入PropertyGridEx.Item,以便呈现给用户进行修改。 出于节约计算复杂度的考虑,设计者直接将PropertyGridEx.Item的二进制数据通过Base64编码后存入ListViewItem.SubItem。

数模切换及参数配置

所设计的软件可以在数字信号显示和模拟信号显示两种模式下进行切换,如图7。通过该对话框,还可以设定仿真的采样频率、仿真长度、默认阻抗大小。 图7 参数配置界面

参数校验

为了避免错误的参数导致滤波器设计错误,设计者在滤波器频率输入处都进行了范围检查:

  •  模拟信号模式下,所有频率都应当低于采样频率一般;
  •  数字信号模式下,所有归一化频率都应当低于1.

但考虑到观察过采样现象的需要,设计者未在信号源处进行频率参数校验。

2.3.3 仿真计算与信息提示

在每一次修改环境参数、信号源、滤波器、谱分析设置后,软件都会以气泡和状态栏文字的形式提示用户对当前图像进行更新,以避免用户错误使用过期的图片。 出于提高用户体验的考虑,每次计算错误的提示都以气泡的形式给出,既不打断使用者思路,又可以起到提示的作用。

3 成果分析

开发代号

Alpaca Digital Signal Processing Suite

最新版本

Version 1.11.2.170 Preview

版本统计

170 revision(s), from revision 0b3ce2e to revision 1ca5184

代码量

Mr.Alpaca
1,003行 99.1MB
Alpaca's Library
436行 77.0MB

4 测试结果

本项目采用开发与测试同步进行的模式,经过对各模块的测试,该系统可以实现了预计的功能,且提供了较好的用户体验。

5 结论与展望

本次设计实现了预计的功能。通过此次设计,设计者实现了MATLAB与VB.NET的联合编程,并成功使用了动态链接库。 在后续版本中,通过比较简单的修改,可以实现仿真方案的存储于加载功能,使用户不必每次重新配置滤波器等设置。

引用

1想你没完, "第11章经典谱估计_百度文库" (2013). 2维基百科, "动态链接库 --- 维基百科, 自由的百科全书" (2013).