在 .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 方法绘制返回的数据。computefft 和 plotfft 这两个方法封装了 MATLAB 函数。computefft 计算输入数据的 FFT 和功率谱密度 computefft 并根据输入数据的长度和采样间隔计算频率点向量。plotfft 在 plotfft 图形窗口中绘制 MATLAB 数据和功率谱密度。
文件
| MATLAB 函数 | computefft.mplotfft.m |
| MATLAB 函数位置 | |
| C# 代码位置 | |
| Visual Basic 代码位置 | |
过程
将 MATLAB 产品附带的以下文件夹复制到您的工作文件夹:
matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\SpectraExample
在 MATLAB 命令提示符下,导航到工作文件夹中的新
SpectraExample\SpectraComp子文件夹。检查 MATLAB 函数
computefft.m和plotfft.m。使用 .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 应用程序中的说明。
确定是否使用 C# 还是 Visual Basic 来访问组件。
C#
如果您使用 C#,请为访问该组件的 C# 应用程序编写源代码。
此示例的示例应用程序位于
SpectraExample\SpectraCSApp\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中。下面的语句展示了如何使用
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模块来处理异常
使用 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 外部打开从桌面打开它。
添加对您的程序集文件
SpectraComp.dll的引用。添加对
MWArrayAPI 的引用。如果您的系统上安装了 MATLAB matlabroot\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll如果您的系统上安装了 MATLAB Runtime <MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll在 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...

