FFT
对二维图像做快速傅里叶变换。
调用该接口计算FFT之前,必须调用HMPPS_FFTCToCInit接口初始化HmppsFFTPolicy规范结构。
- 初始化函数
HmppResult HMPPI_FFTCToCInit_32fc(int32_t powerX, int32_t powerY, int32_t direction, int32_t flag, HmppsFFTPolicy_32fc **policyX, HmppsFFTPolicy_32fc **policyY);
其中policyX,policyY需要调用HMPPS_FFTCToCInit_32fc做初始化,详情参考FFT。
- 主函数
HmppResult HMPPI_FFTCToC_32fc_C1R(Hmpp32fc *src, int srcStep, Hmpp32fc *dst, int dstStep, HmppsFFTPolicy_32fc *policyX, HmppsFFTPolicy_32fc *policyY);
- 资源释放函数
HmppResult HMPPI_FFTCToCRelease_32fc(HmppsFFTPolicy_32fc *policyX, HmppsFFTPolicy_32fc *policyY);
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
|---|---|---|---|
powerX |
图像X轴方向的信号长度, FFT序列输入信号长度为 |
[0, 27] |
输入 |
powerY |
图像Y轴方向的信号长度, FFT序列输入信号长度为 |
[0, 27] |
输入 |
direction |
direction=1表示FFT正变换。 direction=-1表示FFT逆变换。 用于CToC模式。 |
±1 |
输入 |
flag |
结果正规化模式。 |
|
输入 |
policyX(init函数中) |
双重指针,指向X轴方向的HmppsFFTPolicy结构体,结构体内包含FFT计算需要的一些信息和缓存块的首地址。 |
非空 |
输出 |
policyY(init函数中) |
双重指针,指向Y轴方向的HmppsFFTPolicy结构体,结构体内包含FFT计算需要的一些信息和缓存块的首地址。 |
非空 |
输出 |
policy(主函数和release函数) |
指针,指向HmppsFFTPolicy结构体。 |
非空 |
输入 |
src |
指向源图像感兴趣区域的指针。 |
非空 |
输入 |
dst |
指向目标图像感兴趣区域的指针。 |
非空 |
输入/输出 |
srcStep |
源图像中连续行起点之间的距离(以字节为单位)。 |
非负整数 |
输入 |
dstStep |
目标图像中连续行的起点之间的距离(以字节为单位)。 |
非负整数 |
输入 |
返回值
- 成功:返回HMPP_STS_NO_ERR。
- 失败:返回错误码。
错误码
错误码 |
描述 |
|---|---|
HMPP_STS_NULL_PTR_ERR |
指针参数为空。 |
HMPP_STS_FFT_POWER_ERR |
power小于0或大于27。 |
HMPP_STS_MALLOC_FAILED |
所需的额外内存申请失败。 |
HMPP_STS_FFT_FLAG_ERR |
flag的值不在[1,4]范围内。 |
- HmppsFFTPolicy结构体初始化需在Init函数中进行申请的,用户无法自己进行该结构体申请定义。
示例
#include <stdio.h>
#include <math.h>
#include "hmppi.h"
#include "hmpp_type.h"
#define PI 3.14159265358979323846
void FFTCToC_Example()
{
Hmpp32fc src[64], dst[64];
for (int32_t i = 0; i < 8; i++) {
for (int32_t j = 0; j < 8; j++) {
src[i * 8 + j].re = cos(2 * PI * i * 16 / 64);
src[i * 8 + j].im = 1;
}
}
HmppResult result;
HmppsFFTPolicy_32fc *policyX = NULL;
HmppsFFTPolicy_32fc *policyY = NULL;
int srcStep = 8 * sizeof(Hmpp32fc);
int dstStep = 8 * sizeof(Hmpp32fc);
result = HMPPI_FFTCToCInit_32fc(3, 3, 1, HMPP_FFT_NODIV_BY_ANY, &policyX, &policyY);// 正向FFT
if (result != HMPP_STS_NO_ERR) {
printf("Create Policy Error!\n");
return;
}
result = HMPPI_FFTCToC_32fc_C1R(src, srcStep, dst, dstStep, policyX, policyY);
if (result != HMPP_STS_NO_ERR) {
printf("FFT Error!\n");
return;
}
HMPPI_FFTCToCRelease_32fc(policyX, policyY);
printf("dstRe =");
for (int32_t i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
printf(" %e", dst[i * 8 + j].re);
}
}
printf("\ndstIm =");
for (int32_t i = 0; i < 64; i++) {
for (int j = 0; j < 8; j++) {
printf(" %e", dst[i * 8 + j].im);
}
}
printf("\n");
}
int main() {
FFTCToC_Example();
return 0;
}
运行结果:
dstRe = -1.959435e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 -2.771059e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 3.200000e+01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.771059e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.959435e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.771059e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 3.200000e+01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 -2.771059e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 dstIm = 6.400000e+01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 -7.837740e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 7.837740e-15 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 8.968310e-44 2.242078e-44 1.121039e-44 1.121039e-44 9.183409e-41 9.183409e-41 0.000000e+00 0.000000e+00 1.401298e-45 9.183409e-41 9.183409e-41 0.000000e+00 0.000000e+00 0.000000e+00 9.183409e-41 0.000000e+00 9.183409e-41 0.000000e+00 0.000000e+00 0.000000e+00 9.183409e-41 -1.973691e+26 9.183409e-41 -1.973691e+26 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.183409e-41 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 -1.456977e-27 9.183409e-41 9.183409e-41 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.183409e-41 0.000000e+00 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 9.183409e-41 0.000000e+00 0.000000e+00 9.183409e-41 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.183409e-41 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.183409e-41 0.000000e+00 0.000000e+00 0.000000e+00 9.183409e-41 0.000000e+00 9.183409e-41 0.000000e+00 0.000000e+00 -1.456977e-27 -1.979496e+26 4.794963e-39 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00

