FFT de um sinal modulado AM
Estou gerando uma onda senoidal modulada em AM. A frequência da portadora é definida em$1000 \ \rm Hz$; a frequência de modulação é definida para$40 \ \rm Hz$ e $100 \%$ da amplitude é modulada.
Eu gerei 2 sinais com 2 equações ligeiramente diferentes.
- O sinal 1 segue: $$\sin(2\pi f_m t) \cdot \sin(2\pi f_c t)$$
- enquanto o sinal 2 segue: $$\big(1-\sin(2\pi f_m t)\big) \cdot \sin(2\pi f_c t)$$
Eu não entendo porque o primeiro sinal não tem um $1 \ \rm kHz$ componente na FFT e porque ambos os sinais não têm o mesmo período.
Ambos $\sin(x)$ e $1-\sin(x)$têm o mesmo período, e posso ver que o sinal 1 tem o seio da amplitude e o seio da portadora em fase, mas não consigo entender esses gráficos e interpretá-los corretamente. Obrigado por todas as informações e explicações que você pode fornecer :)
Snippet de código para produzir os 2 sinais:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import numpy as np
import os
#%% Signal 1
fs = 44100 # sampling rate, Hz, must be integer
duration = 1.0 # in seconds, may be float
# Define the time series
t = np.linspace(0, duration, int(duration*fs), endpoint=False) # time variable
# AM - Amplitude Modulation
fm = 40 # Modulation frequency
amplitude = np.sin(2*np.pi*fm*t)
# Output signal
fc = 1000 # Carrier frequency
signal1 = amplitude * np.sin(2*np.pi*fc*t).astype(np.float32)
# Apply FFT
fft_freq1 = np.fft.rfftfreq(signal1.shape[0], 1.0/44100)
fft1 = np.abs(np.fft.rfft(signal1))
#%% Signal 2
fs = 44100 # sampling rate, Hz, must be integer
duration = 1.0 # in seconds, may be float
# Define the time series
t = np.linspace(0, duration, int(duration*fs), endpoint=False) # time variable
# AM - Amplitude Modulation
fm = 40 # Modulation frequency
amplitude = np.sin(2*np.pi*fm*t)
# Output signal
fc = 1000 # Carrier frequency
signal2 = (1-amplitude) * np.sin(2*np.pi*fc*t).astype(np.float32)
# Apply FFT
fft_freq2 = np.fft.rfftfreq(signal2.shape[0], 1.0/44100)
fft2 = np.abs(np.fft.rfft(signal2))
#%% Plot
f, ax = plt.subplots(2, 3, sharex=False)
ax[0, 0].plot(t[:4411], signal1[:4411])
ax[0, 0].set_title('Signal 1')
ax[1, 0].plot(t[:4411], signal2[:4411])
ax[1, 0].set_title('Signal 2')
ax[0, 2].plot(fft_freq1[900:1101], fft1[900:1101])
ax[0, 2].set_title('Signal 1 FFT')
ax[1, 2].plot(fft_freq2[900:1101], fft2[900:1101])
ax[1, 2].set_title('Signal 2 FFT')
ax[0, 1].plot(t[:4411], amplitude[:4411])
ax[0, 1].set_title('Signal 1 AM')
ax[1, 1].plot(t[:4411], (1-amplitude)[:4411])
ax[1, 1].set_title('Signal 2 AM')
Respostas
Existem duas definições para os sinais modulados AM
O primeiro é chamado de AM clássico (ou AM convencional) e é dado por
$$x_{AM}(t) = (A_c + m(t)) \cdot \cos(2\pi f_c t) \tag{1}$$
e o segundo é chamado de DSB-SC (portadora suprimida de banda lateral dupla) e é dado por:
$$x_{AM}(t) = m(t) \cdot \cos(2\pi f_c t) \tag{2}$$
Em seu código, você usa Eq.2 (DSB-SC) para o primeiro exemplo e Eq.1 (AM clássico) para o segundo exemplo. A diferença é que o primeiro inclui o espectro da portadora (o pico médio em$f_c$) na saída, além dos espectros de sinal modulante (picos de banda lateral). O último DSB-SC, no entanto, inclui apenas os espectros da banda lateral do sinal de modulação e não o espectro da portadora, daí o nome portadora suprimida .
O DSB-SC tem a vantagem de que a energia de transmissão é reduzida, pois a energia da portadora de irradiação permanente é economizada, resultando em uma transmissão mais eficiente. Já o AM clássico, menos energeticamente eficiente para transmitir, tem a vantagem de sua demodulação (por hardware analógico) ser extremamente simples, exigindo o que se conhece como detector de envelope (um diodo, um capacitor e uma resistência, além do receptor da antena e circuito amplificador de áudio).
A multiplicação de sinais no domínio do tempo, cada um deles uma soma de apenas alguns componentes sinusoidais, é simples de entender como convolução no domínio da frequência :
mostrando primeiro o seu sinal 1:
$$\sin(2\pi f_m t) \cdot \sin(2\pi f_c t),$$
e então seu sinal 2:
$$\big(1-\sin(2\pi f_m t)\big) \cdot \sin(2\pi f_c t),$$
notar que $\cos(x) = \frac{1}{2}e^{-ix} + \frac{1}{2}e^{ix}$ divide cada sinusóide real em um componente de frequência negativo e um positivo.
Mostrei apenas as magnitudes dos componentes nas ilustrações. Como nenhum dos componentes coincide espectralmente, as fases dos componentes não importam, então você também poderia ter dito cossenos em vez de senos, e os gráficos ainda seriam os mesmos.
O domínio da frequência também dá uma visão das propriedades de periodicidade dos sinais. Um sinal periódico com período fundamental $P$ também é periódico com qualquer período que seja múltiplo de $P$, portanto, devemos fazer uma distinção entre um período e o período fundamental ao caracterizar o sinal. O período fundamental é o período mais curto de um sinal. Um sinal periódico com período fundamental$P$só pode consistir em frequências harmônicas da frequência que tem exatamente um ciclo durante o período fundamental do sinal. Essa frequência é o recíproco$1/P$do período fundamental. Em outras palavras, para um sinal ser periódico, sua transformada de Fourier deve ter valor zero em todos os lugares, exceto em múltiplos do recíproco do período fundamental do sinal.
As marcas nos gráficos de domínio de frequência a seguir mostram as frequências que são múltiplos do recíproco do período fundamental. As marcas de tique foram organizadas no padrão regular em forma de pente menos denso que incluía a frequência 0. O padrão menos denso foi selecionado para capturar o período fundamental em vez de algum período mais longo.
Os padrões das marcas de escala são diferentes para os dois sinais, portanto, os períodos fundamentais de seus dois sinais são diferentes .
No entanto, as ilustrações também mostram que ambos os sinais são periódicos com um período que é o período fundamental do sinal 2. O padrão de marca de escala do sinal 2 captura também todas as frequências presentes no sinal 1.
Uma inspeção visual no domínio do tempo confirma os resultados (sinal e seu período fundamental mostrado como uma linha vertical; azul: sinal 1, vermelho: sinal 2):