Single sided spectrum through FFT algorithm

조회 수: 222 (최근 30일)
Aishwarya Govekar
Aishwarya Govekar 2020년 7월 18일
댓글: Aishwarya Govekar 2020년 7월 22일
I was trying to perform spectral analyis of speech signal. But can anyone please explain the meaning of those three lines which I have highlighted in Bold font? I got this code from somewhere online.
I have also attached the screenshots of the output graph and other output details ffor your reference. Kindly go through them.
Please reply asap.
Thank you.
[data,fs] = audioread('BabyElephantWalk60.wav');
l = length(data);
NFFT = 2^nextpow2(l);
f = fs/2*linspace(0,1,NFFT/2+1);
xf = abs(fft(data, NFFT));
subplot(2,1,1);
plot(data);
title('Input Speech Signal');
subplot(2,1,2);
plot(f, xf(1:NFFT/2+1));
title('Single Sided Spectrum of the Speech Signal');

채택된 답변

Devineni Aslesha
Devineni Aslesha 2020년 7월 21일
Hi Aishwarya,
Here is the explanation for the lines highlighted in bold.
1. f = fs/2*linspace(0,1,NFFT/2+1);
2. xf = abs(fft(data, NFFT)); Here, abs(fft(data, NFFT)); should be abs(fft(data, NFFT))/l; as the fft result is generally divided by the signal length in order to scale it to the same total power as the time-domain signal.
fft is a method used to transform from the time domain to the frequency domain and gives a complex result. Since, spectrun is the distribution of the amplitudes and phases of each frequency component against frequency, we are using abs function to get the amplitude of each frequency component.
3. plot(f, xf(1:NFFT/2+1)); Here, xf(1:NFFT/2+1) should be 2*xf(1:NFFT/2+1).
To compensate analytically for the notion that no negative frequencies exist, the symmetrical negative frequency components are truncated using xf(1:NFFT/2+1) and the positive frequency components are multiplied by two instead.
  댓글 수: 3
Devineni Aslesha
Devineni Aslesha 2020년 7월 22일
Hi Aishwarya,
f = fs/2*linspace(0,1,NFFT/2+1);
For the above line, the answer is Yes. If you go through the link provided in the answer, the explanation is "The positive half of the spectrum (NFFT/2 +1 gives this, including 0 and nyquist, hence the +1) is mapped onto your real frequencies from the 'normalised frequency'.
plot(f, xf(1:NFFT/2+1)); Here, xf(1:NFFT/2+1) should be 2*xf(1:NFFT/2+1).
The positive frequencies are multiplied by 2 since Matlab FFT returns double-sided, half the input energy is in each the positive and negative frequencies. Here is a similar question that might help you to understand more.
Aishwarya Govekar
Aishwarya Govekar 2020년 7월 22일
Oh okay... Thanks a lot for such a clear explaination!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

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

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by