背景
有项目算法使用matlab中circshift函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。
MATLAB中circshift简单介绍
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
>>
结果图片如下
C语言实现
代码如下所示
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;
}