Shifting a signal to the right or left

374 ビュー (過去 30 日間)
SSG_newbiecoder
SSG_newbiecoder 2018 年 2 月 1 日
コメント済み: Shukumar Pattnaik 2021 年 2 月 10 日
How can I shift a signal to the left or right? Is there any inbuilt command for it?
  6 件のコメント
mathematics
mathematics 2019 年 9 月 15 日
Could you please explain how to use this code?
Thank you
Sk Group
Sk Group 2021 年 1 月 24 日
https://www.swebllc.com/signal-shift-function-in-matlab/

サインインしてコメントする。

回答 (6 件)

Jos (10584)
Jos (10584) 2019 年 9 月 20 日
x = 1:5
shift = 3
x = circshift(x,shift)
N = numel(x)
ix = (1:N) - shift
tf = ix < 1 | ix > N
x(tf) = 0

SSG_newbiecoder
SSG_newbiecoder 2019 年 9 月 20 日
I'll try to explain with an example.
Let X={1 2 3 4 5} be our sequence. s = zeros(size(X))
s={0 0 0 0 0}
Right shift
If we want to shift this function to the right by three points,
shift=3 i.e, shift>0
s(shift+1:end) = x(1:end-shift)
ie, s(4,5)=X(1,2)
so shifted output will be s={0 0 0 1 2}
Left shift
If we want to shift this function to the left by three points,
shift=-3 i.e, shift<0
s(1:end+shift) = x(-shift+1:end)
ie, s(1,2)=X(4,5)
so shifted output will be s={4 5 0 0 0}
Hope this makes sense. Please note that this is not the circular shift and we have inbuilt code for circular shift.

Jos (10584)
Jos (10584) 2018 年 2 月 1 日
x = 1:10
k = 3
xs = circshift(x,k)

Manoj Kumar Koduru
Manoj Kumar Koduru 2020 年 11 月 23 日
clc;
close all;
L=input ('Enter the no.: ');
n=-L:L;
y=[zeros(1,L),1,zeros(1,L)];
if n >0
y(L+1:end) = n(1:end-L);
elseif n <0
y(1:end+L) = n(-L+1:end);
end
y
plot(n,y);
  1 件のコメント
Shukumar Pattnaik
Shukumar Pattnaik 2021 年 2 月 10 日
sir what is the use of line 5 ??

サインインしてコメントする。


Sk Group
Sk Group 2021 年 2 月 8 日
MATLAB CODE:
function [n1,x1] = sigshift(x,n,k)
n = 1:10;
k = 2;
x = exp(n);
if k>0
disp(‘Positive’);
n1 = n(1):n(end)+k;
x1 = [zeros(1,k) x];
else
disp(‘Negative’);
n1 = n(1)+k:n(end);
x1 = [x zeros(1,abs(k))]; % abs is for absolute value of (k) because quantity can never be (-ve) negative %
end

Sk Group
Sk Group 2021 年 2 月 8 日
MATLAB CODE:
function [n1,x1] = sigshift(x,n,k)
n = 1:10;
k = 2;
x = exp(n);
if k>0
disp(‘Positive’);
n1 = n(1):n(end)+k;
x1 = [zeros(1,k) x];
else
disp(‘Negative’);
n1 = n(1)+k:n(end);
x1 = [x zeros(1,abs(k))]; % abs is for absolute value of (k) because quantity can never be (-ve) negative %
end
MATLAB CODE:
function [y n1] = sigfold(x,n)
n1 = -fliplr(n)
y = fliplr(x)
end

カテゴリ

Help Center および File ExchangeMultirate Signal Processing についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by