许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  C#调用Matlab 2018 DLL文件实现快速傅里叶变换(FFT)

C#调用Matlab 2018 DLL文件实现快速傅里叶变换(FFT)

阅读数 12
点赞 0
article_banner

C#调用Matlab2018 dll文件-快速傅里叶变换

目标:C#调用Matlab生成的dll文件(动态链接库);以matlab的 fft 函数为例,C#内生成两列数组,作为输入复数数组的实部和虚部,对该复数数组进行一维傅里叶变换,命令行输出变换后的函数实部和虚部。

/**LAST EDIT:2019/02/18 */

第一步:Matlab编写函数通过deployTool生成C#可以调用的dll文件

Matlab创建新文档命名为myfft.m,键入如下代码并保存:

% 对输入数据进行快速傅里叶变换% input: A实部、A虚部% output: B实部、B虚部 function [BReal,BImag] = myfft(AReal,AImag)AComplex = complex(AReal,AImag);nfft     = 2^nextpow2(length(AReal));BComplex = fft(AComplex,nfft);BReal    = real(BComplex);BImag    = imag(BComplex);end

然后,在matlab的命令行窗口输入deploytool,进入Compiler选择页面,选择Library Compiler,进入后选择.NET Assembly,添加刚刚编写的myfft.m

修改下类名称

单击右上角的Package按钮,完成dll文件打包。

第二步:在C#工程内调用Matlab刚刚生成的dll文件。

新建控制台C#工程,命名为CsharpMatlabFFT,并设置为x64位,与matlab版本相同,matlab版本为32位应选择C#项目为32位。

添加引用,MWArray.dll,64位请添加红框路径内的dll文件

添加引用,myfftNative.dll文件,在刚刚matlab生成的for_redistribution_files_only路径下

在新建的C#项目下找到program.cs文件,文件头添加代码块;

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using myfftNative;using MathWorks.MATLAB.NET.Arrays; //添加引用using MathWorks.MATLAB.NET.Utility;//添加引用 namespace CsharpMatlabFFT{    class Program    {        static void Main(string[] args)        {            /**初始化输入变量*/            int[] AReal = new int[1000];            int[] AImag = new int[1000];             /**循环赋值*/            for (int i = 0; i<AReal.Length; i++)            {                AReal[i] = 1;                AImag[i] = 0;            }             /**转化为Matlab输入变量*/            MWArray MWAReal = new MWNumericArray(AReal);            MWArray MWAImag = new MWNumericArray(AImag);             /**实例化Matlab自建类ClassMyFFT对象*/            myfftNative.ClassMyFFT fft = new ClassMyFFT();             /**调用Matlab自建类ClassMyFFT对象内myfft方法*/            object resultObj = fft.myfft(2, AReal, AImag);    //2为返回参数个数,AReal及AImag为输入参数            object[] resultObjs = (object[])resultObj;                        /**将matlab的类型转换为C#的数据类型*/            double[,] BReal = (double[,])resultObjs[0];            double[,] BImag = (double[,])resultObjs[1];             /**控制台输出*/            for (int i = 0; i < AReal.Length; i++)            {                Console.WriteLine(Convert.ToString(i) + " " + Convert.ToString(BReal[0,i])+" "+Convert.ToString(BImag[0, i]));            }        }    }}

附录:异常排除:

遇到类似如下情况,表示当前计算机内未安装对应版本的Matlab MCR_Installer,在Matlab官网上下载后安装并设置环境变量后即可运行,设置环境变量的方法参考https://jingyan.baidu.com/article/19020a0a057462529d2842d6.html

未经处理的异常: System.Exception: MWArray assembly failed to be initialized ---> System.Exception: The MATLAB Runtime instance could not be initialized ---> System.ApplicationException: The MATLAB Runtime instance could not be initialized Error initializing MATLAB Runtime: Error in initializing CTF core properties. Details: 'BadCast' 在 MathWorks.MATLAB.NET.Utility.MWMCR..ctor(String componentName, String componentPath, Boolean isLibrary) --- 内部异常堆栈跟踪的结尾 --- 在 MathWorks.MATLAB.NET.Utility.MWMCR..ctor(String componentName, String componentPath, Boolean isLibrary) 在 myfftNative.Cmyfft..cctor() --- 内部异常堆栈跟踪的结尾 --- 在 myfftNative.Cmyfft..ctor() 在 CsharpMatlabFFT.Program.Main(String[] args) 位置 https://www.gofarlic.com\☆FORESTHINK180925备份\001雷达仿真\编程学习\csharp\CsharpMatlabDemo\CsharpMatlabFFT\CsharpMatlabFFT\CsharpMatlabFFT\Program.cs:行号 27


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空