zoukankan      html  css  js  c++  java
  • Matlab时频图

    [b,f,t]=specgram(data,nfft,Fs,window,numoverlap); imagesc(t,f,20*log10(abs(b))), axis xy, colormap(jet); % 画时频图

    其中: % nfft是fft的长度,越长的话,频域分辨率越高,但是,对于语音这种时变信号,不能过长,一般采样率16k或者8k的取1024或者512,要看采样率的高低。 % fs就是采样率,不多说了。 % window是指窗的长度,一般和nfft相同即可。 % numoverlap是指nfft减去步长,越大越好,但运算量越大。一般取nfft的3/4效果就比较好了。 % 举例: % b= specgram(a,512,8000,512,384); % b是一个矩阵,复数的,画图的时候需要取绝对值!

    ###C#与MATLAB之间传递参数

    MWNumericArray是MWArray和c#中数据的中间类,怎么用?怎样在C参数?

    a.double型、int型等数值类型的变量传递

    MWNumericArray i = null, result = mydouble;

    i=4;

    myClass myclass = new myClass(); //实例化 result = (MWNumericArray)myclass.myfunc(i);

    b.字符串(需要用到MWCharArray和MWArray转换) MWCharArray FileName = myString; MWNumericArray sensitivity; sensitivity = (MWNumericArray)myClass.myAlgorithm((MWArray)

    c.多个输出参数组成的数组 MWNumericArray out_Arr = (MWNumericArray)out_Args[1]; //取的数组(matlab返回的数组下界是从1开始的) 取出数组中的一个元素值 mydouble=out_Arr[i].ToScalarDouble(); 如上面例子ToScalarDouble一类的toXXXX等方法还有许多。

    d.result.toArray可以把matlab返回的矩阵变成C#的n x m数组,eg: double[,] csArray= (double[,])result.ToArray(MWArrayComponent

    e.将数组传入Matlab(和传递单个数值的方法一样) double[,] dbx = new double[2, 2] { { 1, 2 }, { 3, 4 } }; MWNumericArray x=dbx; myclass.picture(x);


    M文件如何接收和返回? function x=test(h,d) //接收两个参数,返回一个 function [x1,x2]=test(h,d) //返回数组


    以上为.Net方式连接,以下为COM方式连接(编译速度而言.net的方式要快上很多,而且似乎比较稳定) matlab编译工作

    • mbuild -setup
    • deploytool,Matlab Builder for .net,Generic COM Component
    • 添加m函数文件(eg: myfunc.m),改类名(eg: myComClass),build 注册dll regsvr32 myCom.dll regsvr32 mwcomutil.dll VS2005调用:
    • Reference加Com控件
    • 调用示例 double[,] arr = null; object in_a, out_a; in_a = 500; out_a = arr1; myCom.myComClass mc = new myCom.myComClass(); mc.myfunc(1, ref out_a, in_a);

    小例子:(提取matlab返回的两个参数并转化为C#的矩阵) Code testz.testzclass st = new testz.testzclass(); MWArray[] max = st.testz(2); MWNumericArray x1 = (MWNumericArray)max[0]; MWNumericArray x2 = (MWNumericArray)max[1]; double[,] location1 = (double[,])x1.ToArray(MWArrayComponent.Real); double[,] location2 = (double[,])x2.ToArray(MWArrayComponent.Real); label1.Text = location1[1,2].ToString(); 其中的M文件: Code function [x1,x2]=testz() x1=[1 2 3; 4 5 6; 7 8 9;]; x2=[9 8 7; 6 5 4; 3 2 1;];

    另一篇: 以下是本人编程中总结的一些思路,拿出来与大家共享。不对之处,请留言说明。 版本:Matlab R2007b ,Visual Studio 2005 C++/C#数据类型到M类型 此方向转换十分简单。 如果C++/C#数据不是数组, • 直接将值传递给已经初始化的MWArray数组中的成员 • 直接将数据类型赋值给已经初始化的MWNumericArray变量。 • 直接将字符串类赋值给已经初始化的MWCharArray变量。 如果是数组类型: • 直接赋值给MWNumericArray变量; • 赋值给MWArray变量,则在前面加上类型转换如:(MWNumericArray)进行强制转换。 总之,MWArray是总类型,其它的以MW开头,以Array结尾的变量类型都可以直接对它进行赋值或取值。 M类型到C++/C#数据类型 MWArray M类型,它是M文件的编译后内部的标准类型,一切C++/C#类型都要最终转换成此类型,方可作为参数调用M语言函数。 MWCharArray M的字符串类型,使用它可以将M中的字符类型转换成C++/C#的字符串类型。 MWNumericArray MWNumericArray是MWArray与C#等语言的转换中间类型。 常用的转换函数: ① public Array ToArray(MWArrayComponent component); 将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。 ② public byte ToScalarByte(); 将M类型转换成C#的字节类型; ③ public double ToScalarDouble(); 将M类型转换成C#的双精度类型; double temp = ((MWNumericArray)(mwArgout[0])).ToScalarDouble(); ④ public float ToScalarFloat(); 将M类型转换成C#的单精度类型; ⑤ public int ToScalarInteger(); 将M类型转换成C#的整型类型; ⑥ public long ToScalarLong(); 将M类型转换成C#的长整C/C++/C#数据型类型; ⑦ public short ToScalarShort(); 将M类型转换成C#的短整型类型; ⑧ public override string ToString(); 将M类型转换成C#的字符串类型;string arror = mwArgout[2].ToString(); ⑨ public Array ToVector(MWArrayComponent component); 将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。 下面使用调试过的代码示例表述①⑨两个函数的区别: ① double[,] Temp1 = new double[1,3]; Temp1= (double[,])((MWNumericArray)mwArgout[1]).ToArray(MWArrayComponent.Real); ⑨ double[] s1 = new double[2]; s1 = (double[])((MWNumericArray)mwArgout[1]).ToVector(MWArrayComponent.Real); 从以上代码可以看出:函数①得到了二维数组,而⑨则是得到了一维数组。转换成C++/C#数据类型后,它们的维数均为从0开始。

  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/lhuser/p/7163561.html
Copyright © 2011-2022 走看看