AM 调制信号的 FFT

信息处理 fft 声音 调幅
2022-02-03 12:27:04

我正在生成一个 AM 调制正弦波。载波频率设置为调制频率设置为的幅度被调制。1000 Hz40 Hz100%

我用 2 个稍微不同的方程生成了 2 个信号。

  • 信号 1 如下:
    sin(2πfmt)sin(2πfct)
  • 而信号 2 如下:
    (1sin(2πfmt))sin(2πfct)

我不明白为什么第一个信号在 FFT 上没有分量,为什么两个信号没有相同的周期。1 kHz

\ sin具有相同的周期,我可以看到信号 1 具有同相的幅度正弦和载波正弦,但我无法理解这些图并解释他们正确。感谢您提供的所有信息和解释:)sin(x)1sin(x)

信号

产生 2 个信号的代码片段:

#!/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')
3个回答

AM调制信号有两种定义

第一个称为经典AM(或传统AM),由下式给出

(1)xAM(t)=(Ac+m(t))cos(2πfct)

第二个称为 DSB-SC(双边带抑制载波),由下式给出:

(2)xAM(t)=m(t)cos(2πfct)

在您的代码中,第一个示例使用 Eq.2 (DSB-SC),第二个示例使用 Eq.1(经典 AM)。它们的区别在于,第一个除了调制信号频谱(边带尖峰)外,还包括输出端然而,后一种 DSB-SC 仅包括调制信号边带频谱而不包括载波频谱,因此称为抑制载波fc

DSB-SC 的优点是传输能量减少,因为永久辐射的载波能量被节省,从而产生更有效的传输。传统 AM 的广播能效较低,但其优势在于其解调(通过模拟硬件)非常简单,除了天线接收器外,还需要所谓的包络检波器(二极管、电容器和电阻)和音频放大器电路)。

信号的时域乘法,每个信号只有几个正弦分量的总和,很容易理解为频域卷积

在此处输入图像描述

首先显示您的信号 1:

sin(2πfmt)sin(2πfct),

然后你的信号2:

(1sin(2πfmt))sin(2πfct),

注意到cos(x)=12eix+12eix将每个真实正弦波分成负频率分量和正频率分量。

我只在插图中显示了组件的大小。由于没有一个分量在光谱上重合,因此分量的相位并不重要,因此您也可以说余弦而不是正弦,并且绘图仍然是相同的。

频域还给出了信号的周期性属性的视图。具有基本周期周期信号 P也是周期性的,任何周期都是P,所以我们在表征信号时应该区分周期和基本周期。基本周期是信号的最短周期。具有基本周期的周期信号P只能由在信号的基本周期上恰好有一个周期的频率的谐波频率组成。这个频率是倒数1/P的基本时期。换句话说,对于一个信号是周期性的,它的傅里叶变换除了在信号基本周期的倒数的倍数处之外,在任何地方都必须是零值。

以下频域图中的刻度线表示频率是基本周期倒数的倍数。刻度线以包含频率 0 的最不密集的规则梳状图案排列。选择最不密集的图案来捕捉基本周期而不是更长的周期。

在此处输入图像描述

两个信号的刻度线模式不同,因此两个信号的基本周期不同

但是,插图还显示,这两个信号都是周期性的,其周期是信号 2 的基本周期。信号 2 的刻度线图案也捕获了信号 1 中存在的所有频率。

时域目视检查确认发现(信号,其基本周期显示为垂直线;蓝色:信号 1,红色:信号 2):

在此处输入图像描述

它们确实有一个 1Khz 分量,但不是通过傅立叶透镜。

为了看看发生了什么,让我们用纯载波音叠加 AM 信号:

在此处输入图像描述

左图揭示了两种 AM 方案之间的关键区别:极性右仅是正数,左是零中心并翻转符号。这种符号反转的效果是,载体的“摆动”过早地翻转极性。红线表示当 AM 从 (+) 变为 (-) 时;如果没有这个符号反转,我们在样本 32 处有一个可能的正峰值(就像蓝色纯色调一样) -有了它,它现在是的。

这“愚弄”了傅立叶分解,使其认为它是“更多周期”,因为这就是在固定幅度结构下更快地达到负峰值的原因。物理过程仍然非常f=2,20.

因此,我们看到的频谱是必须将信号表示为固定幅度频率之和的结果。这种傅立叶结构既不是最有意义的,也不是最有用的;我在这个答案中提供了更多的直觉,以及更多关于为什么 FFT 会在这里这里误导;忽略反对票。


警告:如果您计算橙色峰,在任何一种情况下都不会找到 40;鉴于 AM,每个都有自己的解释。从物理意义上讲,将 AM 从全局上与载波解耦可能没有意义——例如,考虑在 AM 为零的右侧绘图向边缘或正中心发生的情况;振荡“跳跃”,改变了基本周期的“平均频率”。左边的情况显示更多的峰值,再次每个极性翻转。您可以在此处找到更多详细信息。

此外,即使在“表现良好”的区域(远离 AM 零点),您也会发现橙色的周期稍多一些;然后它可能会因用途而异,但在幅度去耦框架中,这反映为略高的载波频率,再次比傅立叶更合理。最后,可以说两者都没有处理此案fmfc在辨别什么是“载体”与“调制器”方面做得很好。


关于声音:为了预测我们如何听到AM 波形,傅里叶分解确实是合适的,因为听觉处理是通过固定幅度正弦分解(尽管并非总是如此)准确建模的,而幅度解耦分解将不适用。


Re: period基本周期可能存在差异T,但两者仍将共享一个非基本期。换句话说,预期的周期性并不一定会消失,而是由于 AM 向其中一个信号而不是另一个信号引入了一个较小的周期。这又可以从 AM 极性来理解。

注意我说的是“可能”;我的虚拟示例显示了两者如何共享基本周期,但这在 OP 的示例中不会发生。如果我们设置fm=100,这一点得到证实。Olli 的回答公平地展示了如何从 FT 预测精确的周期性。