Código-fonte:
using Plots, DSP, LinearAlgebra, LaTeXStrings, Markdown, FFTW, DataFrames, OffsetArrays
pyplot()
= Markdown.parse
mkdn function rd(x; d=2)
return round(x, digits = d)
end;
using Plots, DSP, LinearAlgebra, LaTeXStrings, Markdown, FFTW, DataFrames, OffsetArrays
pyplot()
= Markdown.parse
mkdn function rd(x; d=2)
return round(x, digits = d)
end;
[3,5pt] Considere o sinal \( x(t) = \begin{cases} \cos(2\pi t), & -\frac{1}{4}\le t \le \frac{1}{4},\\ 0, & \text{caso contrário}. \end{cases} \)
[1,0pt] Calcule a transformada \(X(j\Omega)\) pela definição (usando a integral)
\(\begin{align*} X(j\omega) &= \int_{-1/4}^{1/4}\cos(2\pi t) e^{-j\Omega t}dt = \frac{1}{2}\int_{-1/4}^{1/4}e^{j2\pi t} e^{-j\Omega t} dt + \frac{1}{2}\int_{-1/4}^{1/4}e^{-j2\pi t} e^{-j\Omega t}dt\\&=\left.\frac{1}{2j(2\pi-\Omega)}e^{j(2\pi-\Omega)t}\right|_{-1/4}^{1/4} =\frac{\sen\left(\pi/2-\Omega/4\right)}{2\pi-\Omega}+\frac{\sen\left(\pi/2+\Omega/4\right)}{2\pi+\Omega}\\&=\frac{1}{4}\sinc\left(\frac{1}{2}-\frac{\Omega}{2\pi}\right)+\frac{1}{4}\sinc\left(\frac{1}{2}+\frac{\Omega}{2\pi}\right)\\&=\frac{1}{4}\sinc\left(\frac{1}{2}-\frac{\Omega}{2\pi}\right)+\frac{1}{4}\sinc\left(\frac{1}{2}+\frac{\Omega}{2\pi}\right)\end{align*}\)
Em termos de \(f=\Omega/2\pi\), temos \( X(2\pi f) = \frac{1}{4}\sinc\left(\frac{f-1}{2}\right)+ \frac{1}{4}\sinc\left(\frac{f+1}{2}\right) \)
= range(-25, 25, length = 500)
f = 0.5sinc.((f.-1)/2) + 0.5sinc.((f.+1)/2)
X = 0.5sinc.((f.-1)/2)
X1 = 0.5sinc.((f.+1)/2)
X2 plot(f, X, label = L"X(j2\pi f)", ylabel = L"$f$ (Hz)",
= L"f", linewidth = 3)
xlabel plot!(f, X1, label = L"0.5sinc.((f.-1)/2)" )
plot!(f, X2, label = L"0.5sinc.((f.+1)/2)")
Calcule a transformada \(X(j\Omega)\) usando convolução e propriedades.
Use para isto a função \( p_T(t) = \begin{cases} 1, & |t|\le T/2,\\ 0, & \text{caso contrário}. \end{cases} \)
[0,5pt] Calcule a transformada \(P_T(j\Omega)\).
\( P_T(j\Omega) = \int_{-T/2}^{T/2}e^{-j\Omega t} dt = \frac{e^{-j\Omega\frac{T}{2}}-e^{j\Omega\frac{T}{2}}}{-j\Omega\textcolor{red}{\frac{2T}{2T}}}=T\frac{\sen\left(\Omega\frac{T}{2}\right)}{\Omega\frac{T}{2}} = T\frac{\sen(\pi f T)}{\pi f T} = T\sinc\left(f T\right). \)
= 1/2
T = T * sinc.(f * T)
PT plot(f, PT, xlabel = L"$f$ (Hz)", label = L"P_T(2\pi f)")
[0,5pt] Use propriedades das transformadas agora:
Note que \(x(t) = p_T(t)\cos(2\pi t)\). Use as transformadas de \(p_T(t)\) e \(\cos(2\pi t)\) e propriedades da TF para calcular \(X(j\Omega)\).
A transformada de \(f(t)=\cos(2\pi t)\) é \(F(j\Omega)=\pi\delta(\Omega-2\pi) + \pi\delta(\Omega+2\pi)\). Como a transformada do produto é a convolução das transformadas, temos \(\begin{align*} X(j\Omega) &= F(j\Omega)\ast P_T(j\Omega) = \frac{1}{2\pi} \int_{-\infty}^{\infty} P_T\bigl(j(\Omega-z)\bigr) F(jz)dz\\ &= \frac{1}{2} P_T\bigl(j(\Omega-2\pi)\bigr) + \frac{1}{2} P_T\bigl(j(\Omega+2\pi)\bigr). \end{align*}\)
Compare o resultado com o do item anterior.
[0,5pt] Defina \(\tilde{y}(t) = \sum_{\ell=-\infty}^{\infty} x(t-\ell T_0)\). Desenhe um gráfico de \(\tilde{y}(t)\), supondo \(T_0>\frac{1}{2}\).
= range(-4, 4, length = 500)
t = 1
T0 = t -> abs(t) <= T/2 ? cos(2π*t) : 0.0
x function ỹ(t, x, T0)
= zeros(length(t))
y for i in eachindex(t)
= t[i] - sign(t[i])*round(abs(t[i])/T0)*T0
tmod = x(tmod)
y[i] end
return y
end
plot(t, ỹ(t, x, T0), xlabel = L"t", label = L"\tilde{y}(t)", title = L"$\tilde{y}(t)$ para o caso de $T_0$="*"$T0")
[0,5pt] Determine a série de Fourier \(y_k\) a partir do \(X(j\Omega)\) calculado nos itens anteriores
Veja que \(y_k = \frac{1}{T_0}\int_{T_0} \tilde{y}(t)e^{-j k\Omega_0 t}dt\), com \(\Omega_0 = 2\pi/T_0\). Comparando com \(X(j\Omega)\), vemos que \(y_k = X(jk\Omega_0)=X(j2\pi kf_0)\), e portanto, \( y_k = \frac{1}{2}\sinc\left(\frac{kf_0-1}{2}\right)+ \frac{1}{2}\sinc\left(\frac{kf_0+1}{2}\right) \)
= -10:10
k = 1/T0
f0 = T*sinc.((k*f0 .- 1)/2) + T*sinc.((k*f0 .+ 1)/2)
yk plot(k, yk, line = :stem, marker = (:circle, 2),
= L"y_k", xlabel = L"k") label
[0,5pt] É possível amostrar \(\tilde{y}(t)\) sem rebatimento?
Como \(y_k\) é diferente de zero para um número infinito de valores de \(k\), não é possível amostrar \(\tilde{y}(t)\) sem rebatimento. No entanto, podemos ver pelos gráficos que os valores de \(|y_k|\) decaem para zero relativamente rápido, portanto é possível escolher uma taxa de amostragem alta o suficiente de maneira que o erro causado pela amostragem seja pequeno. Neste caso é melhor usar um filtro anti-rebatimento (cortando frequências acima de \(f_a/2\)) para reduzir distorções.
[3,0pt] Considere o sinal \( \tilde{x}(t) = 2\cos(2\pi f_0 t + 30\degree) + 10\cos(2\pi 3f_0 t - 60\degree), \) em que \(f_0=1,5\)kHz.
Imagine que \(\tilde{x}(t)\) seja amostrado com \(f_a=15,5\)kHz, resultando na sequência \(x[n]=\tilde{x}(nT_a)\).
[1,0pt] A sequência \(x[n]\) é periódica? Qual é o seu período?
Para a sequência ser periódica, \(z = f_a/f_0\) deve ser um número racional. Vejamos:
\(\frac{f_0}{f_a} = \frac{31}{3}\).
Portanto, o período de \(x[n]\) é \(N_0 = 31\).
[1,0pt] Quanto valem os coeficientes da série de Fourier de \(x[n]\)?
Os coeficientes da série de Fourier neste caso são obtidos notando que em um período do sinal discreto temos \(Q\) períodos do sinal de tempo contínuo. Portanto,
display(mkdn("``Q = $Q``"))
= OffsetArray(zeros(6*Q+1, 2), -3Q:3Q, 1:2)
xk -3Q:Q:3Q,:] = [5 60;0 0; 1 -30; 0 0; 1 30; 0 0; 5 -60]
xk[= DataFrame()
dx :k] = -3Q:Q:3Q
dx[!, "Módulo"] = xk[-3Q:Q:3Q, 1]
dx[!, "Fase"] = xk[-3Q:Q:3Q, 2]
dx[!, display(mkdn("``x_k``:"))
dx
\(Q = 3\)
\(x_k\):
7 rows × 3 columns
k | Módulo | Fase | |
---|---|---|---|
Int64 | Float64 | Float64 | |
1 | -9 | 5.0 | 60.0 |
2 | -6 | 0.0 | 0.0 |
3 | -3 | 1.0 | -30.0 |
4 | 0 | 0.0 | 0.0 |
5 | 3 | 1.0 | 30.0 |
6 | 6 | 0.0 | 0.0 |
7 | 9 | 5.0 | -60.0 |
[1,0pt] Suponha que você calcule a SFTD usando como número de pontos \(N=\) 2 períodos de \(x[n]\). Quais serão os valores da SFTD?
Se \(N= 2 N_0=62\), então temos 2 períodos do sinal discreto na janela escolhida. Como \(Q=3\), as raias não nulas da SFTD serão em \(k=2\times 3\ell= 6\ell\), de modo que \(\tilde{X}[6\ell] = N x_\ell\ = 2N_0 x\ell\):
= 2N0
N = 0:N-1
n = 1/fa
Ta = 2cos.(2π*f0 * n * Ta .+ π/6) .+
x 10cos.(2π * 3*f0 * n * Ta .- π/3)
= fft(x)
X = round.([abs.(X) angle.(X)*180/π .* (abs.(X) .> 1e-5)], digits = 2)
Xround display(mkdn("**Valores interessantes de ``\\tilde{X}[k]``:**"))
= DataFrame()
df = [range(0, step = L*Q, length=N÷(2L*Q));
indx range(stop = N-L*Q, step = L*Q, length = N÷(2L*Q))]
:k] = indx
df[!,:Módulo] = Xround[indx .+ 1,1]
df[!,:Fase] = Xround[indx .+ 1,2]
df[!, df
Valores interessantes de \(\tilde{X}[k]\):
10 rows × 3 columns
k | Módulo | Fase | |
---|---|---|---|
Int64 | Float64 | Float64 | |
1 | 0 | 0.0 | 0.0 |
2 | 6 | 62.0 | 30.0 |
3 | 12 | 0.0 | -0.0 |
4 | 18 | 310.0 | -60.0 |
5 | 24 | 0.0 | 0.0 |
6 | 32 | 0.0 | -0.0 |
7 | 38 | 0.0 | -0.0 |
8 | 44 | 310.0 | 60.0 |
9 | 50 | 0.0 | 0.0 |
10 | 56 | 62.0 | -30.0 |
[3,5pt] Suponha que você tenha um arranjo de \(M=4\) antenas, espaçadas de \(d = \lambda/2\).
Suponha que cheguem 3 sinais ao seu arranjo: \(\begin{align*} s_0(t) &= A_0(t)\cos(2\pi f_0 t + \varphi_0(t)), \text{ da direção }\theta_0 = 5\degree,\\ s_1(t) &= A_1(t)\cos(2\pi f_0 t + \varphi_1(t)), \text{ da direção }\theta_1 = 35\degree,\\ s_2(t) &= A_2(t)\cos(2\pi f_0 t + \varphi_2(t)), \text{ da direção }\theta_0 = -45\degree, \end{align*}\) com \(f_0 = 1\)GHz.
[0,5pt] Qual deve ser o valor de \(d\)?
= 1e9
f0 = 3e8
c = c/f0
λ = λ/2 d
0.15
[1,0pt] Se o sinal de interesse for \(s_0(t)\), escolha valores dos coeficientes do arranjo de antenas para garantir ganho 1 na direção \(\theta_0\), equalizando os atrasos de sinais vindos dessa direção.
0 = 5
θ1 = 35
θ2 = -45
θ= d * sind(θ0) / c
u = 4
M 0 = 2π*f0 * (0:M-1) * u
τ= (1/M)*exp.(im*τ0) w
4-element Vector{ComplexF64}:
0.25 + 0.0im
0.2406870601800214 + 0.06759984513220992im
0.2134420875048099 + 0.13016326394797068im
0.17029492830173515 + 0.18302906161237587im
Para achar os ganhos nas outras direções, podemos usar a expressão (válida para \(d = \lambda/2\)) \( B(\theta, \theta_0) = \frac{1}{M}e^{j\pi\frac{M-1}{2}(\sen(\theta)-\sen(\theta_0))} \frac{\sen\left(\pi M \frac{\sen(\theta)-\sen(\theta_0)}{2}\right)}{\sen\left(\pi \frac{\sen(\theta)-\sen(\theta_0)}{2}\right)}\)
= (θ,θ0, M) -> (1/M) * exp(im * π * (M-1) * (sind(θ)-sind(θ0))/2) * sin(π * M * (sind(θ)-sind(θ0))/2) / sin(π * (sind(θ)-sind(θ0))/2)
B = B(θ1,θ0, M)
B1 = B(θ2,θ0, M)
B2 = round(abs(B1), digits = 4)
absB1 = round(abs(B2), digits = 4)
absB2 = round(angle(B1)*180/π, digits = 1)
fB1 = round(angle(B2)*180/π, digits = 1)
fB2 display(mkdn("O ganho na direção ``\\theta_1`` é $(round(B1, digits=4)), isto é, $absB1 ``e^{$fB1\\degree j}``."))
display(mkdn("O ganho na direção ``\\theta_2`` é $(round(B2, digits = 4)), isto é, $absB2 ``e^{$fB2\\degree j}``."))
O ganho na direção \(\theta_1\) é -0.0203 + 0.0231im, isto é, 0.0308 \(e^{131.3\degree j}\).
O ganho na direção \(\theta_2\) é 0.2091 - 0.1434im, isto é, 0.2535 \(e^{-34.5\degree j}\).
[2,0pt] Supondo que a potência média de \(A_0(t)\) seja 2, a potência média de \(A_1(t)\) seja 3, e a de \(A_2(t)\) seja 5, quais serão as relações sinal/interferência antes e depois do arranjo?
Dica: considere os sinais independentes, de modo que você pode somar potências.
= 2
P0 = 3
P1 = 5
P2 = P0 / (P1 + P2)
SIRentr println("Relação Sinal/Interferência na entrada: ", rd(SIRentr))
Relação Sinal/Interferência na entrada: 0.25
= 2 * 1^2
P0s = 3 * absB1^2
P1s = 5 * absB2^2
P2s = P0s / (P1s + P2s)
SIRs println("Relação Sinal/Interferência na saída: ", rd(SIRs))
Relação Sinal/Interferência na saída: 6.17