Why the fourier transform of a signal does not produce any graphing?

5 次查看(过去 30 天)
Hi, I have written a MATLAB code to convert the signal equations from time domain into frequency domain. However, when plotting the graph in frequency domain, there is no output as shown in the screenshot attached. Since my a(t) is a cosine, I believe there should be containing only the real part in frequency domain according to the Fourier Transform Table. Thank you.
%create symbolic functions x, a, b, c, d, e, f_c with independent variable t
syms x a h b c d e f_c f_c1 f_c2 t tau
%create symbolic functions A, B, C, D, and E with independent variable w
syms A B C D E w
x(t) = cos(100*pi*t);
a(t) = x(0.4*t);
h(t) = dirac(t-0.02);
b(t) = int(a(tau)*h(t-tau), 'tau', -inf, inf);
f_c(t) = 10*cos(2500*pi*t);
f_c1(t) = f_c(t);
f_c2(t) = f_c(t);
c(t) = b(t)*f_c1(t);
d(t) = c(t)*f_c2(t);
figure
A(w) = fourier(a(t));
subplot(2,2,1), fplot((A(w)))
xlim([-50 50]), ylim([-10 10])
title('Real part of A(\omega)')
xlabel('Frequency, \omega')
ylabel('Real A(\omega)')
grid on
B(w) = fourier(b(t));
subplot(2,2,2), fplot((B(w)))
xlim([-50 50]), ylim([-10 10])
title('Real part of B(\omega)')
xlabel('Frequency, \omega')
ylabel('Real B(\omega)')
grid on
C(w) = fourier(c(t));
subplot(2,2,3), fplot((C(w)))
xlim([-50 50]), ylim([-10 10])
title('Real part of C(\omega)')
xlabel('Frequency, \omega')
ylabel('Real C(\omega)')
grid on
D(w) = fourier(d(t));
subplot(2,2,4), fplot((D(w)))
xlim([-50 50]), ylim([-10 10])
title('Real part of D(\omega)')
xlabel('Frequency, \omega')
ylabel('Real D(\omega)')
grid on

采纳的回答

Santosh Fatale
Santosh Fatale 2022-12-23
Hi Teoh,
The function "dirac" represents the Dirac delta function and not the Kronecker delta function. Thus, it achieves an infinity value at . The function "fplot" does not plot the infinity for the Dirac delta function, and you need to take care of that using the following workaround.
syms t
dirac_t = dirac(t);
t = -5:0.1:5;
dirac_t = dirac(t);
idx = dirac_t == Inf;
dirac_t(idx) = 1; % Assign suitable value instead of Inf.
stem(t, dirac_t); % You can even use plot function.
The modified code to plot real part of variable A is as follows:
%create symbolic functions x, a, b, c, d, e, f_c with independent variable t
syms x(t) a(t) h(t) b(t) c(t) d(t) e f_c(t) f_c1(t) f_c2(t) t tau
%create symbolic functions A, B, C, D, and E with independent variable w
syms A(w) B(w) C(w) D(w) E w
x(t) = cos(100*pi*t)
a(t) = x(0.4*t)
h(t) = dirac(t-0.02)
b(t) = int(a(tau)*h(t-tau), 'tau', -inf, inf)
f_c(t) = 10*cos(2500*pi*t);
f_c1(t) = f_c(t);
f_c2(t) = f_c(t);
c(t) = b(t)*f_c1(t);
d(t) = c(t)*f_c2(t);
figure
A(w) = fourier(a(t), w);
w = -45*pi:0.1*pi:45*pi;
subsA = A(w);
% Replace Inf value with suitable value
idx = subsA == Inf;
subsA(idx) = pi; % choose suitable value from the expression of fourier transform.
plot(w,real(subsA));
ylabel("\Re(A(\omega))");
xlabel("\omega");
xticks(-40*pi:20*pi:40*pi);
xticklabels({'-40\pi', '-20\pi', '0', '20\pi', '40\pi'})
Refer documentation of “dirac”, “fourier”, and “real” for more information and illustration examples.
  15 个评论

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Spectral Measurements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by