一个调制识别程序
- clear;
- close all;
- echo on;
- %在调制采样信号上加载噪声
- M=2; %进行M元调制,M定为2
- Fc=150000; %载波频率定为150kHz
- Fd=50000; %解调后数字信号速率为50kHz
- Fs=1200000;%模拟信号采样速率设定为1200kHz
- pause;
- jidai=randint(1,30000),%用randint(m,n)函数产生随机消息序列,作为基带信号
- pause
- [pskzerodb,t]=dmod(jidai,Fc,Fd,[Fs,0],'psk',M); %用PSK方式调制无噪声,频率之差为60kHz
- %axis([0 0.5 0 2]);
- subplot(4,1,1);
- plot(t,pskzerodb);
- title('2PSK调制波形');xlabel('时间t');ylabel('幅度');
- pause
- psktendb=awgn(pskzerodb,10);%PSK SNR=10db
- subplot(4,1,2);plot(t,psktendb);
- title('2PSK调制波形,SNR=10dB');xlabel('时间t');ylabel('幅度');
- pause
- psktendb=awgn(pskzerodb,5);%PSK SNR=5db
- subplot(4,1,3);plot(t,psktendb);
- title('2PSK调制波形,SNR=5dB');xlabel('时间t');ylabel('幅度');
- pause
- psktwentydb=awgn(pskzerodb,20);%PSK SNR=20db
- subplot(4,1,4);plot(t,psktwentydb);
- title('2PSK调制波形,SNR=20dB');xlabel('时间t');ylabel('幅度');
- save pskdata0 pskzerodb;
- save pskdata10 psktendb;
- save pskdata20 psktwentydb;
- pause
- ns=length(pskzerodb),
- %每组样点个数*样本数=样点总数 每组样点数与样本数必须为整数
- N=input('每组样点个数N=')
- M=ns/N;
- pskdata=reshape(pskzerodb,N,M);
- for j=1:M
- data=(pskdata(:,j))';
- %求信号序列的希尔伯特变换
- hpsk=hilbert(data);%求信号序列的希尔伯特变换
- %求瞬时幅度
- a_amplitude=abs(hpsk);%瞬时幅度
- phi_phase=angle(hpsk);
- %求相位修正值
- c_k(1)=0;%修正相位初始值
- for i=2:N
- if phi_phase(i)-phi_phase(i-1)>pi
- c_k(i)=c_k(i-1)-2*pi;
- elseif phi_phase(i)-phi_phase(i-1)<-pi
- c_k(i)=c_k(i-1)+2*pi;
- else c_k(i)=c_k(i-1);
- end
- end
- c_k;
- %去卷叠相位
- phi_uw_phase=phi_phase+c_k;%去卷叠相位
- %去相位线性分量后真正的瞬时相位
- phi_NL_phase=phi_uw_phase-2*pi*(1:N)*Fc/Fs;%去相位线性分量后真正的瞬时相位
- %求瞬时频率
- f_frequency=Fs/(2*pi)*diff(phi_NL_phase);%瞬时频率
- %求gamma_max归一化瞬时幅度的最大值
- m_a=mean(a_amplitude);%求瞬时幅度的平均值
- a_n=a_amplitude/m_a;
- a_cn=a_n-1;%求归一化中心瞬时幅度
- gamma_max=max((abs(fft(a_cn))).^2)/N;%求gamma_max归一化瞬时幅度的最大值
- gamma_max_data(j)=gamma_max;%存储gamma_max
- %求sigma_ap瞬时相位的中心非线性分量的绝对值的标准偏差
- feiweiruoquduan_phi_NL_phase=phi_NL_phase(find(a_n>1));%求非微弱区段即满足an>aopt=1(最佳归一化幅度门限值)对应的瞬时相位值
- sigma_ap=sqrt(mean(feiweiruoquduan_phi_NL_phase.^2)-(mean(abs(feiweiruoquduan_phi_NL_phase)))^2);%求sigma_ap瞬时相位的中心非线性分量的绝对值的标准偏差
- sigma_ap_data(j)=sigma_ap;%存储sigma_ap
- %求sigma_dp瞬时相位直接值的中心非线性分量的标准偏差
- sigma_dp=sqrt(mean(feiweiruoquduan_phi_NL_phase.^2)-(mean(feiweiruoquduan_phi_NL_phase))^2);%求sigma_dp瞬时相位直接值的中心非线性分量的标准偏差
- sigma_dp_data(j)=sigma_dp;%存储sigma_dp
- %求sigma_aa归一化中心瞬时幅度绝对值的标准偏差
- sigma_aa=sqrt(mean(a_cn.^2)-(mean(abs(a_cn)))^2);%求sigma_aa归一化中心瞬时幅度绝对值的标准偏差
- sigma_aa_data(j)=sigma_aa;%存储sigma_aa
- %求sigma_af归一化中心瞬时频率的绝对值的标准偏差
- m_f=mean(f_frequency);%求瞬时频率的平均值
- f_m=f_frequency-m_f;
- f_N=f_m/Fd;
- sigma_af=sqrt(mean(f_N.^2)-(mean(abs(f_N)))^2);%求sigma_af归一化中心瞬时频率的绝对值的标准偏差
- sigma_af_data(j)=sigma_af;%存储sigma_af
- end
- gamma_max_data;
- sigma_ap_data;
- sigma_dp_data;
- sigma_aa_data;
- sigma_af_data;
- save psk2_0_skfdata gamma_max_data sigma_ap_data sigma_dp_data sigma_aa_data sigma_af_data
- max=mean(gamma_max_data);
- ap=mean(sigma_ap_data);
- dp=mean(sigma_dp_data);
- aa=mean(sigma_aa_data);
- af=mean(sigma_af_data);
- save psk2_0_skfmean max ap dp aa af
- psk2_0=[gamma_max_data;sigma_ap_data;sigma_dp_data;sigma_aa_data;sigma_af_data];%将特征参数整合成网络输入矩阵
- save psk2_0_ANN_input psk2_0;
- clear
- close all
- load pskdata10
- ns=length(psktendb),
- N=1200
- M=ns/N;
- pskdata=reshape(psktendb,N,M);
- for j=1:M
- data=(pskdata(:,j))';
- %求信号序列的希尔伯特变换
- hpsk=hilbert(data);%求信号序列的希尔伯特变换
- %求瞬时幅度
- a_amplitude=abs(hpsk);%瞬时幅度
- phi_phase=angle(hpsk);
- %求相位修正值
- c_k(1)=0;%修正相位初始值
- for i=2:N
- if phi_phase(i)-phi_phase(i-1)>pi
- c_k(i)=c_k(i-1)-2*pi;
- elseif phi_phase(i)-phi_phase(i-1)<-pi
- c_k(i)=c_k(i-1)+2*pi;
- else c_k(i)=c_k(i-1);
- end
- end
- c_k;
- %去卷叠相位
- phi_uw_phase=phi_phase+c_k;%去卷叠相位
- %去相位线性分量后真正的瞬时相位
- phi_NL_phase=phi_uw_phase-2*pi*(1:N)*Fc/Fs;%去相位线性分量后真正的瞬时相位
- %求瞬时频率
- f_frequency=Fs/(2*pi)*diff(phi_NL_phase);%瞬时频率
- %求gamma_max归一化瞬时幅度的最大值
- m_a=mean(a_amplitude);%求瞬时幅度的平均值
- a_n=a_amplitude/m_a;
- a_cn=a_n-1;%求归一化中心瞬时幅度
- gamma_max=max((abs(fft(a_cn))).^2)/N;%求gamma_max归一化瞬时幅度的最大值
- gamma_max_data(j)=gamma_max;%存储gamma_max
- %求sigma_ap瞬时相位的中心非线性分量的绝对值的标准偏差
- feiweiruoquduan_phi_NL_phase=phi_NL_phase(find(a_n>1));%求非微弱区段即满足an>aopt=1(最佳归一化幅度门限值)对应的瞬时相位值
- sigma_ap=sqrt(mean(feiweiruoquduan_phi_NL_phase.^2)-(mean(abs(feiweiruoquduan_phi_NL_phase)))^2);%求sigma_ap瞬时相位的中心非线性分量的绝对值的标准偏差
- sigma_ap_data(j)=sigma_ap;%存储sigma_ap
- %求sigma_dp瞬时相位直接值的中心非线性分量的标准偏差
- sigma_dp=sqrt(mean(feiweiruoquduan_phi_NL_phase.^2)-(mean(feiweiruoquduan_phi_NL_phase))^2);%求sigma_dp瞬时相位直接值的中心非线性分量的标准偏差
- sigma_dp_data(j)=sigma_dp;%存储sigma_dp
- %求sigma_aa归一化中心瞬时幅度绝对值的标准偏差
- sigma_aa=sqrt(mean(a_cn.^2)-(mean(abs(a_cn)))^2);%求sigma_aa归一化中心瞬时幅度绝对值的标准偏差
- sigma_aa_data(j)=sigma_aa;%存储sigma_aa
- %求sigma_af归一化中心瞬时频率的绝对值的标准偏差
- m_f=mean(f_frequency);%求瞬时频率的平均值
- f_m=f_frequency-m_f;
- f_N=f_m/Fd;
- sigma_af=sqrt(mean(f_N.^2)-(mean(abs(f_N)))^2);%求sigma_af归一化中心瞬时频率的绝对值的标准偏差
- sigma_af_data(j)=sigma_af;%存储sigma_af
- end
- gamma_max_data;
- sigma_ap_data;
- sigma_dp_data;
- sigma_aa_data;
- sigma_af_data;
- save psk2_10_skfdata gamma_max_data sigma_ap_data sigma_dp_data sigma_aa_data sigma_af_data
- max=mean(gamma_max_data);
- ap=mean(sigma_ap_data);
- dp=mean(sigma_dp_data);
- aa=mean(sigma_aa_data);
- af=mean(sigma_af_data);
- save psk2_10_skfmean max ap dp aa af
- psk2_10=[gamma_max_data;sigma_ap_data;sigma_dp_data;sigma_aa_data;sigma_af_data];%将特征参数整合成网络输入矩阵
- save psk2_10_ANN_input psk2_10;
- clear
- close all
- load pskdata20
- ns=length(psktwentydb),
- N=1200
- M=ns/N;
- pskdata=reshape(psktwentydb,N,M);
- for j=1:M
- data=(pskdata(:,j))';
- %求信号序列的希尔伯特变换
- hpsk=hilbert(data);%求信号序列的希尔伯特变换
- %求瞬时幅度
- a_amplitude=abs(hpsk);%瞬时幅度
- phi_phase=angle(hpsk);
- %求相位修正值
- c_k(1)=0;%修正相位初始值
- for i=2:N
- if phi_phase(i)-phi_phase(i-1)>pi
- c_k(i)=c_k(i-1)-2*pi;
- elseif phi_phase(i)-phi_phase(i-1)<-pi
- c_k(i)=c_k(i-1)+2*pi;
- else c_k(i)=c_k(i-1);
- end
- end
- c_k;
- %去卷叠相位
- phi_uw_phase=phi_phase+c_k;%去卷叠相位
- %去相位线性分量后真正的瞬时相位
- phi_NL_phase=phi_uw_phase-2*pi*(1:N)*Fc/Fs;%去相位线性分量后真正的瞬时相位
- %求瞬时频率
- f_frequency=Fs/(2*pi)*diff(phi_NL_phase);%瞬时频率
- %求gamma_max归一化瞬时幅度的最大值
- m_a=mean(a_amplitude);%求瞬时幅度的平均值
- a_n=a_amplitude/m_a;
- a_cn=a_n-1;%求归一化中心瞬时幅度
- gamma_max=max((abs(fft(a_cn))).^2)/N;%求gamma_max归一化瞬时幅度的最大值
- gamma_max_data(j)=gamma_max;%存储gamma_max
- %求sigma_ap瞬时相位的中心非线性分量的绝对值的标准偏差
- feiweiruoquduan_phi_NL_phase=phi_NL_phase(find(a_n>1));%求非微弱区段即满足an>aopt=1(最佳归一化幅度门限值)对应的瞬时相位值
- sigma_ap=sqrt(mean(feiweiruoquduan_phi_NL_phase.^2)-(mean(abs(feiweiruoquduan_phi_NL_phase)))^2);%求sigma_ap瞬时相位的中心非线性分量的绝对值的标准偏差
- sigma_ap_data(j)=sigma_ap;%存储sigma_ap
- %求sigma_dp瞬时相位直接值的中心非线性分量的标准偏差
- sigma_dp=sqrt(mean(feiweiruoquduan_phi_NL_phase.^2)-(mean(feiweiruoquduan_phi_NL_phase))^2);%求sigma_dp瞬时相位直接值的中心非线性分量的标准偏差
- sigma_dp_data(j)=sigma_dp;%存储sigma_dp
- %求sigma_aa归一化中心瞬时幅度绝对值的标准偏差
- sigma_aa=sqrt(mean(a_cn.^2)-(mean(abs(a_cn)))^2);%求sigma_aa归一化中心瞬时幅度绝对值的标准偏差
- sigma_aa_data(j)=sigma_aa;%存储sigma_aa
- %求sigma_af归一化中心瞬时频率的绝对值的标准偏差
- m_f=mean(f_frequency);%求瞬时频率的平均值
- f_m=f_frequency-m_f;
- f_N=f_m/Fd;
- sigma_af=sqrt(mean(f_N.^2)-(mean(abs(f_N)))^2);%求sigma_af归一化中心瞬时频率的绝对值的标准偏差
- sigma_af_data(j)=sigma_af;%存储sigma_af
- end
- gamma_max_data;
- sigma_ap_data;
- sigma_dp_data;
- sigma_aa_data;
- sigma_af_data;
- save psk2_20_skfdata gamma_max_data sigma_ap_data sigma_dp_data sigma_aa_data sigma_af_data
- max=mean(gamma_max_data);
- ap=mean(sigma_ap_data);
- dp=mean(sigma_dp_data);
- aa=mean(sigma_aa_data);
- af=mean(sigma_af_data);
- save psk2_20_skfmean max ap dp aa af
- psk2_20=[gamma_max_data;sigma_ap_data;sigma_dp_data;sigma_aa_data;sigma_af_data];%将特征参数整合成网络输入矩阵
- save psk2_20_ANN_input psk2_20;
复制代码 |