上篇博文:【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法)
提到了对序列x(n)做循环移位后的DFT形式为:
上篇博文已经讨论过了第一种实现循环移位的方法,通过在时域中对序列移位,之后取模运算,得到循环移位。并给出了精辟地验证。可以很放心的使用。
这篇博文呢?我们就通过序列循环移位后的DFT形式来反推序列的循环移位,并独立给出函数。
这个函数的功能可就强大了。
假设移位量为m:
如果m 是一个标量,那么序列移位后就得到一个移位后的序列,这个序列是一个向量。
如果m是一个向量,向量的每一个元素都是移位量,那么得到的移位后的序列是一个矩阵。
这个矩阵的每一行都是对输入序列的循环移位,而移位值就是m中的相应元素,例如m的第一个元素为4,那么得到的y的第一行就是x循环右移4位得到的序列。
趁热打铁,我编写了一个相关的函数,并给出了验证,几经修改,结果正确,自己都把自己感动哭了。成就感就如当年考研最后一门专业课考完后把自己感动哭了的感觉一样。
知识是用来分享的,我也附出所有代码以及测试:
function y = cirshftf(x,m,N)
% Circular shift