📅  最后修改于: 2023-12-03 15:26:51.311000             🧑  作者: Mango
本项目是一个基于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
为载波角频率。
本程序主要实现以下功能:
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
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库实现了信号的可视化。该程序可用于演示单边带抑制载波调制技术,有助于学习和理解相关内容。