dpsk_jam.m

来自「DPSK信号调制解调干扰性能分析」· M 代码 · 共 137 行

M
137
字号
clc,clear
close all

% 数据采用 DPSK 调制


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%         参数设置           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ts = 0.001;          % 数据比特周期 (s)

fm = 5000;          % DPSK 信号载频中心频率
fs = 1/Ts;           % 数据传输速率
Bs = 2*fs;           % DPSK 信号带宽


t = 1;              % 仿真时间
fsample = 40000;   % 采样速率 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%         信号产生             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Data_len = floor(t/Ts);                                     % 用户数据长度
Data_diff = randsrc(Data_len,1,(0:1));                      % 用户数据的差分数据
Data = xor(Data_diff(1:end-1),Data_diff(2:end));            % 用户数据 
%%%%%%%%%%%%%%%%        MFSK 调制       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
St_baseband = DMOD(Data_diff,fm, fs, fsample,'psk', 2);         % PSK 调制信号
% figure, plot(St_baseband),title('DPSK基带信号');
signal_len = length(St_baseband);                           % 仿真时间内采样数据长度

N0 = 48;                                                                        % 发射滤波器阶数
tr_fir_coff = fir1(N0,[2*(fm-Bs)/fsample,2*(fm+Bs)/fsample]);                   % 滤波器系数
%%%%%%%%%%%%%%%%%%%    发射信号通过滤波器   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
St = zeros(signal_len,1);                    % 通过滤波器后的发射信号
for i = 1:N0/2
    St(i) = tr_fir_coff * [zeros(N0/2-i+1,1);St_baseband(1:N0/2+i)];
end
for i = (N0/2+1):(signal_len - N0/2)
    St(i) = tr_fir_coff * St_baseband(i-N0/2:N0/2+i);
end
for i = (signal_len - N0/2 + 1):signal_len
    St(i) = tr_fir_coff * [St_baseband(i-N0/2:signal_len);zeros(i+N0/2-signal_len,1)];
end
St = (St-mean(St))/std(St);                                   % 发射信号幅度归一化

figure
subplot(211),plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(St_baseband))),grid on,title('DPSK基带信号频谱');
subplot(212),plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(St))),grid on,title('发射信号频谱');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%        信道,噪声及干扰设置       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信道为自由空间传播信道 , 噪声为加性高斯白噪声
SNR = 10;                                    % 加性高斯白噪声信噪比dB
SJR = 0;                                    % 信干比 : 接收信号功率/干扰信号功率

snr = SNR - 10*log10(fsample/2/Bs);           % 折算为带内白噪声强度
Jam = zeros(signal_len,1);                  % 干扰信号
%%%%%%%%%%%%%%%%%%%    干扰信号产生   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Jam_type = 4;               % 1:单音干扰
                            % 2:多音干扰
                            % 3:噪声调频干扰
                            % 4:MFSK 干扰
                            % 其它:仅高斯白噪声干扰
                            

multi_sin_num = 4;                      % 多音干扰每信道干扰正弦波数
Jam_fm_band = Bs;                       % 噪声调频干扰带宽
Jam_M = 4;                              % MFSK 干扰进制数


switch Jam_type
    case 1          %%%%%%%%%%% 单音干扰 %%%%%%%%%%%%%%
        f_jam = fm + rand * Bs - Bs/2;
        Jam = (cos(2*pi*f_jam*(1:signal_len)/fsample+2*pi*rand))';
        Jam = mean(Jam,2);
        Jam = (Jam - mean(Jam))/std(Jam);
        figure,plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(Jam))),grid on,title('单音干扰信号频谱');
    case 2          %%%%%%%%%%% 多音干扰 %%%%%%%%%%%%%%     
        f_jam = fm + rand(multi_sin_num,1) * Bs - Bs/2;
        Jam = (cos(2*pi*f_jam*(1:signal_len)/fsample+2*pi*rand))';
        Jam = mean(Jam,2);
        Jam = (Jam - mean(Jam))/std(Jam);
        figure,plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(Jam))),grid on,title([num2str(multi_sin_num),'音干扰信号频谱']);
    case 3          %%%%%%%%%%% 噪声调频干扰 %%%%%%%%%%
        f_jam = rand(signal_len,1)*Jam_fm_band - Jam_fm_band/2;
        Jam = amod(f_jam,fm,fsample,'fm');
        Jam = (Jam - mean(Jam))/std(Jam);
        figure,plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(Jam))),grid on,title('噪声调频干扰信号频谱');
    case 4          %%%%%%%%%%%  MFSK 干扰   %%%%%%%%%%    
        Jam = DMOD(randsrc(Data_len,1,(0:Jam_M-1)),fm, fs, fsample,'fsk', Jam_M, fs);
        Jam = (Jam - mean(Jam))/std(Jam);
        figure,plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(Jam))),grid on,title([num2str(Jam_M),'FSK干扰信号频谱']);
    otherwise       %%%%%%%%%%%  无人为干扰  %%%%%%%%%%
        
end
Jam = Jam*10^(-SJR/20);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%         跳频信号接收             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%% 设接收系统与接收信号严格同步 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Rt = awgn(St,snr) + Jam;                              % 接收信号
figure
plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(Rt))),grid on,title('接收信号频谱');

%%%   接收参数设置
N1 = 48;                                            % 滤波器阶数
wide_fir_coff = fir1(N1,[2*(fm-Bs)/fsample,2*(fm+Bs)/fsample]);                % 接收机滤波器系数
%%%%%%%%%%%%%%%%%%%    接收信号通过宽带带通滤波器   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Rt_baseband = zeros(signal_len,1);                    % 通过滤波器后的信号
for i = 1:N1/2
    Rt_baseband(i) = wide_fir_coff * [zeros(N1/2-i+1,1);Rt(1:N1/2+i)];
end
for i = (N1/2+1):(signal_len - N1/2)
    Rt_baseband(i) = wide_fir_coff * Rt(i-N1/2:N1/2+i);
end
for i = (signal_len - N1/2 + 1):signal_len
    Rt_baseband(i) = wide_fir_coff * [Rt(i-N1/2:signal_len);zeros(i+N1/2-signal_len,1)];
end

figure
plot((0:signal_len-1)/(signal_len)*fsample,abs(fft(Rt_baseband))),grid on,title('接收信号滤波后频谱');
%%%%%%%%%%%%%%%%%%    DPSK 信号解调    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Rdata_diff = DDEMOD(Rt_baseband, fm, fs, fsample, 'psk/noncoherence',2);
Rdata = xor(Rdata_diff(1:end-1),Rdata_diff(2:end));                 % 接收数据
error = length(find(Data ~= Rdata))/length(Data)*100;               % 误码率
figure
subplot(311),plot(Data),grid on,title('发送数据');
subplot(312),plot(Rdata),grid on,title('接收数据');
subplot(313),plot(Data-Rdata),grid on,title(['误码率=',num2str(error),'%']);



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?