第【73】期--基于FHSS跳频扩频系统的不同调制方式性能对比--MATLAB完整代码
文章目录
- 摘要
- 1. 引言
- 2. 系统理论基础
- 2.1 跳频扩频通信原理
- 2.2 卷积编码与维特比译码
- 2.3 数字调制技术
- 2.3.1 二进制相移键控(BPSK)
- 2.3.2 四相相移键控(QPSK)与偏移QPSK(OQPSK)
- 2.3.3 频移键控(FSK)
- 2.3.4 正交幅度调制(QAM)
- 2.4 脉冲成型与采样
- 3 仿真设计
- 3.1 仿真流程图
- 3.2 仿真结果
- 3.3 完整代码
- 4 总结
摘要
跳频扩频(FHSS)技术因其抗干扰和保密性在通信领域应用广泛。本文基于MATLAB构建FHSS系统仿真模型,采用码率2/3卷积编码、IP帧结构,在高斯白噪声信道下对比FSK、BPSK、QPSK、OQPSK、16QAM和64QAM六种调制方式的误码率性能。仿真结果表明,低阶调制具有更好抗噪声性能,高阶调制牺牲抗干扰能力换取更高频谱效率。
1. 引言
跳频扩频技术通过载波频率的伪随机跳变,有效抵抗窄带干扰和频率选择性衰落,具有良好的保密性和多址接入能力。调制技术直接决定系统的频谱效率、功率效率和抗干扰能力,不同调制方式在不同信道条件下表现各异。因此,在FHSS系统中研究调制方式选择具有重要意义。
本文通过MATLAB仿真,系统对比常用调制方式在FHSS系统中的BER和PER性能,分析调制阶数对系统性能的影响。
2. 系统理论基础
2.1 跳频扩频通信原理
2.2 卷积编码与维特比译码
2.3 数字调制技术
调制是将基带信号搬移到射频载波上的过程,不同调制方式在频谱效率、功率效率和抗噪声性能方面存在显著差异。
2.3.1 二进制相移键控(BPSK)
2.3.2 四相相移键控(QPSK)与偏移QPSK(OQPSK)
2.3.3 频移键控(FSK)
2.3.4 正交幅度调制(QAM)
2.4 脉冲成型与采样
3 仿真设计
3.1 仿真流程图
3.2 仿真结果
3.3 完整代码
%%FHSS系统-不同调制方式性能对比%固定参数:卷积码码率2/3,高斯白噪声信道,无干扰 clc;clear;close all;tic;%%公共参数 CodeType='卷积码';codeRate=2/3;constrain_len=8;%卷积码约束长度 puncpat=[1,1,1,0];%2/3码率删余模式%所有调制方式列表 ModulationList={'FSK','GMSK','BPSK','QPSK','OQPSK','16QAM','64QAM'};numMod=length(ModulationList);%固定信道、干扰 ChannelType='高斯白噪声信道';Jam_type='None';%无干扰%系统参数 Ts=0.01;N=2400;Rs=N/Ts;fc=Rs*30;freqSep=10*Rs;numPkts=100;%每信噪比点仿真包数(减小以加快速度) SINR_dB=-2:2:20;%帧结构固定为IP FrameType='IP';Frame=2;%IP帧%跳频参数 fh_seq=[fc-4*Rs,fc-2*Rs,fc,fc+2*Rs,fc+4*Rs];freqLen=length(fh_seq);%采样参数 up_sample_fs=100;fs=Rs*up_sample_fs;dt_fs=1/fs;%IP帧固定字段(用于组帧) ip_frame_version=[0100];ip_frame_IHL=[0101];ip_frame_tos=[01000000];ip_frame_len=[0000000000000101];ip_frame_id=[0100101011001101];ip_frame_flag=[001];ip_frame_offest=[0000000000000];ip_frame_TTL=[00100000];ip_frame_protocol=[00000001];ip_frame_checksum=[0000000000000000];ip_frame_src=[1100000010101000...0000000000100111];ip_frame_dst=[0111110001111111...1100111100001111];len_ip=length(ip_frame_version)+length(ip_frame_IHL)+length(ip_frame_tos)+length(ip_frame_len)+...length(ip_frame_id)+length(ip_frame_flag)+length(ip_frame_offest)+length(ip_frame_TTL)+...length(ip_frame_protocol)+length(ip_frame_checksum)+length(ip_frame_src)+length(ip_frame_dst);%存储结果 BER_all=zeros(numMod,length(SINR_dB));PER_all=zeros(numMod,length(SINR_dB));%%对不同调制方式循环formodIdx=1:numMod ModulationType=ModulationList{modIdx};modeTypeList={'FSK','GMSK','BPSK','QPSK','OQPSK','16QAM','64QAM'};Mode=find(ismember(modeTypeList,ModulationType)==1);%设置调制阶数和每符号比特数switchModecase1%FSK M=2;K=log2(M);SamplesPerSymbol=2;case2%GMSK M=2;K=log2(M);SamplesPerSymbol=2;case3%BPSK M=2;K=log2(M);SamplesPerSymbol=2;case4%QPSK M=4;K=log2(M);SamplesPerSymbol=2;case5%OQPSK M=4;K=1;%OQPSK特殊处理 SamplesPerSymbol=2;case6%16QAM M=16;K=log2(M);SamplesPerSymbol=2;case7%64QAM M=64;K=log2(M);SamplesPerSymbol=2;otherwiseerror('不支持的调制方式');end%每包比特数 numBits=N*K*codeRate;numBits_data=numBits-len_ip;%确保数据比特数为正ifnumBits_data<=0error('数据比特数为负,请检查参数设置!');end%初始化误码统计 erTot=zeros(1,length(SINR_dB));totPktEr=zeros(1,length(SINR_dB));forii=1:length(SINR_dB)fprintf('调制方式:%s,SINR=%d dB,仿真包数:%d\n',ModulationType,SINR_dB(ii),numPkts);SINR_de=10^(SINR_dB(ii)/10);nBitErr=zeros(1,numPkts);forpktX=1:numPkts%生成数据比特 bit_source_sequence=randi([01],numBits_data,1);%IP组帧 ip_frame_lenz1=dec2bin(numBits_data+5,16);ip_frame_lenz=double(boolean(ip_frame_lenz1-'0'));ip_frame_data=bit_source_sequence';%计算IP首部校验和 ip_sum=0;ip_frame1=[ip_frame_version ip_frame_IHL ip_frame_tos ip_frame_lenz ip_frame_id ip_frame_flag...ip_frame_offest ip_frame_TTL ip_frame_protocol ip_frame_checksum ip_frame_src ip_frame_dst];forcounti=1:(len_ip/16)ip_pian1=ip_frame1(1,1+16*(counti-1):16*counti);ip_zhong=num2str(ip_pian1);ip_zhuan1=bin2dec(ip_zhong);ip_sum=ip_sum+ip_zhuan1;end ip_sumz=dec2bin(ip_sum,20);ip_frame_checksumz1=double(boolean(ip_sumz-'0'));ip_frame_checksumz2=~ip_frame_checksumz1;ip_frame_chz1=ip_frame_checksumz2(1,5:end);ip_frame_chz2=ip_frame_checksumz2(1,1:4);ip_frame_ce1=bin2dec(num2str(ip_frame_chz1))+bin2dec(num2str(ip_frame_chz2));ip_frame_ce2=dec2bin(ip_frame_ce1,16);ip_frame_checksumz=double(boolean(ip_frame_ce2-'0'));bit_frame_sequence=[ip_frame_version ip_frame_IHL ip_frame_tos ip_frame_lenz...ip_frame_id ip_frame_flag ip_frame_offest ip_frame_TTL ip_frame_protocol...ip_frame_checksumz ip_frame_src ip_frame_dst ip_frame_data]';%卷积编码[bit_code_sequence,trel,tblen]=conven(bit_frame_sequence,puncpat,constrain_len);%调制[modSignal,hMod]=Modulation(bit_code_sequence,Mode,M,SamplesPerSymbol,fs,freqSep);s2=reshape(modSignal,1,length(modSignal));Signal_mean_power=mean(abs(s2).^2);%脉冲成型(矩形) up_sample_fs_temp=up_sample_fs;data_transmit_upsample=rectpulse(s2,up_sample_fs_temp);%生成对应长度的时间序列 len_signal=length(data_transmit_upsample);t_fs=(0:len_signal-1)/fs;%根据信号长度生成时间序列%跳频载波调制 fh_index=randi([1,freqLen],1,1);fc_current_Pkt=fh_seq(fh_index);data_transmit_RF=data_transmit_upsample.*exp(1i*2*pi*fc_current_Pkt*t_fs);%信道(AWGN) data_transmit=data_transmit_RF;Signal_mean_power_channel=mean(abs(data_transmit).^2);%干扰(无) Jam_signal=0;%噪声 NoisePower=Signal_mean_power_channel/SINR_de;noise_seq=sqrt(NoisePower/2)*(randn(1,length(data_transmit))+1i*randn(1,length(data_transmit)));y_channel_all=data_transmit+Jam_signal+noise_seq;%下变频(使用相同的时间序列) data_receiver=y_channel_all.*exp(-1i*2*pi*fc_current_Pkt*t_fs);%下采样 data_receiver_ds=downsample(data_receiver,up_sample_fs_temp,up_sample_fs_temp/2);data_receiver_ds=reshape(data_receiver_ds,length(data_receiver_ds),1);%解调[bit_Demodulated,hDemod]=Demodulation(data_receiver_ds,Mode,M,SamplesPerSymbol,fs,freqSep);%Viterbi译码 bit_decode=vitdec(bit_Demodulated,trel,tblen,'trunc','hard',puncpat);%误比特统计(去除帧尾16位校验和) minLen=min(length(bit_decode),length(bit_frame_sequence));ifminLen>16nBitErr(pktX)=sum(bit_decode(1:minLen-16)~=bit_frame_sequence(1:minLen-16));elsenBitErr(pktX)=0;end enderTot(ii)=sum(nBitErr);totPktEr(ii)=sum(nBitErr>0);endBER_all(modIdx,:)=erTot/(numBits*numPkts);PER_all(modIdx,:)=totPktEr/numPkts;end%%绘图-BER figure;semilogy(SINR_dB,BER_all(1,:),'r-o','LineWidth',2,'MarkerSize',8);hold on;semilogy(SINR_dB,BER_all(3,:),'b-^','LineWidth',2,'MarkerSize',8);semilogy(SINR_dB,BER_all(4,:),'m-d','LineWidth',2,'MarkerSize',8);semilogy(SINR_dB,BER_all(5,:),'y-p','LineWidth',2,'MarkerSize',8);semilogy(SINR_dB,BER_all(6,:),'k-h','LineWidth',2,'MarkerSize',8);semilogy(SINR_dB,BER_all(7,:),'g--*','LineWidth',2,'MarkerSize',8);grid on;box on;xlabel('SINR (dB)');ylabel('Bit Error Rate');legend('FSK','BPSK','QPSK','OQPSK','16QAM','64QAM','Location','southwest');title('不同调制方式下的BER性能对比(卷积码2/3,AWGN,无干扰)');4 总结
本文通过MATLAB仿真,系统研究了跳频扩频(FHSS)通信系统中不同数字调制方式的性能。结果表明,在相同信道条件下,低阶调制(如BPSK、QPSK)凭借其简单的星座图结构展现出更强的抗噪声能力和更低的误码率,但频谱效率较低;而高阶调制(如16QAM、64QAM)虽然能显著提升频谱效率,但其抗干扰性能会相应下降。因此,在实际FHSS系统设计中,需要在抗干扰能力与频谱效率之间进行权衡,根据具体的应用场景和信道条件选择合适的调制方式。
往期仿真代码可见往期文章文末VX公众号(包含往期博客所有代码),所见即所得
