Shifting a signal to the right or left

307 ビュー (過去 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 ExchangeWhos についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by