Plotting FFT Spectrum using Square Wave
조회 수: 14 (최근 30일)
이전 댓글 표시
I am trying to plot an FFT spectrum but the graph stops at half of the window I'm looking to acquire.

This is the code that I have used:
% clc;
% clear all;
t = 0:(1/1e6):(10/1e5);
x = 2.5*square(t*2*pi*1e5,50);
N = length(x);
fs = 10e5;
figure(1)
plot(t,x)
X = abs(fft(x));
bins = (0:(N-1));
f = (bins*fs)/N;
intN = ceil(N/2);
figure(2)
plot(f(1:intN),X(1:intN))
xlabel('Frequency (Hz)')
ylabel('Amplitude');
title('FFT Spectrum of Square Wave with 100kHz Frequency and 50% Duty Cycle');
xlim([0 1e6])
set(gca,'YTickLabel',[]);
댓글 수: 0
채택된 답변
Star Strider
2019년 7월 7일
Two problems:
First: ‘fs’ is the inverse of the sampling interval, or 1E+6.
Second, your code is correct although your plot is not. You can only plot to the Nyquist frequency (½ the sampling frequency), so your xlim call should be:
xlim([0 1e6/2])
Also, you need to normalise the fft result by dividing it by the length of your data vector:
X = abs(fft(x))/N;
and then multiply it by 2 to get the approximately correct amplitude in the plot.
Those changes result in a correct fft plot.
댓글 수: 2
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Fourier Analysis and Filtering에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!