Advertisement

MATLAB仿真噪声信号、单多音信号、LFM、2ASK、2FSK、BPSK、16QAM

阅读量:

本文针对通信系统中的常见信号类型进行了仿真分析,涵盖了高斯白噪声、噪声调幅(NAM)、噪声调频(NFM)、单音信号、多音信号、线性扫频信号、2ASK信号、2FSK信号、BPSK信号和16QAM信号。通过MATLAB代码,对这些信号的生成原理、调制解调过程以及仿真结果进行了详细研究。高斯白噪声部分分析了其统计特性,噪声调幅和调频仿真展示了信号波形和频谱的变化。BPSK、2FSK、2ASK和16QAM信号分别通过调制与解调过程的仿真,验证了不同调制方式的特性。研究结果表明,这些信号在通信系统中具有不同的适用性,仿真结果为信号的优化设计提供了重要参考。

文章目录

背景段落:

  1. 高斯白噪声信号
  2. 调幅噪声信号
  3. 调频噪声信号
  4. 单音调制信号
  5. 多音调制信号
  6. 线性扫频调制信号
  7. 2进制_ask信号
  8. 2进制_fsk信号
  9. 脉冲_脉冲调相信号
  10. 16进制_qam信号
    缩略对照表

背景:

临近毕业时整理毕业论文相关资料,发现仿真中涉及的各种常见通信信号。由于部分网上的代码实现较为复杂,难以理解,此外仿真效果也不够理想。因此,将这些MATLAB仿真代码进行整理和总结,以便大家可以直接使用。在本文中,仿真涉及的信号类型包括:高斯白噪声、噪声调幅信号、噪声调频信号、单音信号、多音信号、扫频信号、2ASK信号、2FSK信号、BPSK信号、16QAM信号。仿真重点展示了时域波形和频谱特性,并对原始代码进行了注释说明,帮助读者更好地理解。

1、高斯白噪声

在研究通信系统的抗噪声性能时,由于通信系统中常见的热噪声通常近似为白噪声,且其取值恰好服从高斯分布,因此,高斯白噪声常被用作通信信道中的噪声模型。其中,噪声的统计均值为0,统计方差为1。高斯白噪声的幅值-频次统计直方图服从正态分布。通过仿真,我们获得了如图所示的实验结果:图1展示了高斯白噪声的时域波形,图2显示了归一化功率,图3则综合展示了统计信息和幅值,以验证高斯白噪声分布的特点。其中,程序最后两行计算了噪声的均值和方差,以验证其是否等于0和1。本次仿真中,计算得到的均值为5.3547e-4,接近于0;方差为0.9987,接近于1。

复制代码
    length = 1000000;
    ff = 0:length-1;
    noise = wgn(length,1,0);%生成100000*1个高斯白噪声,功率为0dBW(分贝瓦)
    y1 = fft(noise,length);%采样点个数100000个
    p1 = y1.*conj(y1);%conj()得到相应的复共轭数,y1.*conj(y1)就是模的平方
    max_P=max(p1);%求功率的最大值
    p1 =p1/(max_P);%除以最大值把功率谱归一化
    
    subplot(2,2,1),plot(ff,noise(1:length)),axis([0 (length) -5 5]),xlabel('时间(s)'),ylabel('幅值(V)'),title('高斯白噪声波形');
    subplot(2,2,2),plot(ff,p1(1:length)),axis([0 length 0 1]);xlabel('频率(Hz)');ylabel('功率');title('高斯白噪声归一化功率谱');
    set(gca,'YTick',0:1:1);%设置逻辑值坐标轴为0和1,这样子就不会出现0-0.1-0.2^0.8-0.9-1的坐标,影响美观
    subplot(2,2,3),hist(noise,40);axis([ -5 5 0 110000]);xlabel('幅值(V)');ylabel('频次');title('幅值-频次直方图');
    mean_value = mean(noise)%计算噪声的均值,理论上应该是0
    variance = var(noise)%计算噪声的方差,理论上应该为1,功率为0dBW(10*log1=0)
在这里插入图片描述
在这里插入图片描述

2、噪声调幅信号

噪声调幅信号是是利用噪声作为调制信号,对载波信号进行AM调制,使得载波信号的振幅随基带噪声做随机变化,这里的噪声使用了上面的高斯白噪声进行调制。其中这里的上包络和下包络只是噪声信号的变形,不是噪声调幅信号真正的包络,只是为了便于理解调幅信号的本质所构造的辅助曲线。
噪声调幅信号的公式为:J(t)=\left(U_{0}+U_{n}(t)\right) \cos \left(w_{j} t+\varphi\right),其中,U_{0}是载波振幅,w_{j}是载波角频率,U_{n}(t)是基带噪声,φ[0,2π]内均匀分布。
通过分析图中噪声信号和噪声调幅干扰信号的波形与功率谱,可以发现噪声调幅干扰信号具有以下特点:

噪声调幅干扰信号的功率谱由载波谱和对称旁瓣谱组成,其中载波谱主要反映了信号的载波成分,而对称旁瓣谱则表现出信号的调制特性。旁瓣谱的形状特征与基带噪声功率谱具有相似性,这表明信号的调制特性与噪声特性之间存在一定的关联。

  1. 噪声调幅干扰信号的带宽为基带噪声带宽的两倍
复制代码
    fj=20e6;fs=4*fj; Tr=520e-6;
    t1=0:1/fs:3*Tr-1/fs; N=length(t1);
    u=wgn(1,N,0);%生成N*1个高斯白噪声,功率为0dBW(分贝瓦)
    df1=fs/N;n=0:N/2;f=n*df1;
    wp=10e6;ws=14e6;rp=1; rs=60;
    [n1,wn1]=buttord(wp/(fs/2),ws/(fs/2),rp,rs);
    [b,a]=butter(n1,wn1);
    u1=filter(b,a,u);
    p=0.1503*mean((u1.^2));
    figure;subplot(2,2,1),plot(t1,u1),title('噪声信号波形'); axis([0,0.02e-4,-2,2]);xlabel('时间(s)');ylabel('幅度(V)');
    subplot(2,2,2), j2=fft(u1);plot(f,10*log10(abs(j2(n+1)*2/N)));xlabel('频率(Hz)');ylabel('功率(dBW)');axis([0,4e7,-70,0]);title( '噪声信号功率谱');
    u0=1;y=(u1+u0).*cos(2*pi*fj*t1+2);%噪声调幅信号的波形
    u2=u1+u0;%上包络的波形
    u3=-u0-u1;%下包络的波形
    subplot(2,2,3), plot(t1,y,t1,u2,t1,u3),title( '噪声调幅信号时域波形'); axis([0,0.02e-4,-2,2]);xlabel('时间(s)');ylabel('幅度(V)');
    subplot(2,2,4), J=fft(y);plot(f,10*log10(abs(J(n+1))));xlabel('频率(Hz)');ylabel('功率(dBW)');axis([0,4e7,-20,50]);title( '噪声调幅信号功率谱');
在这里插入图片描述

3、噪声调频信号

噪声调频信号是以噪声作为调制信号源,对载波信号实施FM调制,使得载波频率随基带噪声的随机变化而波动。其中,所使用的噪声同样来自上述的高斯白噪声。

复制代码
    uj=1;mf=2;wpp=10;
    fj=20e6;fs=8*fj;Tr=520e-6;
    t1=0:1/fs:3*Tr-1/fs;N=length(t1);
    u=wgn(1,N,0);
    wp=10e6;ws=16e6;rp=1;rs=60;
    [n1,wn1]=buttord(wp/(fs/2),ws/(fs/2),rp,rs);
    [b,a]=butter(n1,wn1);
    u1=filter(b,a,u);
    p=0.8503*mean((u1.^2)) ;
    fj=20e6;fs=8*fj;Tr=520e-6;bj=5e6;
    t1=0:1/fs:3*Tr-1/fs;N=length(t1);
    u=wgn(1,N,wpp);
    df1=fs/N;n=0:N/2;f=n*df1;
    wp=10e6;ws=14e6;rp=1;rs=60;
    [Nn,wn]=buttord(wp/(30e6/2),ws/(30e6/2),rp,rs);
    [b,a]=butter(Nn,wn);
    figure;subplot(2,2,1),plot(t1,u1),title('噪声信号波形');axis([0,2e-6,-2,2]);xlabel('时间(s)');ylabel('幅度(V)');
    subplot(2,2,2),j2=fft(u1); plot(f,10*log10(abs(j2(n+1)*2/N)));xlabel('频率(Hz)');ylabel('功率(dBW)');axis([0,4e7,-20,50]);title( '噪声信号功率谱');axis([0,4e7,-80,0]);
    i=1:N-1;ss=cumsum([0 u1(i)])
    ss=ss*Tr/N;
    y=uj*cos(2*pi*fj*t1+2*pi*mf*bj*ss*10);%uj=1 是输出的噪声调频信号的幅度  fj是调制信号中心频率是20M    增加调制指数*10 让波形明显
    subplot(2,2,3), plot(t1,y),title( '噪声调频信号波形'),axis([0,2e-6,-1.5,1.5]);xlabel('时间(s)');ylabel('幅度(V)');
    y=uj*cos(2*pi*fj*t1+2*pi*mf*bj*ss);%uj=1 是输出的噪声调频信号的幅度  fj是调制信号中心频率是20M  
    subplot(2,2,4),J=fft(y);plot(f,10*log10(abs(J(n+1))));axis([0,4e7,-20,60]);xlabel('频率(Hz)');ylabel('功率(dBW)');axis([0,4e7,-20,50]);title( '噪声调频信号功率谱')
在这里插入图片描述

4、单音信号

单音信号属于单一频率的正弦波。利用MATLAB进行仿真实验可以生成频率为1000Hz、幅值为1V的单音信号。单音信号的数学表达式为:J(t)=U_{j} \sin \left(2 \pi f_{j} t+\varphi\right)其中,U_{j}代表单音信号的振幅,f_{j}为单音信号的频率,\varphi是一个在区间[0,2π]内均匀分布的相位角。其频谱分析结果仅显示一个明确的频率分量,这表明单音信号在频域中具有单一的频率特征。

复制代码
    Fs=20000;  %采样频率
    N=20000;    %采样点
    n=0:N-1;t=n/Fs;  %时间序列
    fc=1000;  %载波信号频率 
    f=n*Fs/N;  %频率 
    Uc=1*sin(2*fc*pi*t);     %载波信号 
    C1=fft(Uc);             %对载波信号进行傅里叶变换 
    cxf=abs(C1);           %进行傅里叶变换  
    cxf=cxf/max(cxf);%归一化
    subplot(3,1,1);plot(t,Uc);title('载波信号波形');xlabel('时间(s)');ylabel('幅度(V)');title('单音干扰信号波形');axis([0 0.009 -1 1]);
    subplot(3,1,2); plot(f(1:N/2),cxf(1:N/2));title('载波信号频谱'); axis([0 2000 0 1]);xlabel('频率(Hz)');ylabel('功率');title('单音干扰信号归一化功率谱');
    set(gca,'YTick',0:1:1);%设置功率谱坐标轴只有0和1
在这里插入图片描述

5、多音信号

多音信号是由 L 个独立的正弦波叠加而成。通过MATLAB仿真的结果,生成了频率为940Hz、960Hz、980Hz、1000Hz、1020Hz、1040Hz、1060Hz的多音信号,其中 L 的值为7。多音信号的公式为:J(t)=\sum_{n=1}^{L} U_{j n} \sin \left(w_{n} t+\varphi_{n}\right),其中w_{n}=2 \pi\left(f_{j}+n \Delta f\right)f_{j}是多音起始频率,\Delta f是多音间隔频率,第n个正弦信号的频率为f_{j}+n \Delta f,因此,多音信号具有 L 根谱线。

复制代码
    Fs=200000;  %采样频率
    N=200000;    %采样点
    n=0:N-1;t=n/Fs;  %时间序列
    A0=1;  %信号振幅 
    fc=1000;  %信号中间频率 
    f=n*Fs/N;  %信号步进频率
    w0=2*fc*pi; 
    step=2*pi*50;
    Uc=A0*cos(w0*t)+A0*cos((w0+step)*t)++A0*cos((w0+2*step)*t)++A0*cos((w0+3*step)*t)+A0*cos((w0-step)*t)++A0*cos((w0-2*step)*t)++A0*cos((w0-3*step)*t);%多音信号 
    C1=fft(Uc);      %对信号进行傅里叶变换 
    cxf=abs(C1);     %求绝对值
    cxf=cxf/max(cxf);%归一化
    subplot(2,1,1);plot(t,Uc);xlabel('时间(s)');ylabel('幅度(V)');title('多音信号波形');axis([0 0.1 -8 8]);
    subplot(2,1,2);plot(f(1:N/2),cxf(1:N/2));title('载波信号频谱');axis([0 2000 0 1]);xlabel('频率(Hz)');ylabel('功率');title('多音信号归一化功率谱');
    set(gca,'YTick',0:1:1);%设置功率谱坐标轴只有0和1
在这里插入图片描述

6、线性扫频信号

线性扫频信号的频率随时间呈线性变化。通过MATLAB仿真的结果,生成了具有起始截止频率为5Hz、扫频斜率为95Hz/s的线性扫频信号。参考博客:[线性扫频信号(多周期)]。()

复制代码
    t=0:0.00001:3-0.00001;%3对应3个周期,0.00001为精度
    f0=5;%扫频起始频率
    fe=100;%扫频截止频率
    x=chirp(mod(t,1),f0,1,fe);%1代表的是单周期时间
    subplot(3,1,1);plot(t,x);title('三个周期的线性扫频信号波形');xlabel('时间(s)');ylabel('幅度(V)');
    
    ft=f0+(fe-f0)*mod(t,1);
    subplot(3,1,2);plot(t,ft);title('线性扫频信号频率-时间图');xlabel('时间(s)');ylabel('频率(Hz)');
    
    t=0:0.00001:1-0.00001;%求频谱时不能对多周期的求,对1个周期进行FFT
    x=chirp(t,f0,1,fe);
    C1=fft(x);     %对载波信号进行傅里叶变换 
    cxf=abs(C1);    %求绝对值
    cxf=cxf/max(cxf);%归一化
    subplot(3,1,3);plot(cxf); axis([0 150 0 1]);title('线性扫频信号归一化频谱');xlabel('频率(Hz)');ylabel('功率');
在这里插入图片描述

7、2ASK信号

ASK通过载波幅度的变化来实现数字信息的传递,属于数字调制技术之一。根据幅度种类的不同,ASK系列包括2ASK、4ASK、8ASK等多种类型。当数字基带信号仅取'1'或'0'时,通常被归类为2ASK。通过键控法控制开关的通断,可以实现2ASK调制信号的生成。调制原理框图如图所示,通过开关电路的键控作用,可以生成2ASK调制信号。在开关接通时,输出载波信号;当开关断开时,输出0信号。2ASK信号的公式为:e_{2 ASK\mathrm{}}(t)=\left\{\begin{array}{ll}\cos w_{c} t & \text { 出现概率为P } \\ 0 & \text { 出现概率为1}-\mathrm{P}\end{array}\right.;其中,P是为开关通路的概率对应基带信息中'1'出现的概率。

复制代码
    N=10;%仿真10S的时间
    xn=[];
    x=[1 0 1 1 0 0 1 0 1 0];%每秒一个逻辑值,一共10个
    t=0.001:0.001:N;%以1ms为步进
    for i=1:N
    if x(i)==1
    xn(i*1000-999:i*1000)=ones(1,1000);
    else
    xn(i*1000-999:i*1000)=zeros(1,1000);
    end
    end
    y=cos(2*pi*3*t);%载波波形 频率为3Hz
    z=xn.*y;%载波调制
    subplot(3,1,1);plot(xn);title(' 基带信号');xlabel('时间(ms)');ylabel('逻辑值');axis([0 10000 -0.2 1.2]);
    set(gca,'YTick',-1:1:1);%设置逻辑值坐标轴只有0和1
    subplot(3,1,2);plot(y);title(' 载波波形');xlabel('时间(ms)');ylabel('幅度(V)');axis([0 10000 -1 1]);
    subplot(3,1,3);plot(z);title(' 2ASK信号');xlabel('时间(ms)');ylabel('幅度(V)');axis([0 10000 -1 1]);
在这里插入图片描述
在这里插入图片描述

8、2FSK信号

FSK是一种基于载波频率变化实现数字信息传递的数字调制技术。基于频率种类的不同,FSK可分为2FSK、4FSK、8FSK等多种类型。当基带信号仅取1或0时,该技术被称为2FSK。2FSK的实现方法是通过受控开关电路对两个独立频率源进行选通。具体而言,当基带信号为1时,2FSK信号与载波信号1的波形一致;当基带信号为0时,2FSK信号与载波信号2的波形一致。2FSK信号的数学表达式为:e_{2 F S K}(t)=\left\{\begin{array}{ll} A \cos \left(f_{1} t+\varphi_{n}\right) & \text { 当基带信号为1时 } \\ A \cos \left(f_{2} t+\theta_{n}\right) & \text { 当基带信号为0时 } \end{array}\right.;其中,P代表受控开关电路通路的概率,对应于基带信息中1出现的概率。

复制代码
    N=10;%仿真10S的时间
    xn=[];xn1=[];
    x=[1 0 1 1 0 0 1 0 1 0];%%每秒一个逻辑值,一共10个
    t=0.001:0.001:N;%以1ms为步进
    for i=1:N
    if x(i)==1
    xn(i*1000-999:i*1000)=ones(1,1000);%xn都置为0
    xn1(i*1000-999:i*1000)=zeros(1,1000);%xn1都置为1
    else
    xn(i*1000-999:i*1000)=zeros(1,1000);%xn都置为1
    xn1(i*1000-999:i*1000)=ones(1,1000);%xn1都置为0
    end
    end
    y=cos(2*pi*2*t);%载波波形1 频率为2Hz
    y2=cos(2*pi*6*t);%载波波形2 频率为6Hz
    F1=xn.*y; %加入载波1
    F2=xn1.*y2; %加入载波2
    e_fsk=F1+F2;%叠加
    figure(1);heigth=160;width=160;set(gcf,'Position',[0 0 width/0.277 heigth/0.277]);%前面是图片在屏幕的位置,后面是图片大小为20*20
    subplot(4,1,1);plot(xn);title(' 基带信号');xlabel('时间(ms)');ylabel('逻辑值');axis([0 10000 -0.2 1.2]);
    set(gca,'YTick',-1:1:1);%设置逻辑值坐标轴只有0和1
    subplot(4,1,2);plot(y);title(' 载波波形');xlabel('时间(ms)');ylabel('幅度(V)');axis([0 10000 -1 1]);
    subplot(4,1,3);plot(y2);title(' 2ASK信号');xlabel('时间(ms)');ylabel('幅度(V)');axis([0 10000 -1 1]);
    subplot(414);plot(e_fsk);title('2FSK信号');axis([0 10000 -1 1]);xlabel('时间(ms)');ylabel('幅度(V)');
在这里插入图片描述

9、BPSK信号

数字信息通过载波相位的变化得以传递,这种技术根据相位类型的不同,涵盖了BPSK、QPSK、16PSK、64PSK等多种类型。以二进制调相为例,当二进制码元为1时,调制后的载波与未调制的载波同相;当码元为0时,载波与未调制的载波反相;此时,1和0对应的载波相位差为π。本章采用的仿真实验基于BPSK方案,该方案仅包含0和π两个相位。

复制代码
    N=10;%仿真10S的时间
    xn=[];xn1=[];
    x=[1 0 1 1 0 0 1 0 1 0];%每秒一个逻辑值,一共10个
    t=0.001:0.001:N;%以1ms为步进
    for i=1:N
    if x(i)==1
    xn(i*1000-999:i*1000)=ones(1,1000);
    xn1(i*1000-999:i*1000)=ones(1,1000);%码元值都为1
    else
    xn(i*1000-999:i*1000)=-ones(1,1000);
    xn1(i*1000-999:i*1000)=zeros(1,1000);%码元值都为0
    end
    end
    y=sin(2*pi*1*t);%载波波形 频率为3Hz   与前面的不一样,为正弦波
    z=xn.*y;%载波调制
    subplot(3,1,1);plot(xn1);title(' 基带信号');xlabel('时间(ms)');ylabel('逻辑值');axis([0 10000 -0.2 1.2]);
    set(gca,'YTick',-1:1:1);%设置逻辑值坐标轴只有0和1
    subplot(3,1,2);plot(y);title(' 载波波形');xlabel('时间(ms)');ylabel('幅度(V)');axis([0 10000 -1 1]);
    subplot(3,1,3);plot(z);title(' 2ASK信号');xlabel('时间(ms)');ylabel('幅度(V)');axis([0 10000 -1 1]);
在这里插入图片描述

10、16QAM信号

QAM信号是使用QAM调制生成的信号。因为16QAM的程序包含的文件比较多,所以只展示了仿真图。程序放到百度云-链接:https://pan.baidu.com/s/1zxSyYBqJhjAnLdgjqnwOtA
提取码:t8eq,QAM的程序主要来自16QAM百度文库
如图是QAM的实现原理,首先将输入二进制bit信号进行串并变换,再分别将两路二进制信号进行2L的变换产生I(t)Q(t),接着将两通道的基带信号I(t)Q(t)分别乘以\cos \left(2 \pi f_{c} t\right)\sin \left(2 \pi f_{c} t\right),最后将两个乘积信号进行矢量和就得到QAM 调制信号。
QAM信号的公式为:S_{\text {QAM }}(t)=I(t) \cos \left(2 \pi f_{c} t\right)-Q(t) \sin \left(2 \pi f_{c} t\right).

在这里插入图片描述
在这里插入图片描述

缩略对照表

2ASK 2 Amplitude Shift Keying 二进制幅移键控
2FSK 2 Frequency Shift Keying 二进制频移键控
BPSK Binary Phase Shift Keying 二进制相移键控
16QAM 16 Quadrature Amplitude Modulation 十六进制正交振幅调制
AM Amplitude Modulation 振幅调制
FM Frequency Modulation 频率调制

全部评论 (0)

还没有任何评论哟~