精品学习网
所在位置:主页 > 物联网 > 如何在DSP编程中定义一个较大的数组

如何在DSP编程中定义一个较大的数组

发布时间:2022-10-04 12:00来源:www.51edu.com作者:畅畅

这个问题 我可以非常明确地告诉你,C#无法直接调用这种参数的函数,C#中你描述的那种二维数组,本质上跟一维数组一致。倒是single[][]跟float**是类似的,但是也不能直接传递。

然后具体说说
float* arr arr为指向float型的指针
single[] arr arr为single型数组的引用,当传递给API时,会自动传递内部指针,这个指针才真真的指向single型的指针

float** arr arr为一个指向float型指针的指针,即arr[]应该是一个float型指针
single[][] arr arr为一个single型数组引用的数组引用,这意味着arr的内部指针指向的是single[]型引用的指针,跟指向single型指针完全是两码事

综上所述,C#不能直接调用Test(float** arr,int rows,int cols),你必须使用非安全代码构造一个single*[],然后将这个数组传递过去。下面是一个例子

[DllImport(test.dll)]
static extern unsafe bool Test(float*[] arr, int row, int col);//这里arr要声明为float*[],使用起来比较方便

bool CallTest(float[,] arr)
{
int row = arr.GetUpperBound(0) + 1;
int col = arr.GetUpperBound(1) + 1;

unsafe
{
fixed(float* fp=arr)
{
float*[] farr=new float*[row];
for (int i = 0; i {
farr[i] = fp + i * col;
}
return Test(farr, row, col);
//如果Test(float** arr, int row, int col)这样声明,就要用下面的方法调用
//fixed(float** fpp=farr)
//{
// return Test(fpp, row, col);
//}
}
}
}

目前dsp技术采用什么方法来解决这一问题

一、什么是DSP技术
数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛DSP技术图解的应用。数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
二、实现方法
DSP的实现方法一般有以下几种:
(1) 在通用的计算机(如PC机)上用软件(如Fortran、C语言)实现;
(2) 在通用计算机系统中加上专用的加速处理机实现;
(3) 用通用的单片机(如MCS-51、96系列等)实现,这种方法可用于一些不太复杂的数字信号处理,如数字控制等;
(4) 用通用的可编程DSP实现。与单片机相比,DSP芯片具有更加适合于数字信号处理的软件和硬件资源,可用于 复杂的数字信号处理算法;
(5) 用专用的DSP芯片实现。在一些特殊的场合,要求的信号处理速度极高,用通用DSP芯片很难实现,例如专用于FFT、数字滤波、卷积、相关等算法的DSP芯片,这种芯片将相应的信号处理算法在芯片内部用硬件实现,无需进行编程。
在上述几种方法中,第1种方法的缺点是速度较慢,一般可用于DSP算法的模拟;第2种和第5种方法专用性强,应用受到很大的限制,第2种方法也不便于系统的独立运行;第3种方法只适用于实现简单的DSP算法;只有第4种方法才使数字信号处理的应用打开了新的局面。

上一篇:怎样才能学好DSP芯片?

下一篇:dsp 编程

  • 热门资讯
  • 最新资讯
  • 手游排行榜
  • 手游新品榜