What Is Wrong With My Code? (Downsampling Of A Sinc Signal)

조회 수: 6 (최근 30일)
cikalekli
cikalekli 2022년 3월 22일
편집: Paul 2022년 3월 23일
Hi, I'm studying on my own about downsampling the signals on matlab.
Before exhibit my code which I wrote, I've curiosity questions below about my code.
I'm a self learner, so if anyone else could help me to understand. That would be glamorous.
1) How can I find the downsampling of my code?
2) How can I create a discrete time sinusoidal signal of a preferred frequency and decimate it?
Here is my code mentioned before which I wrote it:
N = 30;
n= 0:N;
x1 = sinc(n/6);
subplot(221);
stem(n,x1);
grid;
title('original signal');
xlabel('sample');
m = 2;
x2 = x1(1:m:length(x1));
m = 0:m:N;
subplot(222);
stem(m,x2);
grid;
title('decimated signal');
xlabel('sample');
f1=0:0.1:3; %frequency values
f2=0:0.4:6; %new frequency values
X1 = abs(fft(x1));
subplot(223);
stem(f1,X1);
title('input spectrum');
xlabel('frequency(Hz)');
X2 = abs(fft(x2));
subplot(224);
stem(f2,X2);
title('output spectrum');
xlabel('frequency(Hz)');
Here is my output:

채택된 답변

Paul
Paul 2022년 3월 22일
편집: Paul 2022년 3월 23일
I'm not sure what you're trying to show, but I can see at least one issue in the code that needs to be considered. Maybe looking for something like this:
N = 30; % Length of the original sequence
n = 0:N-1; % note the N-1 so that n has 30 samples
x1 = sinc(n/6); % define the original sequence
Fs = 3; % it looks like this should be the sampling frequency
subplot(231);
stem(n,x1);
grid;
title('original signal');
xlabel('sample');
M = 2; % downsampling factor
x2 = x1(1:M:length(x1)); % the downsampled signal. Could also use x2 = downsample(x1,M)
Up to this point, there are no problems. However, the next line is problematic. In discrete time the independent variable has to cover all integers, but this definition of the values of m that correspond to the values of x2 are only even values of the independent variable, which is against the rules so to speak
m = 0:M:N;
After downsampling, the indices the correspond to x2 are really
m = 0:(numel(x2)-1);
and it is the indices of m as defned here that will be used in the DFT computation in fft(x2).
subplot(232);
stem(m,x2);
grid;
title('decimated signal');
xlabel('sample');
Now we can go to the frequency domain
X1 = abs(fft(x1));
f1 = (0:numel(X1)-1)/numel(X1)*Fs;
subplot(234);
stem(f1,X1);
title('input spectrum');
xlabel('frequency(Hz)');
X2 = abs(fft(x2));
f2 = (0:numel(X2)-1)/numel(X2)*Fs/M; % by downsampling, we increased the sampling period, which decreases the sampling frequency
subplot(235);
stem(f2,X2);
title('output spectrum');
xlabel('frequency(Hz)');
Now, we can upsample the down-sampled signal
x3 = upsample(x2,M);
subplot(233)
stem(n,x3);
grid
xlabel('sample')
title('upsampled output')
And its DFT
X3 = abs(fft(x3));
f3 = f1;
subplot(236)
stem(f3,X3);
xlabel('frequency(Hz)')
title('upsampled spectrum')

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Spectral Measurements에 대해 자세히 알아보기

태그

제품


릴리스

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by