用MATLAB复现DSSS+8PSK通信系统:从扩频码生成到误码率曲线对比(附完整代码)
用MATLAB复现DSSS+8PSK通信系统:从扩频码生成到误码率曲线对比(附完整代码)
在无线通信领域,直接序列扩频(DSSS)技术因其优异的抗干扰性能和隐蔽性,被广泛应用于军事通信、卫星导航和民用无线系统中。而8PSK调制则是一种高效的相位调制方式,能够在有限带宽内传输更多信息。本文将带你从零开始,用MATLAB完整实现一个DSSS+8PSK通信系统仿真,包括扩频码生成、信号调制、信道传输和解调全过程,最后通过误码率曲线验证系统性能。
1. 系统架构与参数配置
一个完整的DSSS+8PSK通信系统包含以下几个关键模块:
- 信源模块:生成随机二进制数据
- 扩频模块:使用m序列对信号进行频谱扩展
- 调制模块:采用8PSK方式调制扩频后的信号
- 信道模块:模拟AWGN信道特性
- 解调模块:包括匹配滤波、解扩和8PSK解调
首先我们需要设置系统的基本参数:
% 系统参数配置 sps = 8; % 每个符号的采样点数 Symbols = 6000; % 总仿真符号数 spread_factor = 64; % 扩频码长度 Ts = 100; % 码元持续时间(us) Rs = 1/Ts; % 码元速率(MHz) Rc = spread_factor*Rs; % 码片速率(MHz) fc = 2.5*Rc; % 载波频率(MHz) roll_off = 0.25; % 根升余弦滤波器滚降系数 span = 8; % 滤波器截断符号数注意:扩频因子(spread_factor)的选择直接影响系统处理增益和抗干扰能力,通常取2的整数次幂以便于硬件实现。
2. 扩频码生成与信号处理
2.1 m序列生成
m序列是最常用的伪随机序列之一,具有良好的自相关特性。我们使用三级移位寄存器生成周期为63的m序列:
% m序列生成(双极性) X1 = 0; X2 = 0; X3 = 1; % 初始状态 for i = 1:spread_factor Y3 = X3; Y2 = X2; Y1 = X1; X3 = Y2; X2 = Y1; X1 = xor(Y3, Y1); % 反馈逻辑 L(i) = Y1; end m = 1 - 2*L; % 转换为双极性序列(-1,+1) m = m'; % 转置为列向量m序列的特性直接影响系统性能,我们可以通过计算其自相关函数来验证:
% m序列自相关函数计算 [corr_seq, lags] = xcorr(m); figure; stem(lags, corr_seq/spread_factor); title('m序列归一化自相关函数'); xlabel('延迟'); ylabel('相关系数');2.2 数据扩频处理
扩频过程实质上是将每个信息符号与完整的m序列相乘,从而将信号能量分散到更宽的频带上:
% 生成随机二进制数据 data = randi([0 1], 1, Symbols); % 8PSK调制准备 tx_data2 = reshape(data, 3, [])'; % 每3比特一组 tx_data10 = bi2de(tx_data2); % 二进制转十进制 data_8psk = pskmod(tx_data10, 8, 0, 'gray'); % 8PSK调制 % 扩频处理 spread_signal = kron(data_8psk, m); % 每个符号扩展64倍扩频前后的信号频谱对比如下:
| 参数 | 原始信号 | 扩频后信号 |
|---|---|---|
| 带宽 | Rs Hz | Rc Hz |
| 功率谱密度 | 高 | 低 |
| 抗窄带干扰能力 | 弱 | 强 |
3. 脉冲成型与载波调制
3.1 根升余弦滤波器设计
为了消除码间干扰(ISI),我们需要设计合适的脉冲成型滤波器:
% 根升余弦滤波器设计 fir_rcos_trans = rcosdesign(roll_off, span, sps, 'sqrt'); % 上采样和脉冲成型 data_upsample = upsample(spread_signal, sps); rcos_data_upsample = conv(data_upsample, fir_rcos_trans, 'same');滤波器特性可以通过频响分析验证:
% 滤波器频率响应分析 [h, w] = freqz(fir_rcos_trans); figure; plot(w/pi, 20*log10(abs(h))); title('根升余弦滤波器频率响应'); xlabel('归一化频率(\pi rad/sample)'); ylabel('幅度(dB)'); grid on;3.2 载波调制实现
8PSK信号需要采用正交调制方式加载到载波上:
% 载波生成 t = (0:length(rcos_data_upsample)-1)/sps; carrier_I = cos(2*pi*fc*t).'; % I路载波 carrier_Q = -sin(2*pi*fc*t).'; % Q路载波 % 正交调制 tx_data_I = real(rcos_data_upsample) .* carrier_I; tx_data_Q = imag(rcos_data_upsample) .* carrier_Q; tx_data = tx_data_I + tx_data_Q; % 合成调制信号调制后的信号可以通过星座图观察:
% 8PSK星座图显示 scatterplot(data_8psk); title('8PSK调制星座图');4. 信道传输与接收处理
4.1 AWGN信道模拟
我们通过设置不同的信噪比来模拟信道条件:
snr = -30:-5; % 信噪比范围(dB) % 计算Es/N0和Eb/N0 EsN0 = snr + 10*log10(0.5*sps) + 10*log10(spread_factor); EbN0 = snr + 10*log10(0.5*sps) - 10*log10(3) + 10*log10(spread_factor); bit_error_ratio = zeros(size(snr)); % 预分配误码率数组4.2 接收端信号处理流程
接收端需要完成载波解调、匹配滤波、解扩和8PSK解调等一系列操作:
for i = 1:length(snr) % 通过AWGN信道 rx_signal = awgn(tx_data, snr(i), 'measured', 'dB'); % 载波解调 rx_data_I = rx_signal .* carrier_I; rx_data_Q = rx_signal .* carrier_Q; rx_data = rx_data_I + 1i*rx_data_Q; % 匹配滤波 y_demod_MF = conv(rx_data, fir_rcos_trans, 'same'); % 下采样 m_rx_data = y_demod_MF(1:sps:end); % 解扩处理 despread_signal = reshape(m_rx_data, spread_factor, []); despread_signal1 = sum(despread_signal .* m).'; % 8PSK解调 demodulated_signal = pskdemod(despread_signal1, 8, 0, 'gray'); % 误码率计算 data_bin = de2bi(tx_data10); data_in = reshape(data_bin, Symbols, 1); demodulated_bit = de2bi(demodulated_signal); data_out = reshape(demodulated_bit, Symbols, 1); error = sum(data_out ~= data_in); bit_error_ratio(i) = error / length(data_in); end5. 性能分析与结果对比
5.1 误码率曲线绘制
将仿真结果与理论值对比,验证系统性能:
% 理论误码率计算 ber_8psk = berawgn(EbN0, 'psk', 8, 'nondiff'); % 绘制误码率曲线 figure; semilogy(EbN0, bit_error_ratio, '-*', EsN0, bit_error_ratio, '-+', ... EbN0, ber_8psk, '-O', EsN0, ber_8psk, '-O'); legend('仿真EbN0', '仿真EsN0', '理论EbN0', '理论EsN0'); xlabel('EbNo(dB)'); ylabel('BER'); axis([-10, 20, 10e-5, 1]); title('DSSS+8PSK系统误码率性能'); grid on;5.2 关键性能指标
通过实验我们可以得到以下系统性能指标:
处理增益:
- 理论值:10log10(64) ≈ 18dB
- 实测值:通过比较扩频前后所需Eb/N0的差值获得
频谱效率:
- 8PSK理论频谱效率:3bps/Hz
- 扩频后实际频谱效率:3/64 ≈ 0.047bps/Hz
抗干扰容限:
- 系统能够容忍的干扰强度与扩频因子成正比
- 实测在Eb/N0=10dB时,BER可达10^-4量级
在实际调试过程中,我发现以下几个参数对系统性能影响显著:
- 扩频因子越大,抗干扰能力越强,但频谱效率越低
- 滚降系数影响信号带宽和码间干扰,0.25-0.35是常用范围
- 载波频率选择需要考虑采样定理和仿真效率的折中
