Em đang là sinh viên, muốn hỏi các anh chị về Fast fourier transform.
Trong help của Matllab, em gõ fft thì thấy họ giải thích, em làm ví dụ theo file đó. Nhưng khi em thay đổi số L thì biên độ ra khác nhau. Em muốn hỏi các anh chị là:
1. Giá trị của L - length of signal có nhất thiết phải là 2^n ko? và nếu L thay đổi làm cho giá trị của biên độ FFT thay đổi thì làm sao biết được giá trị nào của L sẽ cho biên độ chính xác?
2. Giá trị của cái số NFFT có nhất thiết phải là 2^n không?
Nếu em thay cái số NFFT đó bằng đúng giá trị của L thì biên độ FFT vẽ ra rất chuẩn, dù có thay đổi L đến bao nhiêu đi nữa thì biên độ cũng ko đổi. Vậy em có thể chọn NFFT = L ko?
Em cảm ơn các anh chị.
Đoạn code trong file help của Matlab đây ạ, dưới đây em đã loại bỏ nhiễu, chỉ để hàm chính thôi.
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
X = fft(x,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(X(1:NFFT/2+1)))
Trong help của Matllab, em gõ fft thì thấy họ giải thích, em làm ví dụ theo file đó. Nhưng khi em thay đổi số L thì biên độ ra khác nhau. Em muốn hỏi các anh chị là:
1. Giá trị của L - length of signal có nhất thiết phải là 2^n ko? và nếu L thay đổi làm cho giá trị của biên độ FFT thay đổi thì làm sao biết được giá trị nào của L sẽ cho biên độ chính xác?
2. Giá trị của cái số NFFT có nhất thiết phải là 2^n không?
Nếu em thay cái số NFFT đó bằng đúng giá trị của L thì biên độ FFT vẽ ra rất chuẩn, dù có thay đổi L đến bao nhiêu đi nữa thì biên độ cũng ko đổi. Vậy em có thể chọn NFFT = L ko?
Em cảm ơn các anh chị.
Đoạn code trong file help của Matlab đây ạ, dưới đây em đã loại bỏ nhiễu, chỉ để hàm chính thôi.
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
X = fft(x,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(X(1:NFFT/2+1)))