Why do upsample and downsample commands give wrong results in start of sequence?

조회 수: 9 (최근 30일)
I have a code for upsampling an input sequnce x and then downsampling it back to original by a factor 3. When I look at the plot of input sequence x, it starts at 1 though in DSP it must start at n=0. Likewise when I look at the plot of upsampled sequence y, it must also start at n=0 and then insert two zeros in between every two samples of x. But its not so here in the plots. Why it is so?
% Up/Down Sampler
clear all
close all
clc
x=[1 2 3 4]; % Input Sequence
y=upsample(x,3); % Upsampled sequence y by a factor of 3
subplot(4,1,1)
stem(x)
title('Input Sequence')
subplot(4,1,2)
stem(y)
title('Up sampled sequence')
c=downsample(y,3); % downsampled sequence y again by the same factor 3
subplot(4,1,3)
stem(c)
title('Down sampled sequence')

채택된 답변

Chunru
Chunru 2021년 11월 9일
All time axes start from 0.
% Up/Down Sampler
clear all
close all
clc
x=[1 2 3 4]; % Input Sequence
y=upsample(x,3); % Upsampled sequence y by a factor of 3
subplot(4,1,1)
stem(0:numel(x)-1, x)
title('Input Sequence')
subplot(4,1,2)
stem(0:numel(y)-1, y)
title('Up sampled sequence')
c=downsample(y,3); % downsampled sequence y again by the same factor 3
subplot(4,1,3)
stem(0:numel(c)-1, c)
title('Down sampled sequence')

추가 답변 (2개)

dpb
dpb 2021년 11월 9일
Don't know what the complaint is, precisely?
upsample and downsample are working as documented --
>> upsample(1:4,3)
ans =
1 0 0 2 0 0 3 0 0 4 0 0
>> downsample(ans,3)
ans =
1 2 3 4
>>
"y = upsample(x,n) increases the sample rate of x by inserting n – 1 zeros between samples." from the documentation for upsample which is precisely what you see above -- and downsample recreates the original input series.
What's to complain about?
If the "issue" is that the plots are shown on the x axis as from 1:N instead of 0:N-1, that's because you plotted them without providing an abscissa vector in which case (also as documented) stem and all the other MATLAB plotting functions plot the provided y values against the ordinal position in the array.
Also as documented, MATLAB array indexing is one-based, NOT zero-based and is immutable/unchangeable by the user. If you want to plot versus some other x, then you must provide that
N=numel(y)-1;
stem(0:N,y)
xlim([0 N])
xticks([0:11])
may be more what you want.

Mathieu NOE
Mathieu NOE 2021년 11월 9일
hello
Iprefered somehow to create an explicit x axis for each data
now I think the plot is better because evrything is aligned as expected
% Up/Down Sampler
clear all
close all
clc
y = [1 2 3 4]; % Input Sequence
x = (0:length(y)-1);
yu=upsample(y,3); % Upsampled sequence y by a factor of 3
xu = (0:length(yu)-1);
yc=downsample(yu,3); % downsampled sequence y again by the same factor 3
xc = (0:length(yc)-1);
subplot(3,1,1)
stem(x,y)
title('Input Sequence')
subplot(3,1,2)
stem(xu,yu)
title('Up sampled sequence')
c=downsample(y,3); % downsampled sequence y again by the same factor 3
subplot(3,1,3)
stem(xc,yc)
title('Down sampled sequence')
  댓글 수: 2
Sadiq Akbar
Sadiq Akbar 2021년 11월 9일
Thanks to all of you. But I have to accept one answer. As the chunru has responded 1st, and that works too, so I am going to accept his answer. Thanks once again to all of you.
Mathieu NOE
Mathieu NOE 2021년 11월 9일
ok
I will survive even though on my screen it appears that I answered 1 hour before Chunru
argh!!!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Multirate Signal Processing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by