[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开始。

Matlab时频图的更多相关文章

  1. Matlab 语谱图(时频图)绘制与分析

    Matlab 语谱图(时频图)绘制与分析 语谱图:先将语音信号作傅里叶变换,然后以横轴为时间,纵轴为频率,用颜色表示幅值即可绘制出语谱图.在一幅图中表示信号的频率.幅度随时间的变化,故也称" ...

  2. matlab 时频分析(短时傅里叶变换、STFT)

    短时傅里叶变换,short-time fourier transformation,有时也叫加窗傅里叶变换,时间窗口使得信号只在某一小区间内有效,这就避免了传统的傅里叶变换在时频局部表达能力上的不足, ...

  3. 时频工具箱tftb

    安装:set path 常规里更新 一.信号产生函数: amexpo1s  单边指数幅值调制信号amexpo2s  双边指数幅值调制信号amgauss  高斯幅值调制信号amrect  矩形幅值调制信 ...

  4. matlab画甘特图

    近期为发小论文一直在研究作业调度问题,好不easy把数据搞出来了,结果又被画甘特图给难住了,查了各种资料.anygantt,highchart.Jfree chart等都试了,效果都不咋好.无意中留意 ...

  5. 远程桌面下启动MATLAB时的License Manager Error -103错误

    之前使用学校提供的正版lincense,是通过MATLAB 官网注册下载的MATLAB 2017a,远程登录可用打开.后来学校停止购买了,时间紧迫,网上下载了一个standalone的lincense ...

  6. SLF4J日志系统在项目导入时频现的问题

    一.概述 近期在导入一个已有的项目时,日志系统出现了一个问题.错误信息如下: SLF4J问题 SLF4J: Failed to load class "org.slf4j.impl.Stat ...

  7. paraview显示指定时间段的时均图(两种方法)

    方法一: 首先计算以后会得到每个时刻的网格数据,如下图: 但是我们只想要比如最后2s的数据,如果直接导入,paraview会把从0s时刻的数据全部加载,做时均图的时候也就是对整个时间段做时均,不是我们 ...

  8. MATLAB之折线图、柱状图、饼图以及常用绘图技巧

    MATLAB之折线图.柱状图.饼图以及常用绘图技巧 一.折线图 参考代码: %图1:各模式直接成本预测 %table0-table1为1*9的数组,记录关键数据 table0 = data_modol ...

  9. seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化

    一.线性关系数据可视化lmplot( ) 表示对所统计的数据做散点图,并拟合一个一元线性回归关系. lmplot(x, y, data, hue=None, col=None, row=None, p ...

随机推荐

  1. LeetCode OJ--N-Queens II

    https://oj.leetcode.com/problems/n-queens-ii/ N皇后问题,计算解的个数 class Solution { public: int totalNQueens ...

  2. 【转载】Outlook2010 移动数据文件到其它地方

            您可以将数据文件移到计算机的其他文件夹中.移动文件的一个原因在于可使备份更容易并且可以让默认的outlook邮件文件不在存在C盘,导致装系统不见或者文件过大而撑死了C盘.例如,如果数据 ...

  3. 牛客网 牛客小白月赛2 B.小马过河-简单的计算几何

    B.小马过河 链接:https://www.nowcoder.com/acm/contest/86/B 这个题是一个简单的几何题???套个板子就过了,就是直线上两点确定的这条直线和直线外一点的垂足的坐 ...

  4. jcraft--SFTP demo

    import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import ...

  5. 我的CSS初始化,reset.css

    * { margin:; padding:; text-decoration: none; -webkit-overflow-scrolling: touch !important; /*iOS惯性滚 ...

  6. IOS开发~灵活使用 dismissViewControllerAnimated / dismissModalViewControllerAnimated

    当遇到: A presentViewController B ,  B presentViewController C,  C presentViewController D,问如何从D一下子回到A, ...

  7. java项目热加载工具jrebel

    flask有热加载的功能,修为代码后,自动生效. java项目也有类似的功能,不过需要使用收费的插件jrebel 提供一个免费的注册服务器:http://139.199.89.239:1008/884 ...

  8. 转: 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    from: https://github.com/RubyLouvre/agate/issues/8 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以 ...

  9. Vue 响应式属性

    本文参考自:https://www.w3cplus.com/vue/vue-reactivity-and-pitfalls.html 1.概述 当创建一个Vue实例时,每个数据属性.组件属性等都是可以 ...

  10. Git 学习之--安装配置GitHub

    楼主今天学习了一下Git的使用,而且Androdi studio 下加入了Git插件,成功提交项目到自己Github个人主页 watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...