Em dùng hàm fft của MATLAB để phân tích phổ tín hiệu, nhưng kết quả lại thấy kỳ kỳ. Mong các bác giúp giùm em tìm lỗi sai.
Kết quả ra thế này:
Nhìn hình, ta thấy tín hiệu y gồm 2 thành phần: thành phần 750Hz biên độ 750, và thành phần 1000Hz biên độ 2.3
--> chính xác với hàm y(t) thành lập ở hàng 4! Nhưng...
Theo lý thuyết, khi chọn số điểm tính = 2^m (m nguyên) thì FFT sẽ chạy nhanh hơn. Em chọn N = 2^12 = 4096, không hiểu sao kết quả lại như thế này.
Không biết em sai hay... fft của MATLAB sai ? Mong các bác chỉ giùm chỗ sai.
N = 4000; % number of points
fs = 10000; % sample rate
t = (0 : N-1)/fs;
y = 1.5*cos(2*pi*750*t) + 2.3*cos(2*pi*1000*t);
h = fft(y);
freq = fs/N*(0:N/2);
plot(freq, 2/N * abs(h(1:N/2+1)));
xlabel('Hz');
xlim([0 2000]);
fs = 10000; % sample rate
t = (0 : N-1)/fs;
y = 1.5*cos(2*pi*750*t) + 2.3*cos(2*pi*1000*t);
h = fft(y);
freq = fs/N*(0:N/2);
plot(freq, 2/N * abs(h(1:N/2+1)));
xlabel('Hz');
xlim([0 2000]);
Kết quả ra thế này:
Nhìn hình, ta thấy tín hiệu y gồm 2 thành phần: thành phần 750Hz biên độ 750, và thành phần 1000Hz biên độ 2.3
--> chính xác với hàm y(t) thành lập ở hàng 4! Nhưng...
Theo lý thuyết, khi chọn số điểm tính = 2^m (m nguyên) thì FFT sẽ chạy nhanh hơn. Em chọn N = 2^12 = 4096, không hiểu sao kết quả lại như thế này.
Không biết em sai hay... fft của MATLAB sai ? Mong các bác chỉ giùm chỗ sai.