Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Matlab, How to get frequency spectrum?

Status
Not open for further replies.

davyzhu

Advanced Member level 1
Advanced Member level 1
Joined
May 23, 2004
Messages
494
Helped
5
Reputation
10
Reaction score
2
Trophy points
1,298
Location
oriental
Activity points
4,436
matlab spectrum

Hi all,

I am a Matlab newbie :)
How to get frequency spectrum of a vector data? (something like [3 4 2 10 ...])

I heard FFT is the time-frequency fransform. And I tried fft() function in Matlab.
But it return a complex number. Is it stand for both frequency and phase?

Any suggestions will be appreciated!
Best regards,
Davy
 

Circuit_seller

Full Member level 5
Full Member level 5
Joined
Sep 23, 2002
Messages
300
Helped
17
Reputation
34
Reaction score
7
Trophy points
1,298
Activity points
2,350
matlab frequency spectrum

Hi

Yes, the fft results contain both amplitude and phase information.
To plot only the amplitude try abs( fft( ... ) );
Another useful MATLAB function for psd plotting is pwelch.

Regards
 

No one

Full Member level 5
Full Member level 5
Joined
May 11, 2005
Messages
287
Helped
4
Reputation
8
Reaction score
2
Trophy points
1,298
Activity points
3,425
frequency spectrum matlab

Hello Circuit_Seller;
In fft() you get fft. But if you want to plot it, you need frequency, that is you must write:
plot( f , fft )
How you can get frequency vector?
 

No one

Full Member level 5
Full Member level 5
Joined
May 11, 2005
Messages
287
Helped
4
Reputation
8
Reaction score
2
Trophy points
1,298
Activity points
3,425
matlab frequency plot

Circuit_seller wrote:

If N is the FFT length and Fs is sampling frequency then

f = 0 : Fs / N : ( Fs - 1 ) / N;
I think that your expression isn't true.

Fs / N > ( Fs - 1 ) / N

Can you explain more? How did you take this result?
 

claudiocamera

Full Member level 4
Full Member level 4
Joined
Aug 19, 2005
Messages
224
Helped
27
Reputation
54
Reaction score
6
Trophy points
1,298
Location
Salvador-BA-Brazil
Activity points
4,282
plot spectrum matlab

Lets try to help:

In order to plot a simple estimation of the spectrum using fft you must pay attention to some details.

Try to increase resolution using zero padding.
Try to avoid spectral leakage, it is easy when you know the spetrum and are just confirming it using fft.

use the command fftshift it takes the center of the signal to origin. eg Yn=abs(fftshift(fft(y,n)))/N where N is the number of points of the signal and n >N is the number of points of the DFT ( n-N is zero padding).

In order to plot the frequency you do:

Having a DFT with n points the vector of frequency is f=[-n/2: (n-1)/2]*Fs/n using this and the fftshift the values in the plot are directly given in Hertz.

I hope have helped
 
  • Like
Reactions: ddharty

    davyzhu

    Points: 2
    Helpful Answer Positive Rating

    ddharty

    Points: 2
    Helpful Answer Positive Rating

Circuit_seller

Full Member level 5
Full Member level 5
Joined
Sep 23, 2002
Messages
300
Helped
17
Reputation
34
Reaction score
7
Trophy points
1,298
Activity points
2,350
frequency plot matlab

Hi

Sorry,
f = 0 : Fs / N : Fs - 1 / N;
 

Naveed Alam

Full Member level 5
Full Member level 5
Joined
Jan 6, 2006
Messages
286
Helped
16
Reputation
34
Reaction score
3
Trophy points
1,298
Activity points
3,250
matlab plot spectrum

type in matlab command window, the following one by one
help plot
help stem
help polar

furthermore, suppose that Z=complex matrix, then
real(Z) , GIVES U ONLY REAL VALVUES,,,
complex values can nicely be plot in polar graph, by plotting:
abs(Z) against angle(Z)...
i think it will help u..
 

No one

Full Member level 5
Full Member level 5
Joined
May 11, 2005
Messages
287
Helped
4
Reputation
8
Reaction score
2
Trophy points
1,298
Activity points
3,425
plot frequency spectrum matlab

Hello;
Circuit_Seller wrote this relation:

f = 0 : Fs / N : Fs - 1 / N

Can anyone explain more about this relation? How is the relation resulted?
 

Circuit_seller

Full Member level 5
Full Member level 5
Joined
Sep 23, 2002
Messages
300
Helped
17
Reputation
34
Reaction score
7
Trophy points
1,298
Activity points
2,350
matlab fft spectrum

Hi

When you perform a FFT with length N, [0 Fs] is divided to N frequency bins.
So to produce frequency bins i wrote that expression.

Regards
 

starfish

Member level 2
Member level 2
Joined
Jul 8, 2004
Messages
53
Helped
7
Reputation
14
Reaction score
6
Trophy points
1,288
Activity points
564
fourier spectrum matlab

I am uploading 2 PDF files on Fourier Transform / Spectrum calculation and display in Matlab. I used it for the lab of DSP.

You can also use the below function for displaying the frequency spectrum in MATLAB. As "N" the number of points for fft increases the spectrum becomes more accurate to the theoratical values.

Here 'signal' is the data vector for which u want to see the frequency spectrum. 't' is the time vector for which the signal exists , 'ts' is the sampling time , 'N' is the number of fourier transform points.

function[freq,mag]=fouriertransform(signal,t,ts,N);
S=fft(signal,N);
CS=[S(N/2+1:N) S(1:N/2)];
freq=[-N/2+1:N/2]/(N*ts);
mag=abs(CS);
figure;
plot(freq,mag);
 

tronix

Advanced Member level 4
Full Member level 1
Joined
Jul 6, 2006
Messages
116
Helped
8
Reputation
16
Reaction score
1
Trophy points
1,298
Activity points
1,967
fft spectrum matlab

Hi
Well fft gives a complex function.
To plot absolute value and d phase type following

plot(abs(fft))
plot(angle(fft))

u can also refer to help files
 

mario82

Newbie level 6
Newbie level 6
Joined
Aug 18, 2005
Messages
14
Helped
6
Reputation
12
Reaction score
2
Trophy points
1,283
Activity points
1,453
frequency spectrum in matlab

Perhaps that tutorial about FFT can help you
 
  • Like
Reactions: Riheen and mpython

    V

    Points: 2
    Helpful Answer Positive Rating

    mpython

    Points: 2
    Helpful Answer Positive Rating

    Riheen

    Points: 2
    Helpful Answer Positive Rating

beargebinjie

Junior Member level 3
Junior Member level 3
Joined
May 4, 2005
Messages
27
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,521
phase spectrum matlab

This is my understanding about DFT. DFT builds the relationship between the samples of signal x(t) and the samples of its FT X(f).
time-domain sampling interval is T, the sample freq is FS=1/T. and freq domain sample interval is f0, so time domain truncation duration is 1/f0=T0, and both sampling number in the t-domain and f-domain are N=T0/T.
so the t-domain data is x(T*n) ,n=[0:N0-1]. data point in t-domain is 0:T:T*(N0-1).
and x(t)'s discrete fourier tranform is fft(T*x(T*n)). and the freq point is 0:f0:FS.

Added after 1 minutes:

This is my understanding about DFT. DFT builds the relationship between the samples of signal x(t) and the samples of its FT X(f).
time-domain sampling interval is T, the sample freq is FS=1/T. and freq domain sample interval is f0, so time domain truncation duration is 1/f0=T0, and both sampling number in the t-domain and f-domain are N=T0/T.
so the t-domain data is x(T*n) ,n=[0:N0-1]. data point in t-domain is 0:T:T*(N0-1).
and x(t)'s discrete fourier tranform is fft(T*x(T*n)). and the freq point is 0:f0:FS.
 

smith123

Member level 5
Member level 5
Joined
Apr 6, 2007
Messages
94
Helped
7
Reputation
14
Reaction score
2
Trophy points
1,288
Activity points
1,664
matlab spectrum plot

a=abs(fft

b=angle(fft)

plot(a)

plot(angle(b))
 

zhenyabb

Newbie level 2
Newbie level 2
Joined
Jun 28, 2007
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,292
matlab fourier spectrum

in MatLab help is good example for fft,

roughly output spectrum in dB is:
20log10(abs(fft(sin(2*pi*fc*tt))))

in this case the amlitude is 2 peak-to-peak that corresponds 10 dBm@50 Ohm for sine signal with amplitude 2Vp-p. MatLab shows power 0dB@fc

Can somebody say how take into account this 50 Ohm output impedance to get proper power?
 

cfreng2

Junior Member level 3
Junior Member level 3
Joined
Jul 12, 2006
Messages
31
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,288
Activity points
1,507
matlab plot frequency

if you want to plot the frequency and phase response of the vector you have, you can use the function freqz....
 

suru

Full Member level 3
Full Member level 3
Joined
Aug 31, 2007
Messages
157
Helped
4
Reputation
14
Reaction score
1
Trophy points
1,298
Activity points
1,934
spectral plot matlab

select fft box from DSp tool box.
 

ddkrishna

Member level 1
Member level 1
Joined
Aug 9, 2005
Messages
39
Helped
4
Reputation
8
Reaction score
1
Trophy points
1,288
Activity points
1,461
matlab plot frequency spectrum

let s be your signal;
N = NFFT
Fs = sampling freq

y = fft(s,N);
p = abs(y);
f=Fs/N.*(0:(N/2)-1);
plot(f,p(1:N/2));

will give you the power spectrum
 

vlsi_iitkgp

Newbie level 2
Newbie level 2
Joined
Nov 3, 2007
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,288
spectrum in matlab

davyzhu said:
Hi all,

I am a Matlab newbie :)
How to get frequency spectrum of a vector data? (something like [3 4 2 10 ...])

I heard FFT is the time-frequency fransform. And I tried fft() function in Matlab.
But it return a complex number. Is it stand for both frequency and phase?

Any suggestions will be appreciated!
Best regards,
Davy

hi,
the solution of this problem is that first find the fft then try the command freqz()
that have the arguments fft result,1,1024.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top