编写C++函数实现Matlab的fftshift功能

这篇博客介绍了如何在C++中实现Matlab的fftshift功能,包括两种方法:使用指针传递二维数组和使用引用传递二维数组。文中给出了具体的调用实例和运行结果,虽然实现较为粗糙,但能解决问题。比较两者,发现使用引用传递二维数组更直观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写的比较粗糙,但是勉强能用
适用条件:

  • 二维数组
方法一:使用指针传递二维数组
void fftShift(int *A, int *out, int M, int N)
{
    int X0, Y0;
    if (M%2 == 0)
    {
        X0 = M/2 + 1;
    }
    else
    {
        X0 = (M+1)/2;
    }
    if (N%2 == 0)
    {
        Y0 = N/2 + 1;
    }
    else
    {
        Y0 = (N+1)/2;
    }

    //M为奇数,N为奇数
    if (M%2 !=0 && N%2 !=0)
    {
        for (int i=0; i<X0; i++)
        {
            for (int j=0; j<Y0; j++)
            {
    //            out[i+X0-1][j+Y0-1] = A[i][j];
                *(out+(i+X0-1)*N+j+Y0-1) = *(A+i*N+j);
            }
        }
        for (int i=X0; i<M; i++)
        {
            for (int j=0; j<Y0; j++)
            {
    //            out[i-X0][j+Y0-1] = A[i][j];
                *(out+(i-X0)*N+j+Y0-1) = *(A+i*N+j);
            }
        }
        for (int i=0; i<X0; i++)
        {
            for (int j=Y0; j<M; j++)
            {
    //            out[i+X0-1][j-Y0] = A[i][j];
                *(out+(i+X0-1)*N+j-Y0) = *(A+i*N+j);
            }
        }
        for (int i=X0; i<M; i++)
        {
            for (int j=Y0; j<M; j++)
            {
    //            out[i-X0][j-Y0] = A[i][j];
                *(out+(i-X0)*N+j-Y0) = *(A+i*N+j);
            }
        }
    }

    //M为偶数,N为偶数
    if (M%2 == 0 && N%2 == 0)
    {
        for (int i=0; i<X0-1; i++)
        {
            for (int j=0; j<Y0-1; j++)
            {
//                out[i][j] = A[i+X0-1][j+Y0-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值