我正在尝试从第一原理开始进行快速傅立叶变换。这样做的第一步是将输入数据重新排序为特定序列,从中可以应用基2蝶形算法。通过对数组位置进行位反转可以实现此特定序列,如下所示:
我想到的方法是,给定一个实际采样数据数组,以创建一个指针,该指针引用该数组的第一个位置。然后使用该指针将数据数组第一个位置的内存地址转换为二进制数,对其执行位反转,转换回十六进制,并将新数组的第一个位置设置为等于该数组的解引用值“位反转”的内存地址。循环执行此操作,每次都可以增加原始指针,计算出“反向”地址,并以正确的顺序用值填充新数组。
我有两个问题:
这是一种很好的编程习惯吗?我知道设置指向特定地址的指针是令人讨厌的,但我认为启动时会在内存中分配数组,因此应该可以。
如何使用C语言将指针值转换为二进制值?我想到了这样的东西:
int sampledData [8]; int *指针=样本; int hex_address =(int)pointer;
答案 0 :(得分:0)
对于FFT,您不想对地址指针进行位反转(它可能未与FFT长度对齐到合适的边界),而是希望对基于零的数组索引进行位反转(有时已实现)在C中作为访问数组的指针偏移量)。
通常,置换是“就地”完成的,其中使用原始索引和位崇敬的索引交换(使用临时变量)数组的元素,而不是将其复制到新数组,这需要更多操作内存(更大的数据缓存占用空间等)。