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

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

模拟通信-SSBSC调制

在模拟通信中,单边带抑制载波调制(SSBSC)是一种常见的调制方式。它在传输过程中只传输两个中的一个单边的频域信号,与其它基带调制方式相比,减少了功率的浪费并提高了带宽利用率。

SSBSC调制原理

SSBSC调制的基本原理就是将信号频谱向高频或低频移动,从而使信号仅留下其中一边的频谱成分。具体的实现方法就是通过滤波器将上/下边带信号滤除,同时将其变换到另外一侧,在带通滤波器进行滤波,最后相加即可得到调制后的信号。

SSBSC调制的优势

与全频带传输相比,SSBSC调制具有以下优点:

  • 减少功率浪费。全频带传输方式需要同时传输所有频带信号,但实际上只需要其中的一边,SSBSC调制能够减少功率浪费,节约能源。
  • 提高带宽利用率。频谱的利用高度决定带宽利用率,当利用高时能够提高带宽利用率。
  • 减少ISI的影响。ISI( Inter-Symbol Interference)即符号间干扰,是由于相邻符号的时域重叠而产生的。如果用全频带传输,则可能产生更多的iSi,各个频带之间的信号相互干扰,从而引起误码率的上升。
SSBSC调制的实现
  • MATLAB 实现
% 针对SIMULINK 绘制的方形波 sine* (2/π)
Ts=0.00001;
fm=1000;
fc=50000;
N=128*1024;
t=(0:N-1)*Ts;
sine=sin(2*pi*fm*t); 
figure;
subplot(3,1,1);
plot(t,sine);

endT=(N-1)*Ts;
f=[-1/Ts/2:1/(endT):1/Ts/2];
ff=sine*ones(1,length(f));
subplot(3,1,2);
plot(f,abs(fftshift(fft(ff)))) % 画出原来的信号

c_0=cos(2*pi*fc*t); 
subplot(3,1,3);
plot(f,abs(fftshift(fft(c_0)))) %画出载波信号,信号置于50000hz处

% SSBSC调制
c_1=sine.*cos(2*pi*fc*t)-hilbert(sine).*sin(2*pi*fc*t); 
figure;
subplot(2,1,1);
plot(f,abs(fftshift(fft(c_1)))) %画出SSBSC调制后的信号
subplot(2,1,2);
plot(t,c_1); %时域图

% 解调过程
sine_est_dark = -c_1.*cos(2*pi*fc*t)+hilbert(c_1).*sin(2*pi*fc*t);
figure;
subplot(2,1,1);
plot(f,abs(fftshift(fft(sine_est_dark))));
subplot(2,1,2);
plot(t,sine_est_dark);
  • Python 实现
import numpy as np
import matplotlib.pyplot as plt

# 生成方形波
Ts = 0.00001
fm = 1000
fc = 50000
N = 128 * 1024
t = np.arange(N) * Ts
sine = np.sin(2 * np.pi * fm * t)  # 方形波
plt.figure()
plt.subplot(3, 1, 1)
plt.plot(t, sine)

# 绘制原信号频谱
endT = (N - 1) * Ts
f = np.arange(-1 / Ts / 2, 1 / Ts / 2, 1 / endT)
ff = sine * np.ones(len(f))
plt.subplot(3, 1, 2)
plt.plot(f, np.abs(np.fft.fftshift(np.fft.fft(ff))), lw=1)

# 绘制载波频谱图
c_0 = np.cos(2 * np.pi * fc * t)
plt.subplot(3, 1, 3)
plt.plot(f, np.abs(np.fft.fftshift(np.fft.fft(c_0))), lw=1, color="green")

# SSBSC调制
c_1 = sine * np.cos(2 * np.pi * fc * t) - np.imag(np.fft.fft(np.fft.fft(sine, N) * np.exp(1j * np.pi / 2)))
                    * np.sin(2 * np.pi * fc * t)

# 绘制调制后的频谱图
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(f, np.abs(np.fft.fftshift(np.fft.fft(c_1))), lw=1, color="blue")

# 绘制时域图
plt.subplot(2, 1, 2)
plt.plot(t, c_1, lw=1, color="red")

# 解调过程
sine_est_dark = -c_1 * np.cos(2 * np.pi * fc * t) + np.imag(np.fft.fft(np.fft.fft(c_1, N)
                                                                        * np.exp(-1j * np.pi / 2))) * np.sin(
    2 * np.pi * fc * t)

# 绘制解调后的频谱图
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(f, np.abs(np.fft.fftshift(np.fft.fft(sine_est_dark))), lw=1, color="brown")

# 绘制时域图
plt.subplot(2, 1, 2)
plt.plot(t, sine_est_dark, lw=1, color="purple")

通过以上代码实现,可以更深入地理解SSBSC调制的原理,如图所示:

总结

SSBSC调制通过只传送其中的一边频率信息,减少了功率的浪费并提高了带宽利用率,同时还能降低ISI的影响。无论是MATLAB还是Python,都可以轻松实现SSBSC调制。