@Cufft的实例:SimpleCufftTOC

Cufft Samples中的SimpleCufft的一些小问题

通信专业,c++和cuda小白,学习ing

1.动态数组在vs调试器里无法完全显示所有元素的问题

比如这条语句

 Complex *h_signal = (Complex *)malloc(sizeof(Complex) * SIGNAL_SIZE);

创建出来的指针数组h_signal,在调试过程中的变量窗口里,是只会显示首个元素的。找了下解决办法,一个比较简单的就是添加快速监视(启动调试之后),可见VS调试时查看动态数组的全部元素

C++学习笔记2.26
C++学习笔记2.26

上述问题出现的本质原因,就是该语句只是告诉你分配了sizeof(Complex) * SIGNAL_SIZE的空间,并返回了指向了这块内存的地址的指针。

2.rand()的伪随机

 for (unsigned int i = 0; i < SIGNAL_SIZE; ++i)
    {
        h_signal[i].x = rand() / (float)RAND_MAX;
        h_signal[i].y = 0;
    }

几次测试下来,因为比较注意前几个数,发现在每次生成的随机数是一样的。这些问题容易查到。实际上,通过计算机产生一个完全随机的序列是一个比较复杂的问题,有些算法声称可以完全随机,有待进一步了解(比如量子计算)。

要计算机产生一个随机数不像扔色子一样,计算机的每一步操作,就是执行一堆代码,这些代码是事先安排好的,所以计算机的产生行为是不具有随机性和预测性的(当然这里说的是现阶段的计算机体系,到未来的计算机的体系,未知),所以计算机产生的随机数都不是真正意义上的随机数,只是伪随机数,他以一个真值(也称为种子)作为初始条件,然后用一定的算法不停迭代产生随机数。

详细可见有关rand(),srand()产生随机数学习总结 - guihailiuli

3.PadData

int PadData(const Complex *signal, Complex **padded_signal, int signal_size,
            const Complex *filter_kernel, Complex **padded_filter_kernel, int filter_kernel_size)
{
    int minRadius = filter_kernel_size / 2;
    int maxRadius = filter_kernel_size - minRadius;
    int new_size = signal_size + maxRadius;

    // Pad signal
    Complex *new_data = (Complex *)malloc(sizeof(Complex) * new_size);
    memcpy(new_data +           0, signal,              signal_size * sizeof(Complex));
    memset(new_data + signal_size,      0, (new_size - signal_size) * sizeof(Complex));
    *padded_signal = new_data;

    // Pad filter
    new_data = (Complex *)malloc(sizeof(Complex) * new_size);
    memcpy(new_data +                    0, filter_kernel + minRadius,                       maxRadius * sizeof(Complex));
    memset(new_data +            maxRadius,                         0, (new_size - filter_kernel_size) * sizeof(Complex));
    memcpy(new_data + new_size - minRadius,             filter_kernel,                       minRadius * sizeof(Complex));
    *padded_filter_kernel = new_data;

    return new_size;
}

圆周卷积的方式,先MARK一下。

相关文章:

  • 2021-12-03
  • 2021-11-01
  • 2021-04-03
  • 2021-06-02
猜你喜欢
  • 2021-07-02
  • 2021-04-05
  • 2021-08-30
  • 2021-09-30
  • 2022-12-23
  • 2021-11-17
  • 2021-06-19
相关资源
相似解决方案