Convert Time Domain Signal Data into Frequency Domain, How to handle the imaginary terms?
Show older comments
Hi Everyone,
I'm a beginner of MATLAB. I'm having some problems of converting time domain signal into frequency domain.
In time domain, is this the way to plot the graph?
value = [42007935 111212895 184546560 238219725 238219725 184546560 111212895 42007935]; time = [0, 1, 2, 3, 4, 5, 6, 7, 8 ]; plot (time, value);
Then, when i want to plot it in frequency domain, i use the following codes:
fft_Conv = fft (value); plot (time, fft_Conv);
I get a warning: Warning: Imaginary parts of complex X and/or Y arguments ignored.
Could anyone guide me how to plot signal in time domain and frequency domain?
Regards, HJ.C
1 Comment
shiva prasad kattula
on 5 Mar 2016
Edited: shiva prasad kattula
on 5 Mar 2016
The frequency-domain representation of a signal carries information about the signal's magnitude and phase at each frequency. This is why the output of the FFT computation is complex. A complex number, x, has a real, x_r, and an imaginary part, x_i, such that x = x_r + ix_i. The magnitude of is computed as sqrt{(x_r^2+x_i^2)}, and the phase of x is computed as arctan{(x_i/x_r)}. You can use MATLAB functions abs and angle to respectively get the magnitude and phase of any complex number.
Accepted Answer
More Answers (4)
Wayne King
on 2 Jun 2012
Then you want to use freqz()
b = [3.91719822748777E-02,
0.103629842929331,
0.171922134825388,
0.221881476438683,
0.221881476438683,
0.171922134825388,
0.103629842929331,
3.91719822748777E-02];
[H,W] = freqz(b,1);
plot(W,20*log10(abs(H)))
4 Comments
Tan
on 2 Jun 2012
Tan
on 2 Jun 2012
Wayne King
on 2 Jun 2012
If you feed it the impulse AND the system is LTI, then yes, the Fourier transform of the impulse response is the frequency response. Just keep in mind that by giving me that b vector above you are asserting that is the impulse response and that system has a finite impulse response
Tan
on 2 Jun 2012
Wayne King
on 2 Jun 2012
Then you are telling me that
b = [42007935 111212895 184546560 238219725 238219725 184546560 111212895 42007935];
% so
[h,f] = freqz(b,1);
plot(f,20*log10(abs(h)));
Of course if you know the sampling frequency, then you can use that in freqz() to get the response in Hz.
9 Comments
Tan
on 2 Jun 2012
Tan
on 2 Jun 2012
Ryan
on 2 Jun 2012
Wayne King's responses have been very helpful in furthering my understanding of handling the FFT and mag/phase of the response and how to handle them in MATLAB. Good work.
Tan
on 9 Jun 2012
Ryan
on 9 Jun 2012
plot(x,y,'b',x2,y2,'r') % x,y are blue, x2,y2 are red
Tan
on 10 Jun 2012
Tan
on 10 Jun 2012
Tan
on 10 Jun 2012
Tan
on 11 Jun 2012
jagadeesh jagadeesh
on 28 Oct 2019
0 votes
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);
y = x + 2*randn(size(t)); % Sinusoids plus noise
figure(1)
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)'
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
figure(2)
plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
Mondestin
on 7 Feb 2025
0 votes
Hi,
See attached!
Categories
Find more on Get Started with Signal Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!