📜  模拟通信-SSBSC调制器(1)

📅  最后修改于: 2023-12-03 15:26:51.311000             🧑  作者: Mango

模拟通信-SSBSC调制器

简介

本项目是一个基于Python编写的SSBSC调制器模拟程序,用于演示单边带抑制载波调制技术。该程序可将一段音频信号进行SSBSC调制,并输出调制后的载波信号和解调后的音频信号。

原理

SSBSC调制是指在调制过程中只保留信号的一侧带,而另一侧带和载波被抑制调制掉。这种调制方式可以节省带宽并减小功率损耗。

SSBSC调制的公式为:

u_ssb(t)=u(t)cos(ω_c*t)-u*(t)sin(ω_c*t)

其中,u_ssb(t)为经过SSBSC调制后的信号,u(t)为原始音频信号,ω_c为载波角频率。

功能

本程序主要实现以下功能:

  1. 音频信号与载波信号的生成;
  2. SSBSC调制的实现;
  3. 调制信号的可视化输出;
  4. 载波解调和音频解调的实现;
  5. 解调后音频信号的可视化输出。
代码
音频信号生成
import numpy as np

def generate_audio_signal(fs, duration, freq):
    """
    生成指定时长和频率的正弦信号
    :param fs: 采样率
    :param duration: 信号时长
    :param freq: 信号频率
    :return: 时域正弦信号
    """
    t = np.arange(0, duration, 1.0 / fs)
    signal = np.sin(2 * np.pi * freq * t)
    return signal
载波信号生成
def generate_carrier_signal(fs, duration, fc):
    """
    生成指定时长和角频率的载波信号
    :param fs: 采样率
    :param duration: 信号时长
    :param fc: 载波角频率
    :return: 时域载波信号
    """
    t = np.arange(0, duration, 1.0 / fs)
    signal = np.cos(2 * np.pi * fc * t)
    return signal
SSBSC调制
def ssb_sc_modulate(audio_signal, fs, fc):
    """
    SSBSC调制
    :param audio_signal: 音频信号
    :param fs: 采样率
    :param fc: 载波角频率
    :return: 调制后的信号
    """
    t = np.arange(0, len(audio_signal) / fs, 1.0 / fs)
    carrier_signal = np.cos(2 * np.pi * fc * t)
    usb_signal = audio_signal * carrier_signal
    lsb_signal = audio_signal * (-carrier_signal)
    return usb_signal, lsb_signal
载波解调
def carrier_demodulate(modulated_signal, fs, fc):
    """
    载波解调
    :param modulated_signal: 调制后的信号
    :param fs: 采样率
    :param fc: 载波角频率
    :return: 解调后的信号
    """
    t = np.arange(0, len(modulated_signal) / fs, 1.0 / fs)
    carrier_signal = np.cos(2 * np.pi * fc * t)
    demodulated_signal = modulated_signal * carrier_signal
    return demodulated_signal
音频解调
from scipy.fft import hilbert

def audio_demodulate(modulated_signal, fs, fc):
    """
    音频解调
    :param modulated_signal: 调制后的信号
    :param fs: 采样率
    :param fc: 载波角频率
    :return: 解调后的信号
    """
    t = np.arange(0, len(modulated_signal) / fs, 1.0 / fs)
    carrier_signal = np.exp(-1j * 2 * np.pi * fc * t)
    hilbert_transform = hilbert(modulated_signal) * carrier_signal
    demodulated_signal = np.imag(hilbert_transform)
    return demodulated_signal
可视化

程序中使用matplotlib库实现信号的可视化,以下是示例代码:

import matplotlib.pyplot as plt

def visualize_signal(signal, title):
    """
    可视化信号
    :param signal: 待可视化的信号
    :param title: 标题
    """
    plt.figure()
    plt.title(title)
    plt.plot(signal)
    plt.xlabel("Time(s)")
    plt.ylabel("Amplitude")
    plt.show()
总结

本项目是一个基于Python实现的SSBSC调制器模拟程序,实现了载波信号、音频信号的生成以及SSBSC调制、载波解调、音频解调等功能,并通过matplotlib库实现了信号的可视化。该程序可用于演示单边带抑制载波调制技术,有助于学习和理解相关内容。