Convert Time Domain Signal Data into Frequency Domain, How to handle the imaginary terms?
30 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Tan
le 2 Juin 2012
Réponse apportée : jagadeesh jagadeesh
le 28 Oct 2019
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 commentaire
shiva prasad kattula
le 5 Mar 2016
Modifié(e) : shiva prasad kattula
le 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.
Réponse acceptée
Wayne King
le 2 Juin 2012
You want to plot the magnitude and phase separately for the complex-valued data. Think of the polar form of a complex number. A few other things: you want to create a frequency vector to use in plotting the frequency domain data (DFT). You may or may not want to center 0 frequency in your Fourier transform, I do this below. Because the mean of your time data is so large, you are going to get a large 0 frequency magnitude in your Fourier transform.
value = [42007935 111212895 184546560 238219725 238219725 184546560 111212895 42007935];
time = 0:7;
stem(time,value,'markerfacecolor',[0 0 1])
title('Time Data'); xlabel('Time'); ylabel('Amplitude');
dftvalue = fft(value);
freq = -pi:(2*pi)/length(value):pi-(2*pi)/length(value);
figure;
stem(freq,abs(fftshift(dftvalue)),'markerfacecolor',[0 0 1])
title('Magnitude of DFT'); xlabel('Frequency'); ylabel('Magnitude');
figure;
stem(freq,angle(fftshift(dftvalue)),'markerfacecolor',[0 0 1])
title('Phase of DFT');
xlabel('Frequency'); ylabel('Magnitude');
% or stem(freq,unwrap(angle(dftvalue)),'markerfacecolor',[0 0 1])
7 commentaires
Plus de réponses (3)
Wayne King
le 2 Juin 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 commentaires
Wayne King
le 2 Juin 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
Wayne King
le 2 Juin 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 commentaires
jagadeesh jagadeesh
le 28 Oct 2019
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)|')
0 commentaires
Voir également
Catégories
En savoir plus sur Filter Analysis dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!