lax911 发表于 2006-9-13 17:28

小波变换和神经网络用于调制识别的问题!

大家好,如题所示我是用小波变换和神经网络做数字信号调制识别的。有没有做这方面的朋友,大家一起讨论讨论。涉及中值滤波和特征提取的编程有点问题,如有人熟悉请不吝赐教。在此先谢谢了!

happy 发表于 2006-9-14 17:55

一个调制识别程序

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
=dmod(jidai,Fc,Fd,,'psk',M); %用PSK方式调制无噪声,频率之差为60kHz
%axis();
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=;%将特征参数整合成网络输入矩阵
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=;%将特征参数整合成网络输入矩阵
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=;%将特征参数整合成网络输入矩阵
save psk2_20_ANN_input psk2_20;

epicure 发表于 2007-3-5 10:35

我使用dmod 函数
怎么老是报错说jidaiis outside range
是怎么回事呀

liuguo93 发表于 2007-3-5 17:51

回复 #2 happy 的帖子

happy兄,你真是高手啊
怎么和你单独交谈啊
你有QQ能不能够告诉一下兄弟啊
呵呵,仰望高手
没有办法啊:hug: :lol :lol :victory:

eight 发表于 2007-3-5 23:58

原帖由 liuguo93 于 2007-3-5 17:51 发表
happy兄,你真是高手啊
怎么和你单独交谈啊
你有QQ能不能够告诉一下兄弟啊
呵呵,仰望高手
没有办法啊:hug: :lol :lol :victory:


你看看happy的签名档吧

menghuanhuan 发表于 2007-7-10 16:43

请教2psk相位问题

谢谢happy兄的程序啊,对我很有帮助。
只是这个程序得到的2psk的去卷叠去线性分量后的相位是随着采样点数不断增大的,我想得到很多论文中说2psk的0,pi相位,也就是下图所示的这种:
上图也是经过去卷叠去线性分量后的相位,请大家指教指教啊!怎么得到0和pi的啊?
happy兄最近不能上网啊,好遗憾。请大家赐教啊!谢谢了
页: [1]
查看完整版本: 小波变换和神经网络用于调制识别的问题!