【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法)
【摘要】 如果一个N点序列在任一方向上移位,那么其结果都不在是位于 0 < = n <= N-1之间。因此,需要进行下面的操作:
为了形象化,可以设想将序列x(n)放在一个圆上,现在将这个圆旋转k个样本,并从 0 < = n <= N-1展开这个序列。
它的DFT给出为:
下面给出循环移位的函数:
function y = cirshf...
如果一个N点序列在任一方向上移位,那么其结果都不在是位于 0 < = n <= N-1之间。因此,需要进行下面的操作:
为了形象化,可以设想将序列x(n)放在一个圆上,现在将这个圆旋转k个样本,并从 0 < = n <= N-1展开这个序列。
它的DFT给出为:
下面给出循环移位的函数:
-
function y = cirshftt(x,m,N)
-
% Circular shift of m samples in sequence x over 0:N-1(time domain)
-
% _________________________________________________________________
-
% y = cirshftt(x,m,N)
-
% y = output sequence containing the circular shift
-
% x = input sequence of length <= N
-
% N = size of circular buffer
-
% Method: y(n) = x( (n-m) mod N )
-
% Check for length of x
-
if length(x) > N
-
error('N must be >= the length of x');
-
end
-
x = [x,zeros(1,N-length(x))];
-
n = [0:1:N-1];
-
n = mod(n-m,N);
-
y = x(n+1);
下面给出一个案例,实现循环移位:
已知一个11点的序列,
a.求出并画出循环左移4个样本后的序列;
b.假设x(n)是一个15点序列(补零),求出循环右移3个样本后的序列。
-
clc
-
clear
-
close all
-
-
-
n = 0:1:10;
-
x = 10 * (0.8).^n;
-
N = 11;
-
m = -4;
-
y1 = cirshftt(x,m,N);
-
-
subplot(2,2,1);
-
stem(n,x);
-
title('x(n) with n over [0,10]');
-
xlabel('n');
-
-
subplot(2,2,2);
-
stem(n,y1);
-
title('circularly left shift for 4');
-
xlabel('n');
-
-
-
-
-
x = [x,zeros(1,4)];
-
n = 0:1:14;
-
N = 15;
-
m = 3;
-
y2 = cirshftt(x,m,N);
-
-
subplot(2,2,3);
-
stem(n,x);
-
title('x(n) with n over [0,15] by padding 0');
-
xlabel('n');
-
-
subplot(2,2,4);
-
stem(n,y2);
-
title('circularly right shift for 3');
-
xlabel('n');
-
-
-
-
-
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83511675
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)