有项目算法使用matlab中circshift函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。
circshift是循环移位函数。可以使用于数组和矩阵元素的循环移位。
当A是数组
B=circshift(A,p);如果p是正数则实现A从左到右的循环移位。如果p是负数则实现A从右到左的循环移位。
当A是矩阵
B=circshift(A,[p,0]);如果p是正数则实现A以行为单位,从上到下的循环移位。如果p是负数则实现从下到上的循环移位。
B=circshift(A,[0,p]);如果p是正数则实现A以列为单位,从左到右的循环移位。如果p是负数则实现从右到左的循环移位。
实际maltab中使用如下代码所示,其中z为96000x1列向量
x4 = circshift(z,[1,0]);
测试MATLAB代码如下
- Z = [1 2 3 4 5 6]
- Z = Z'
- X = circshift(Z,[1,0])
运行结果如下图所示
- >> clear
- >> Z = [1 2 3 4 5 6]
-
- Z =
-
- 1 2 3 4 5 6
-
- >> Z = Z'
-
- Z =
-
- 1
- 2
- 3
- 4
- 5
- 6
-
- >> X = circshift(Z,[1,0])
-
- X =
-
- 6
- 1
- 2
- 3
- 4
- 5
-
- >>
结果图片如下

代码如下所示
-
-
-
- int circshift_1_0(unsigned char *psrc, unsigned char *pdst, unsigned int len) {
- // unsigned char* ptr_tmp = (unsigned char*)malloc(sizeof(unsigned char) * len);
- // if(ptr_tmp == NULL)
- // {
- // perror("fun_name");
- // return -1;
- // }
- pdst[0] = psrc[len - 1];
- for(int i = 1; i < len; i++){
- pdst[i] = psrc[i - 1];
- }
-
- // free(ptr_tmp);
- // ptr_tmp = NULL;
-
-
- return 0;
- }