$$ \newcommand{\matn}[1]{{\left|\,\!\!\left|\,\!\!\left|#1\right|\,\!\!\right|\,\!\!\right|}} \newcommand{\real}{{\cal R}\!\mathit{e}} \newcommand{\imag}{{\cal I}\!\mathit{m}} \def\Zint{{\mathchoice{\setbox1=\hbox{\sf Z}\copy1\kern-.75\wd1\box1} {\setbox1=\hbox{\sf Z}\copy1\kern-.75\wd1\box1} {\setbox1=\hbox{\scriptsize\sf Z}\copy1\kern-.75\wd1\box1} {\setbox1=\hbox{\scriptsize\sf Z}\copy1\kern-.75\wd1\box1}}} \newcommand{\complex}{ \hbox{\rm C\kern-0.45em\rule[.07em]{.02em}{.58em}% \kern 0.43em}} \newcommand{\hypgl}{\mathop{\gtrless}} \newcommand{\conv}{\ast} \newcommand{\kron}{\otimes} \newcommand{\field}[1]{\mathbb{#1}} \newcommand{\re}{\field{R}} \newcommand{\co}{\field{C}} \newcommand{\CO}{\field{C}} \newcommand{\RE}{\field{R}} \newcommand{\FE}{\field{F}} \newcommand{\fe}{\field{F}} \newcommand{\qa}{\field{Q}} \newcommand{\na}{\field{N}} \newcommand{\za}{\field{Z}} \newcommand{\eo}{{e_{\mathrm{o}}}} \newcommand{\wo}{{\symbf{w}_{\mathrm{o}}}} \newcommand{\lms}{{\sf LMS}\xspace} \newcommand{\nlms}{\sf {NLMS}\xspace} \newcommand{\rls}{\sf {RLS}\xspace} \newcommand{\bpr}{\ud{\bf Proof:}\xspace} \newcommand{\epr}{\hfill $\diamondsuit$} \newcommand{\cL}{{\cal L}} \newcommand{\Ndist}{{\cal N}} \newcommand{\Hyp}{{\cal H}} \newcommand{\eqdef}{\overset{\Delta}{=}} \newcommand{\ds}{\displaystyle} \newcommand{\pr}{\no {\bfseries Proof:}\xspace} \newcommand{\cd}{\cdot} \newcommand{\ovr}{\overline} \newcommand{\no}{\noindent} \newcommand{\beq}{\begin{equation}} \newcommand{\eeq}{\end{equation}} \newcommand{\bea}{\begin{align}} \newcommand{\eea}{\end{align}} \newcommand{\bean}{\begin{align*}} \newcommand{\eean}{\end{align*}} \newcommand{\bsp}{\begin{split}} \newcommand{\esp}{\end{split}} \newcommand{\bsq}{\begin{subequations}} \newcommand{\esq}{\end{subequations}} \newcommand{\bthm}{\begin{theorem}} \newcommand{\ethm}{\end{theorem}} \newcommand{\blem}{\begin{lemma}} \newcommand{\elem}{\end{lemma}} \newcommand{\nn}{\nonumber} \newcommand{\ba}{\left[ \begin{array}} \newcommand{\ea}{\\ \end{array} \right]} \newcommand{\bma}{\begin{bmatrix}} \newcommand{\ema}{\end{bmatrix}} \newcommand{\ov}{\bar} \newcommand{\ud}{\underline} \newcommand{\td}{(t-1)} \newcommand{\tl}{\tilde} \newcommand{\bb}{\cite} \newcommand{\ad}{{\rm \;\;\;\; and \;\;\;\;\;}} \newcommand{\qd}{\hfill{\qed}} \newcommand{\eproof}{\hfill$\qed$} \newcommand{\eproofopen}{\hfill$\Box$} \newcommand{\eexam}{\hfill$\diamondsuit$} \newcommand{\lan}{\langle} \newcommand{\ran}{\rangle} \newcommand{\cc}{\;\;,} %%%% Add comma \newcommand{\sql}{\bigl\{} % Sequence left curly brackets \newcommand{\sqr}{\bigr\}} % Sequence right curly brackets \newcommand{\pseudo}{+} % Para pseudo-inversas, é mais fácil de lembrar. \def\qed{{\ \vrule width 3.0mm height 3.0mm \smallskip}} \def\Az{{\symbf{A}}} \def\Bz{{\symbf{B}}} \def\Cz{{\symbf{C}}} \def\Dz{{\symbf{D}}} \def\Ez{{\symbf{E}}} \def\Fz{{\symbf{F}}} \def\Gz{{\symbf{G}}} \def\Hz{{\symbf{H}}} \def\Iz{{\symbf{I}}} \def\Jz{{\symbf{J}}} \def\Kz{{\symbf{K}}} \def\Lz{{\symbf{L}}} \def\Mz{{\symbf{M}}} \def\Nz{{\symbf{N}}} \def\Oz{{\symbf{O}}} \def\Pz{{\symbf{P}}} \def\Qz{{\symbf{Q}}} \def\Rz{{\symbf{R}}} \def\Sz{{\symbf{S}}} \def\Tz{{\symbf{T}}} \def\Uz{{\symbf{U}}} \def\Vz{{\symbf{V}}} \def\Wz{{\symbf{W}}} \def\Xz{{\symbf{X}}} \def\Yz{{\symbf{Y}}} \def\Zz{{\symbf{Z}}} \def\0z{{\symbf{0}}} \def\onez{{\symbf{1}}} \def\11{\symbf{\mathbbm{1}}} % \usepackage{bbm} \def\twoz{{\symbf{2}}} \def\threez{{\symbf{3}}} \def\fourz{{\symbf{4}}} \def\fivez{{\symbf{5}}} \def\sixz{{\symbf{6}}} \def\sevenz{\symbf{7}} \def\eightz{\symbf{8}} \def\ninez{\symbf{9}} \def\ellz{{\symbf{\ell}}} \def\az{{\symbf{a}}} \def\bz{{\symbf{b}}} \def\cz{{\symbf{c}}} \def\dz{{\symbf{d}}} \def\ez{{\symbf{e}}} \def\fz{{\symbf{f}}} \def\gz{{\symbf{g}}} \def\hz{{\symbf{h}}} \def\iz{{\symbf{i}}} \def\jz{{\symbf{j}}} \def\kz{{\symbf{k}}} \def\lz{{\symbf{l}}} \def\mz{{\symbf{m}}} \def\nz{{\symbf{n}}} \def\oz{{\symbf{o}}} \def\pz{{\symbf{p}}} \def\qz{{\symbf{q}}} \def\rz{{\symbf{r}}} \def\sz{{\symbf{s}}} \def\tz{{\symbf{t}}} \def\uz{{\symbf{u}}} \def\vz{{\symbf{v}}} \def\wz{{\symbf{w}}} \def\xz{{\symbf{x}}} \def\yz{{\symbf{y}}} \def\zz{{\symbf{z}}} \def\alphaz{{\symbf{\alpha}}} \def\betaz{{\symbf{\beta}}} \def\deltaz{{\symbf{\delta}}} \def\gammaz{{\symbf{\gamma}}} \def\xiz{{\symbf{\xi}}} \def\muz{{\symbf{\mu}}} \def\nuz{{\symbf{\nu}}} \def\epsilonz{{\symbf{\epsilon}}} \def\varepsilonz{{\symbf{\varepsilon}}} \def\thetaz{{\symbf{\theta}}} \def\omegaz{{\symbf{\omega}}} \def\lambdaz{{\symbf{\lambda}}} \def\phiz{{\symbf{\phi}}} \def\varphiz{{\symbf{\varphi}}} \def\sigmaz{\symbf{\sigma}} \def\rhoz{\symbf{\rho}} \def\etaz{\symbf{\eta}} \def\psiz{\symbf{\psi}} \def\zetaz{\symbf{\zeta}} \def\Deltaz{{\symbf{\Delta}}} \def\Xiz{{\symbf{\Xi}}} \def\Thetaz{{\symbf{\Theta}}} \def\Omegaz{{\symbf{\Omega}}} \def\Lambdaz{{\symbf{\Lambda}}} \def\Phiz{{\symbf{\Phi}}} \def\Piz{{\symbf{\Pi}}} \def\Psiz{{\symbf{\Psi}}} \def\Sigmaz{\symbf{\Sigma}} \def\Gammaz{\symbf{\Gamma}} \def\tauz{\symbf{\tau}} \def\Ax{{\mathrm{A}}} \def\Bx{{\mathrm{B}}} \def\Cx{{\mathrm{C}}} \def\Dx{{\mathrm{D}}} \def\Ex{{\mathrm{E}}} \def\Fx{{\mathrm{F}}} \def\Gx{{\mathrm{G}}} \def\Hx{{\mathrm{H}}} \def\Ix{{\mathrm{I}}} \def\Jx{{\mathrm{J}}} \def\Kx{{\mathrm{K}}} \def\Lx{{\mathrm{L}}} \def\Mx{{\mathrm{M}}} \def\Nx{{\mathrm{N}}} \def\Ox{{\mathrm{O}}} \def\Px{{\mathrm{P}}} \def\Qx{{\mathrm{Q}}} \def\Rx{{\mathrm{R}}} \def\Sx{{\mathrm{S}}} \def\Tx{{\mathrm{T}}} \def\Ux{{\mathrm{U}}} \def\Vx{{\mathrm{V}}} \def\Wx{{\mathrm{W}}} \def\Xx{{\mathrm{X}}} \def\Yx{{\mathrm{Y}}} \def\Zx{{\mathrm{Z}}} \def\ax{{\mathrm{a}}} \def\bx{{\mathrm{b}}} \def\cx{{\mathrm{c}}} \def\dx{{\mathrm{d}}} \def\ex{{\mathrm{e}}} \def\fx{{\mathrm{f}}} \def\gx{{\mathrm{g}}} \def\hx{{\mathrm{h}}} \def\ix{{\mathrm{i}}} \def\jx{{\mathrm{j}}} \def\kx{{\mathrm{k}}} \def\lx{{\mathrm{l}}} \def\mx{{\mathrm{m}}} \def\nx{{\mathrm{n}}} \def\ox{{\mathrm{o}}} \def\px{{\mathrm{p}}} \def\qx{{\mathrm{q}}} \def\rx{{\mathrm{r}}} \def\sx{{\mathrm{s}}} \def\tx{{\mathrm{t}}} \def\ux{{\mathrm{u}}} \def\vx{{\mathrm{v}}} \def\wx{{\mathrm{w}}} \def\xx{{\mathrm{x}}} \def\yx{{\mathrm{y}}} \def\zx{{\mathrm{z}}} \newcommand{\veps}{{\varepsilon}} \DeclareMathOperator{\cond}{cond} \DeclareMathOperator{\grau}{grau} \DeclareMathOperator{\eps}{eps} \DeclareMathOperator{\arctanh}{arctanh} \DeclareMathOperator{\arcctanh}{arcctanh} \DeclareMathOperator{\Trc}{Tr} \DeclareMathOperator{\diag}{diag} \DeclareMathOperator{\fxd}{fx} \DeclareMathOperator{\fl}{fl} \DeclareMathOperator{\quant}{Q} \DeclareMathOperator{\Prob}{Pr} \DeclareMathOperator{\E}{E} \DeclareMathOperator{\dif}{d} \DeclareMathOperator{\var}{var} \DeclareMathOperator{\vect}{vec} \DeclareMathOperator{\Range}{{\cal R}} \DeclareMathOperator{\Span}{Sp} \DeclareMathOperator{\Kernel}{{\cal N}} \DeclareMathOperator{\rank}{rank} \DeclareMathOperator{\posto}{posto} \DeclareMathOperator{\nulidade}{nul} \DeclareMathOperator{\col}{col} \DeclareMathOperator{\sinc}{sinc} \newcommand{\Lvert}{\left\lvert\left\lvert\left\lvert} \newcommand{\Rvert}{\right\rvert\right\rvert\right\rvert} \newcommand{\wtl}{\tilde{\wz}} \newcommand{\ztl}{\tilde{\zz}} \newcommand{\utl}{\tilde{\uz}} \newcommand{\wzh}{\hat{\wz}} \newcommand{\wtt}{\tilde{w}} \newcommand{\ztt}{\tilde{z}} \newcommand{\wth}{\hat{w}} \newcommand{\diffe}[3]{\frac{\dif^{#3} #2}{\dif #1^{#3}}} \newcommand{\stk}[2]{\genfrac{}{}{0pt}{2}{#1}{#2}} \DeclareMathOperator{\sen}{sen} \DeclareMathOperator{\sign}{sign} \DeclareMathOperator{\sinal}{sinal} \DeclareMathOperator{\sgm}{sgm} \newcommand{\hex}[1]{{(\text{#1})_{16}}} \newcommand{\dec}[1]{{(#1)_{10}}} \newcommand{\bin}[1]{{(#1)_{2}}} \newcommand{\cod}[1]{\texttt{#1}} \newcommand{\arquivo}[1]{\texttt{#1}} \newcommand{\menu}[1]{\textsc{#1}} \newcommand{\psdcod}[1]{{\text{ \underline{#1} }}} $$

PSI 3432 — P2 2022

Data de Publicação

8 de dezembro de 2022

Código-fonte:
using Plots, DSP, LinearAlgebra, LaTeXStrings, Markdown, FFTW, DataFrames, OffsetArrays
pyplot()
mkdn = Markdown.parse
function rd(x; d=2)
    return round(x, digits = d)
end;

1 Questão

[2,5pt] Você recebe a TDF de um sinal amostrado com uma taxa \(f_a=8\)kHz, com os valores \[\begin{align*} X[0] &= 5 & X[1] &= 3 + j4 & X[2] &= 1 - j & X[3] &= 0\\ X[4] &= 0 & X[5] &= 0 & X[6] &= 1 + j& X[7] &= 3 - j4 \end{align*}\] Responda:

1.1

[1,0pt] Assumindo que foi usado um número inteiro de períodos do sinal para calcular a TDF, determine os coeficientes \(x_k\) da série de Fourier do sinal.

Solução:

A frequência correspondente à \(k\)-ésima raia da TDF é \(f_k = k\Delta f\), com \(\Delta f=\frac{f_a}{N}\). No nosso caso, \(N=8\), então

Código-fonte:
fa = 8_000
N = 8
Δf = fa / N
mkdn("``f_k = $Δf k``")

\(f_k = 1000.0 k\)

E como foi usado um número inteiro de períodos, as raias da TDF correspondem às raias da SF, com um fator de \(N\). Assim, a série de Fourier fica

Código-fonte:
Xk = [5, 3+4im, 1+im, 0, 0, 0, 1-im, 3-4im]
xk = DataFrame()
xk[!,:k] = 0:N-1
xk[!, :fk] = xk[!,:k]*Δf
xk[!,:xk] = Xk / N
xk[!, "|xk|"] = abs.(Xk/N)
xk[!, "∠xk (°)"] = [abs(a) > 1e-10 ? rd.(angle.(a)*180/π) : 0.0 for a in Xk]
xk

8 rows × 5 columns

kfkxk|xk|∠xk (°)
Int64Float64Complex…Float64Float64
100.00.625+0.0im0.6250.0
211000.00.375+0.5im0.62553.13
322000.00.125+0.125im0.17677745.0
433000.00.0+0.0im0.00.0
544000.00.0+0.0im0.00.0
655000.00.0+0.0im0.00.0
766000.00.125-0.125im0.176777-45.0
877000.00.375-0.5im0.625-53.13

[0,5pt] Escreva a expressão do sinal \(x(t)\).

Solução:

Cada raia da SF corresponde a um cosseno no sinal: \[\begin{align*} x(t) &= 0.625 + 2\times 0.625\cos\left(2\pi t + 53.13\degree\right) + 2\times 0.1768\cos(4\pi t + 45\degree)\\ &=0.625 + 1.25\cos\left(2\pi t + 53.13\degree\right) + 0.3536\cos(4\pi t + 45\degree), \end{align*}\] com \(t\) em ms.

1.2

[1,0pt] Qual seria a TDF resultante se fossem usados \(N_1 = 16\) pontos para o cálculo?

Solução:

Neste caso seriam tomados 2 períodos do sinal para fazer a TDF, e a frequência correspondente à \(k\)-ésima raia seria a metade da anterior (no caso, \(500\)Hz). Assim, no caso do sinal deste exercício as raias correspondentes a \(k\) ímpar seriam nulas, e as raias pares teriam amplitude dobrada:

Código-fonte:
Xk = [5, 3+4im, 1+im, 0, 0, 0, 1-im, 3-4im]
Xk2 = DataFrame()
Xk2[!,:k] = 0:2N-1
Xk2[!, :fk] = Xk2[!,:k]*Δf/2
Xk2[!,:Xk] = zeros(Complex, 2N)
Xk2[!,:Xk][1:2:end] = Xk*2
Xk2[!,"|Xk|"] = zeros(2N)
Xk2[!, "|Xk|"][1:2:end] = abs.(Xk*2)
Xk2[!, "∠Xk (°)"] = zeros(2N)
Xk2[!, "∠Xk (°)"][1:2:end] = [abs(a) > 1e-10 ? rd.(angle.(a)*180/π) : 0.0 for a in Xk]
Xk2

16 rows × 5 columns

kfkXk|Xk|∠Xk (°)
Int64Float64ComplexFloat64Float64
100.010+0im10.00.0
21500.00+0im0.00.0
321000.06+8im10.053.13
431500.00+0im0.00.0
542000.02+2im2.8284345.0
652500.00+0im0.00.0
763000.00+0im0.00.0
873500.00+0im0.00.0
984000.00+0im0.00.0
1094500.00+0im0.00.0
11105000.00+0im0.00.0
12115500.00+0im0.00.0
13126000.02-2im2.82843-45.0
14136500.00+0im0.00.0
15147000.06-8im10.0-53.13
16157500.00+0im0.00.0

2 Questão

[3,0pt] O sinal \(x(t)\) foi amostrado a uma taxa de \(f_a = 9\)kHz, obedecendo ao critério de Nyquist. É necessário subir a taxa de amostragem para \(12\)kHz.

Projete um sistema para efetuar a troca de taxa. Deseja-se que a distorção do sinal (na banda do sinal) seja menor ou igual a \(0.001\), e que a atenuação das imagens no espectro seja de pelo menos \(70\)dB.

Desenhe um diagrama do sistema necessário para a troca de taxa, e projete um filtro que atenda às especificações pedidas.

Solução:

Neste caso \(f_a=9\)kHz e \(f_b=12\)kHz, ou seja, é necessário usar um interpolador e um decimador tais que

Código-fonte:
fa = 9_000
fb = 12_000
αf = fb // fa
L = numerator(αf)
M = denominator(αf)
display(mkdn("``\\frac{f_b}{f_a} = \\frac{$fb}{$fa}= \\frac{$L}{$M}``"))
display(mkdn("Taxa de aumento da frequência: ``L = $L``"))
mkdn("Taxa de redução da frequência: ``M = $M``.")

\(\frac{f_b}{f_a} = \frac{12000}{9000}= \frac{4}{3}\)

Taxa de aumento da frequência: \(L = 4\)

Taxa de redução da frequência: \(M = 3\).

O sistema para aumento de taxa funcionaria como no diagrama a seguir:

Código-fonte:
flowchart LR
  x(("x(t)"))-->Amostragem(nTa)
  Amostragem-->|"x[n]=x(nTa)"|L("↑L")
  L-->|"xᵢ[m]"|F(FPB)
  F-->|"xf[m]=x(mTa/L)"|M("↓M")
  M-->xm(("x[ℓ]=x(ℓTb)"))

flowchart LR
  x(("x(t)"))-->Amostragem(nTa)
  Amostragem-->|"x[n]=x(nTa)"|L("↑L")
  L-->|"xᵢ[m]"|F(FPB)
  F-->|"xf[m]=x(mTa/L)"|M("↓M")
  M-->xm(("x[ℓ]=x(ℓTb)"))

O filtro precisa tem ganho \(L=4\) e frequência de corte \(\omega_c=\pi/4\).
\[\begin{align*} \delta_p &= 0{,}001, & \delta_r &= 10^{-70/20} \end{align*}\] O limite da banda do sinal não foi especificado, então há várias respostas possíveis para calcular o comprimento do filtro.

Assumindo por exemplo que o limite da banda-passante do sinal seja \(8\)kHz, se for usada janela de Kaiser teremos os valores a seguir (note que há várias respostas corretas para esta pergunta): \[\begin{align*} \omega_p &= \frac{8\times 2\pi}{9\times 4}= \frac{4}{9}\pi, & \omega_r &= 2\pi-\omega_p = \frac{5}{9}\pi. \end{align*}\] Neste caso, temos \(\Delta\omega = \pi/9\), e \[ A = 20\log_{10}(\min(\delta_p,\delta_r)) \]

Código-fonte:
ωp = 4π/9
ωr = 5π/9
ωc = π/4
Δω = ωr - ωp
δp = 0.001
δr = 10^(-70/20)
A = -20log10(min(δp, δr))
mkdn("``\\delta_r = $(rd(δr; d=7))``, ``A = $A``")

\(\delta_r = 0.0003162\), \(A = 70.0\)

Código-fonte:
N = ceil(Int, (A-8)/2.285Δω + 1)
79

O parâmetro de forma \(\beta\) do filtro de Kalman é dado pela expressão

Código-fonte:
if A < 21
  β = 0
elseif A <= 50
  β = 0.5842(A-21)^0.4 + 0.07886(A-21)
else
  β = 0.1102(A-8.7)
end
6.75526

Deste modo, o filtro fica

Código-fonte:
Lf = (N-1)/2
n = 0:N-1
hd = (ωc/π) * sinc.(ωc/π * (n .- Lf))
wk = kaiser(N, β/π)
h = hd .* wk
ω = range(0, π, length = 500)
H = freqresp(PolynomialRatio(h, [1]), ω)
plot/π, abs.(H), lw = 2, xlabel = L"\omega/\pi", label = L"|H(e^{j\omega})|")

3 Questão

[2,5pt] Tem-se disponível um conversor A/D de \(6\) bits capaz de operar a uma taxa de amostragem de até \(50\)MHz. Qual é a precisão máxima que seria possível conseguir usando sobreamostragem sem realimentação (como visto em aula) para um sinal de música com banda até \(f_{\max}=20\)kHz?

Solução:

O valor máximo de da taxa de sobreamostragem \(M\) neste caso é

Código-fonte:
fa = 40_000 # fa = 2fmax
fb = 50_000_000
M = fb//fa
1250//1

A taxa de sobreamostragem define a redução do ruído de quantização pela fórmula \[ \sigma_{6\text{ bits}}^2 = \frac{2^{-2\times 6}}{3} = \frac{1}{M}\frac{2^{-2\times B}}{3}, \] e portanto \[ B = 6 + \frac{1}{2}\log_2(M), \] ou seja,

Código-fonte:
B = 6 + 0.5*log2(M)
11.143856189774723
Código-fonte:
mkdn("A precisão máxima conseguida é então equivalente a um conversor A/D usando ``B = $(rd(B))`` bits.")

A precisão máxima conseguida é então equivalente a um conversor A/D usando \(B = 11.14\) bits.

4 Questão

[2,0 pt] Um filtro de duas dimensões separável é tal que \(h[n_1, n_2] = h_1[n_1] h_2[n_2]\).

4.1

[1,0 pt] Mostre pela definição que \(H(\omega_1, \omega_2)\) também é separável.

Solução:

Pela definição, \[\begin{align*} H(\omega_1, \omega_2) &= \sum_{n_1=-\infty}^\infty \sum_{n_2=-\infty}^\infty h[n_1, n_2] e^{-j\omega_1 n_1}e^{-j\omega_2 n_2}= \sum_{n_1=-\infty}^\infty \sum_{n_2=-\infty}^\infty h_1[n_1] h_2[n_2] e^{-j\omega_1 n_1}e^{-j\omega_2 n_2}\\ &= \sum_{n_1=-\infty}^\infty h_1[n_1] e^{-j\omega_1 n_1} \sum_{n_2=-\infty}^\infty h_2[n_2] e^{-j\omega_2 n_2} = H_1(\omega_1) H_2(\omega_2). \end{align*}\]

[1,0 pt] Imagine um filtro com resposta em frequência \[ H(\omega_1, \omega_2) = \begin{cases} 1, & \omega_1^2 + \omega_2^2 \le \pi/3,\\ 0, & \pi/3 < \omega_1^2 + \omega_2^2, |\omega_1|\le \pi, |\omega_2|\le \pi. \end{cases} \] um filtro com essas características pode ser separável? Justifique. Dica: pense em como o ganho do filtro pode variar para um valor de \(\omega_1\) fixo, à medida que \(\omega_2\) varia, e vice-versa. Pense em especial no que isso significa para os pontos em que o ganho do filtro deve ser igual a zero.

Solução:

Um filtro com uma resposta assim não pode ser separável, pois uma circunferência não pode ser descrita como um produto de duas funções de uma só variável. Isto pode ser visto de maneira simples considerando os pontos em que \(H(\omega_1, \omega_2)=0\). Se o filtro fosse separável, \[ H(\hat{\omega}_1, \hat{\omega}_2)=0 \Rightarrow \begin{cases} H_1(\hat{\omega}_1) = 0 & \text{e/ou}\\ H_2(\hat{\omega}_2) = 0. \end{cases} \] Mas neste caso, todos os pontos na linha \(\omega_1=\hat{\omega}_1\) ou na coluna \(\omega_2=\hat{\omega}_2\) seriam nulos. Considere por exemplo o ponto \(\hat{\omega}_1=\hat{\omega}_2=0{,}8\pi/3\). Claramente temos \(\hat{\omega}_1^2+\hat{\omega}_2^2=2\times 0{,}8^2(\pi/3)^2>(\pi/3)^2\) (veja a figura abaixo). Neste caso, todos os pontos em ao menos uma das duas retas vermelhas teriam de ser iguais a zero.

Código-fonte:
θ = range(0, 2π, length = 500)
r = π/3
plot(r*cos.(θ), r*sin.(θ), lw = 2, xlabel = L"\omega_1", 
  ylabel = L"\omega_2", fill = (0, 0.2, :green), label = "",
  aspect_ratio = 1)
ω̂1 = ω̂2 = 0.8π/3
plot!([ω̂1], [ω̂2], marker = (:xcross, 8), label = "")
plot!([-1, 1], fill(0.8π/3, 2), lw = 2, label = "", color = :red)
plot!(fill(0.8π/3, 2), [-1, 1], lw = 2, label = "", color = :red)