Почему, когда я заполняю нулями сигнал, fft этого оригинального сигнала и сигнал, дополненный нулями, больше не объединяются вокруг одной и той же точки? - PullRequest
2 голосов
/ 10 апреля 2019

Я думаю, что я неправильно реализую код. Я думаю, что исходный и дополненный нулями сигнал будет объединен вокруг одной и той же точки с одинаковыми пиками. Мое понимание этого неверно или проблема заключается в моем коде?

clc;clear;
N=257; %number of points in the signal
f=330.5; %frequency of signal
fs=1024; %sampling frequency 
Ts=1/fs; %sampling period
ts=0:Ts:(N-1)/fs; %duration of signal
x=sin(f*ts);%generation of sampled signal
X=fftshift(fft(x)); %shifted FFT of signal
figure(5)
stem(abs(X))
M=2048; %number of points desired in the new signal that will be zero padded
zerovec=zeros(1,(M-N)); %creating enough 0's to add to the end of the original signal to achieve the desired length
x1=[x zerovec]; %concatenating original signal and 0's to get zero padded signal 
X1=fftshift(fft(x1)); %fft of zero padded signal

figure()
stem(abs(X)) %discrete plot of original signal
hold on 
stem(abs(X1)) %discrete plot of zero padded signal 

1 Ответ

1 голос
/ 10 апреля 2019

При заполнении нуля сигнала его частотный спектр становится более плотным.В некотором смысле вы интерполируете в частотной области при заполнении нулями пространственной области.

Если вы построите два частотных спектра с правильными частотами вдоль оси x, вы увидите, что они перекрываются:

N=257;
f=330.5;
fs=1024;
Ts=1/fs;
ts=0:Ts:(N-1)/fs;
x=sin(f*ts);

X=fftshift(fft(x));
F=0:fs/N:fs-fs/N;     % <<< NEW!

M=2048;
zerovec=zeros(1,(M-N));
x1=[x zerovec];
X1=fftshift(fft(x1));
F1=0:fs/M:fs-fs/M;    % <<< NEW!

figure()
stem(F,abs(X))        % <<< NEW! using F
hold on 
stem(F1,abs(X1))      % <<< NEW! using F1

plot

...