主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

在 .NET 程序集中使用多个类

此示例向您说明如何创建使用多个类来分析信号并绘制结果图形的 .NET 程序集。

在此示例中,您执行以下步骤:

  • 使用 MATLAB® Compiler SDK™ 产品创建包含多个类的程序集 (SpectraComp)。

  • 在 C# 应用程序 (SpectraApp.cs) 或 Microsoft® Visual Basic® 应用程序 (SpectraApp.vb) 中访问该组件,包括使用 MWArray 类层次结构来表示数据。

  • 使用 Visual Studio® .NET 开发环境构建并运行应用程序。

SpectraComp 应用程序

SignalAnalyzer 类对输入数据数组执行快速傅里叶变换 (FFT)。此类的方法 computefft 将该 FFT 的结果作为两个输出数组返回 - 频率点数数组和功率谱密度。

第二个类 Plotter 使用 plotfft 方法绘制返回的数据。computefftplotfft 这两个方法封装了 MATLAB 函数。computefft 计算输入数据的 FFT 和功率谱密度 computefft 并根据输入数据的长度和采样间隔计算频率点向量。plotfft 在 plotfft 图形窗口中绘制 MATLAB 数据和功率谱密度。

文件

MATLAB 函数computefft.m
plotfft.m
MATLAB 函数位置matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\SpectraExample\SpectraComp\
C# 代码位置matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\SpectraExample\SpectraCSApp\SpectraApp.cs
Visual Basic 代码位置matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\SpectraExample\SpectraVBApp\SpectraApp.vb

过程

  1. 将 MATLAB 产品附带的以下文件夹复制到您的工作文件夹:

    matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\SpectraExample
    

    在 MATLAB 命令提示符下,导航到工作文件夹中的新 SpectraExample\SpectraComp 子文件夹。

  2. 检查 MATLAB 函数 computefft.mplotfft.m

     computefft.m

     plotfft.m

  3. 使用 .NET 程序集编译器compiler.build.dotNETAssembly 构建 .NET 组件。

    将库命名为 SpectraComp。将名为 SignalAnalyzer 的类映射到函数 computefft.m,并将名为 Plotter 的第二个类映射到函数 plotfft.m

    例如,如果您使用的是 compiler.build.dotNETAssembly,请输入:

    cmap = containers.Map;
    cmap('SignalAnalyzer') = 'computefft.m';
    cmap('Plotter') = 'plotfft';
    buildResults = compiler.build.dotNETAssembly(cmap, ...
    'AssemblyName','SpectraComp');

    有关详细信息,请参阅生成 .NET 程序集并编译 .NET 应用程序中的说明。

  4. 确定是否使用 C# 还是 Visual Basic 来访问组件。

    • C#

      如果您使用 C#,请为访问该组件的 C# 应用程序编写源代码。

      此示例的示例应用程序位于 SpectraExample\SpectraCSApp\SpectraApp.cs 中。

       SpectraApp.cs

      以下语句显示如何使用 MWArray 类库构造 MWNumericArray,用作 computefft 函数的方法输入。

      MWNumericArray data= new MWNumericArray(MWArrayComplexity.Real, 
      MWNumericType.Double, numSamples);

      以下语句创建 SignalAnalyzer 类的实例并调用方法 computefft,请求 3 个输出。

      SignalAnalyzer signalAnalyzer = new SignalAnalyzer(); 
      ...
      MWArray[] argsOut= signalAnalyzer.computefft(3, data, interval);
      
    • Visual Basic

      如果您使用 Visual Basic,请为访问该组件的 Visual Basic 应用程序编写源代码。

      此示例的示例应用程序位于 SpectraExample\SpectraVBApp\SpectraApp.vb 中。

       SpectraApp.vb

      下面的语句展示了如何使用 MWArray 类库构造必要的数据类型:

      Dim data As MWNumericArray = New MWNumericArray_
          (MWArrayComplexity.Real, MWNumericType.Double, numSamples)
      ...
      Dim resultArray As MWNumericArray = New MWNumericArray_
          (MWArrayComplexity.Complex, 
           MWNumericType.Double, numElements)
      

      以下语句创建 SignalAnalyzer 类的实例并调用方法 computefft,请求三个输出:

      Dim signalAnalyzer As SignalAnalyzer = New SignalAnalyzer
      ...
      Dim argsOut() As MWArray = 
          signalAnalyzer.computefft(3, data, 
              MWArray.op_Implicit(interval))

    无论哪种情况,SpectraApp 程序都会执行以下操作:

    • 构造一个输入数组,其值表示一个随机信号,其中包含两个频率分别为 15 Hz 和 40 Hz 的正弦波

    • 创建包含数据的 MWNumericArray 数组

    • 实例化 SignalAnalyzer 对象

    • 调用 computefft 方法,计算 FFT、频率和谱密度

    • 实例化 Plotter 对象

    • 调用 plotfft 方法,绘制数据

    • 使用 try / catch 模块来处理异常

  5. 使用 Visual Studio 打开与您的应用程序语言相对应的 .NET 工程文件。

    • C#

      如果您使用的是 C#,则 SpectraCSApp 文件夹包含此示例的 Visual Studio .NET 工程文件。在 Windows® 资源管理器中双击 SpectraCSApp.csproj 在 Visual Studio .NET 中打开该工程。您也可以通过右键点击 SpectraCSApp.csproj 并选择在 MATLAB 外部打开从桌面打开它。

    • Visual Basic

      如果您使用的是 Visual Basic,则 SpectraVBApp 文件夹包含此示例的 Visual Studio .NET 工程文件。在 Windows 资源管理器中双击 SpectraVBApp.vbproj 在 Visual Studio .NET 中打开该工程。您也可以通过右键点击 SpectraVBApp.vbproj 并选择在 MATLAB 外部打开从桌面打开它。

  6. 添加对您的程序集文件 SpectraComp.dll 的引用。

  7. 添加对 MWArray API 的引用。

    如果您的系统上安装了 MATLABmatlabroot\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll
    如果您的系统上安装了 MATLAB Runtime<MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll

  8. 在 Visual Studio .NET 中构建并运行 SpectraApp 应用程序。

    该程序显示以下输出:

    FFT:
       1.0e+02 *
    
       4.8646 + 0.0000i
      -0.0289 + 0.1080i
      -0.0326 + 0.0237i
      -0.0141 - 0.0148i
       0.0674 - 0.0487i
       0.0753 + 0.0669i
       0.0275 - 0.0101i
      -0.0429 + 0.0472i
       0.0803 - 0.1163i
      -0.0619 - 0.1072i
       0.0565 - 0.0502i
      -0.0223 + 0.0587i
      -0.0853 - 0.0812i
      -0.0662 - 0.0143i
       0.0543 - 0.0972i
       0.0814 - 0.0463i
      -0.0981 - 0.0190i
       0.0042 + 0.0083i
      -0.0339 + 0.0290i
       0.0291 + 0.0036i
    
    Frequency:
       0.0000 + 0.0000i
       0.0999 + 0.0000i
       0.1998 + 0.0000i
       0.2997 + 0.0000i
       0.3996 + 0.0000i
       0.4995 + 0.0000i
       0.5994 + 0.0000i
       0.6993 + 0.0000i
       0.7992 + 0.0000i
       0.8991 + 0.0000i
       0.9990 + 0.0000i
       1.0989 + 0.0000i
       1.1988 + 0.0000i
       1.2987 + 0.0000i
       1.3986 + 0.0000i
       1.4985 + 0.0000i
       1.5984 + 0.0000i
       1.6983 + 0.0000i
       1.7982 + 0.0000i
       1.8981 + 0.0000i
    
    Power Spectral Density:
      15.3755 + 0.0000i
       0.3534 + 0.0000i
       0.1274 + 0.0000i
       0.0646 + 0.0000i
       0.2628 + 0.0000i
       0.3183 + 0.0000i
       0.0925 + 0.0000i
       0.2016 + 0.0000i
       0.4465 + 0.0000i
       0.3912 + 0.0000i
       0.2387 + 0.0000i
       0.1985 + 0.0000i
       0.3723 + 0.0000i
       0.2140 + 0.0000i
       0.3520 + 0.0000i
       0.2960 + 0.0000i
       0.3158 + 0.0000i
       0.0294 + 0.0000i
       0.1411 + 0.0000i
       0.0927 + 0.0000i
    
    Plotting Power spectral density, please wait...
    A figure that displays a plot of the power spectral density.

另请参阅

主题