matlab 和 C 混合编程实现脉冲压缩
2016.05.19
环境:matlab2015b vs2010 cuda7.5
步骤一:创建 ComplexMul.h 文件
#include "cuComplex.h" //因为处理的数据是复数,需要添加这个头文件
#ifndef __COMPLEXMUL_H__
#define __COMPLEXMUL_H__
//声明所需要的函数。extern 表示该函数在其他文件中执行
extern void ComplexMul(cuComplex* A, cuComplex* B, cuComplex* C, int size);//实现矩阵点
乘
extern void Scale(cuComplex* Input, cuComplex* Output, int size);//实现归一化
#endif //__COMPLEXMUL_H__
步骤二:在ComplexMul.cu中实现声明的函数
#include "ComplexMul.h"
#include "mex.h"
#include "cuComplex.h"
__global__ void ComplexMulMask(cuComplex* A, cuComplex* B, cuComplex* C, int size)
{
const int numThreads = blockDim.x * gridDim.x;
const int threadID = blockIdx.x * blockDim.x + threadIdx.x;
for (int i = threadID; i < size; i += numThreads)
{
C[i].x = A[i].x * B[i].x - A[i].y * B[i].y;
C[i].y = A[i].x * B[i].y + A[i].y * B[i].x;
}
}
__global__ void ScaleMask(cuComplex* input, float scale, int size)
{
const int numThreads = blockDim.x * gridDim.x;
const int threadID = blockIdx.x * blockDim.x + threadIdx.x;
for (int i = threadID; i < size; i += numThreads)
{
input[i].x *=scale;
input[i].y *=scale;
}