精华内容
下载资源
问答
  • 利用MATLAB实现信号的AM调制与解调 专业班级 电子信息工程技术 学号 姓名 基本要求主要参考资料等 基本要求 1掌握利用MATLAB实现信号AM调制与解调的方法 2学习MATLAB中信号表示的基本方法及绘图函数的调用实现常用...
  • MATLAB实现信号的 AM调制与解调 专业班级 电子信息工程技术 学号 姓名 基本要求主要参考资料等 基本要求 1掌握利用 MATLAB实现信号 AM调制与解调的方法 2学习 MATLAB中信号表示的基本方法及绘图函数的调用实现常用...
  • 本文简单记录一下自己学习《通信原理》时候调试一个仿真...在这个程序中,每执行一步操作,都会画出时域信号图和频域信号图,同时会在控制台打印出有关变量取值,对于理解QAM调制与解调有一定帮助。 一....

    本文简单记录一下自己学习《通信原理》的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序。自己一直是研究“信源”方面的东西,所以对“信道”这方面的知识进行实践的机会一直不是很多,做这个小程序的过程中也熟悉了不少相关的知识。在这个程序中,每执行一步操作,都会画出时域信号图和频域信号图,同时会在控制台打印出有关变量的取值,对于理解QAM调制与解调有一定的帮助。

    一.DVB-C中QAM的调制与解调

    简单介绍DVB-C系统中的QAM的调制与解调。DVB系列标准是数字电视领域最重要的标准,它是一个完整的数字广播解决方案,涉及数字电视广播的方方面面。DVB 规范了数字电视的系统结构和信号处理方式,各厂商可以开发各自的 DVB设备,只要该设备能够正确接收和处理信号并满足规范中所规定的性能指标就可以了。我国的卫星数字电视采用了DVB-S标准,地面广播数字电视采用了自主的DTMB标准,有线数字电视传输标准采用了DVB-C 标准。本文主要分析有线数字电视传输中的DVB-C标准。

     

    1.DVB-C发送端和接收端

    下面简单介绍DVB-C系统的发送端和接收端。DVB-C 标准描述了有线数字电视的帧结构,信道编码和调制。主要用于传送电视中的视频和音频信号。DVB-C 描述的有线数字电视前端与接收端的原理框图如图所示。

    有线前端与接收端的原理框图


    下面简单说明有线前端每个部分的功能:
    (1)基带接口:该单元将数据结构与信号源格式匹配,帧结构应与包含同步字节的 MPEG-2 TS 流一致。
    (2)SYNC1反转和随机化。该单元将依据 MPEG-2 帧结构转换 SYNC1字节;同时为了频谱成形,对数据流进行随机化。
    (3)RS编码器。将每一个TS包送入RS编码器进行RS(204,188)信道编码。
    (4)卷积交织器。完成深度 I=12 的卷积交织信道编码。
    (5)字节变换到 m 比特符号。将字节变换为 QAM 符号。
    (6)差分编码。为了获得旋转不变星座图,将每符号两个最高有效位进行差分编码。
    (7)基带成形。将差分编码的符号映射到I、Q分量。此外对 I 和 Q 信号进行平方根升余弦滚降滤波。
    (8)QAM 调制和物理接口。完成 QAM 调制。之后,它将 QAM 已调制信号连接到有线射频信道。
    接收端的功能不再详细叙述。接收端只要按照前端的处理顺序进行逆处理就可以得到基带信号。

    2.QAM 信号的调制和解调

    正交振幅调制(QAM)数字传输系统因为其高的频带利用率而被确定为DVB-C 标准。下面简单介绍QAM的调制和解调的步骤。QAM调制的步骤可以由下图表示。

    QAM调制原理图

     

    如图所示,输入的码元数据首先经过“串并转换”形成两路数据信号,转换之后,每个码元的持续时间变成原先的2倍;然后经过“2-L电平变换”转换成为多进制的QAM符号;然后将这2路QAM多进制信号分别和2路正交载波相乘;最后再将这2路调制后的信号相加,就形成了调制后的QAM信号。

    QAM信号解调的步骤与调制的步骤正好相反,如下图所示。

    QAM解调原理图
     
    如图所示,QAM信号首先分别使用2路正交的相干载波进行解调;然后经过“多电平判决”电路获得2路多进制的QAM符号;接着经过“L-2电平变换”转换成2路码元数据;最后经过“串并转换”将2路码元数据合并后形成完整的码元数据。

     

     

    二.仿真

    下面介绍仿真实验。本文做了3个仿真实验。第1个实验仿真了16QAM的调制与解调;第2个实验在第一个实验的基础上,仿真了16QAM信号传输过程中信噪比与误码率之间的关系;第3个实验仿真了2FSK,2PSK,4PSK,16PSK,16QAM的信噪比(S/N)与误码率之间的关系对比图。

     

    1. QAM的调制与解调

    本实验利用Matlab软件,完成如下图所示的一个基本的基于16QAM的数字通信系统。整个系统可以分成信源、信道和信宿三个部分。信号源产生二进制(0和1)的随机信号,经过调制后形成2路QAM符号(取值-3,-1,1和3)。2路QAM符号分别经过平方根升余弦滤波器,形成等待调制到高频的信号。随后通过给这两路信号添加高斯白噪声的方法,模拟信道的传输环境。然后通过匹配滤波器(平方根升余弦滤波器)。最后经过采样,判决,和解调得到二进制信号。本系统可以从Matlab控制台输出整个过程中关键信号的取值,并且可以在最后统计误码信息。

    QAM的调制和解调过程原理图

     

    下文将会按照上图所示的信号传递的顺序详细介绍每个步骤。

    (a)二进制信号的生成

    使用randsrc()函数生成随机二进制序列。本程序默认序列长度为240,其中“1”出现的概率为0.5。代码如下所示。

     

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. %====定义待仿真序列的长度 N  
    2. global N  
    3. N=240;  
    4. %====定义产生‘1’的概率为 p  
    5. global p  
    6. p=0.5;  
    7. %==============================  
    8. %首先产生随机二进制序列  
    9. source=randsrc(1,N,[1,0;p,1-p]);  
    10. %画出序列波形  
    11. h=figure(1);  
    12. stairs(source);  
    13. ylim([-1,2]);  
    14. set(h,'name','随机二进制序列');  

    该步骤运行完成后生成的二进制序列如图所示。

     

     

    随机二进制序列

     

    (b)    调制

     

    调制步骤将二进制的码元序列转换成为2路QAM符号。该部分的功能在单独定义的modulate_sig()函数中完成。该函数完成了以下几个步骤:
    (1)     串并转换。该部分将输入的码元序列中序号为奇数的码元选择出来形成一组数据,然后再将剩下的序号为偶数的码元选择出来形成另一组数据。为了描述方便,下文中称第一组数据称为“I路”,第二组数据称为“Q路”。下文中仅描述I路信号的处理,Q路信号的处理和I路是一模一样的。
    (2)     格雷码映射。将I路数据中每两个码元作为一个单元,按照格雷码的映射规则进行映射。格雷码的映射规则如下表所示。

    格雷码映射规则

    映射前(二进制码)

    映射后(QAM符号)

    0 0

    -3

    0 1

    -1

    1 1

    1

    1 0

    3

    注:上述映射规则可以有个简单的记法:第一个比特位代表符号,“1”代表“+”,第二个比特位代表取值,“1”代表“3”。

    经过上述两个步骤处理之后,内容为“0101”的二进制码元序列调制成了内容包含-3,-1,1,3的2路QAM符号。该步骤运行完成后生成的2路QAM符号如下图所示。

     

     

    QAM符号序列


    将上图中的QAM符号中的I路取值作为x坐标,Q路取值作为y坐标,可以画图得到16QAM符号的“星座图”,如下图所示。

     

     

    QAM符号星座图


    将该QAM符号进行DTFT变换后的频域波形如下图所示。x轴的单位是π。

    QAM符号DTFT频域图


    该部分的代码如下所示。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. %对产生的二进制序列进行QAM调制  
    2. function [y1,y2]=modulate_sig(x)  
    3. %=====首先进行串并转换,将原二进制序列转换成两路信号  
    4. N=length(x);  
    5. a=1:2:N;  
    6. fprintf('串并转换\n第一路:第1,3,5,7...元素\n第二路:第2,4,6,8...元素\n');  
    7. y1=x(a);  
    8. y2=x(a+1);  
    9. %=====分别对两路信号进行QPSK调制  
    10. %======对两路信号分别进行2-4电平变换  
    11. a=1:2:N/2;  
    12. temp1=y1(a);  
    13. temp2=y1(a+1);  
    14. y11=temp1*2+temp2;  
    15. temp1=y2(a);  
    16. temp2=y2(a+1);  
    17. y22=temp1*2+temp2;  
    18. %=======对两路信号分别进行相位调制  
    19. a=1:N/4;  
    20. y1=(y11*2-1-4)*1.*cos(2*pi*a);  
    21. y2=(y22*2-1-4)*1.*cos(2*pi*a);  
    22. %格雷码映射  
    23. fprintf('格雷码映射\n');  
    24. fprintf('---------\n');  
    25. fprintf('二进制码 | 格雷码\n');  
    26. fprintf(' 00     | -3\n');  
    27. fprintf(' 01     | -1\n');  
    28. fprintf(' 11     |  1\n');  
    29. fprintf(' 10     |  3\n');  
    30. fprintf('---------\n');  
    31. fprintf('注:前一位是符号,0代表+,后一位是取值,0代表3;\n');  
    32. y1(find(y11==0))=-3;  
    33. y1(find(y11==1))=-1;  
    34. y1(find(y11==3))=1;  
    35. y1(find(y11==2))=3;  
    36. y2(find(y22==0))=-3;  
    37. y2(find(y22==1))=-1;  
    38. y2(find(y22==3))=1;  
    39. y2(find(y22==2))=3;  

     

    (c)     插值

     

    插值步骤在QAM符号之间插入一些0点。这一步和后面的低通滤波联合起来的作用是模拟信号高频调制之后的频谱。该步骤的实现位于自定义的函数insert_value ()中。具体的方式是分别在信号的I路和Q路中,相邻的两个码字之间添加7个0。经过该步骤处理后,2路QAM符号如下图所示。

    差值后两路信号的波形图


    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,时域信号的差值会造成频域信号的收缩。

    插值QAM符号DTFT频域图


    该部分的代码如下所示。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. %x是待插值的序列,ratio是插值的比例。  
    2. function y=insert_value(x,ratio)  
    3. %两路信号进行插值  
    4. y=zeros(1,ratio*length(x));  
    5. a=1:ratio:length(y);  
    6. y(a)=x;<span style="font-family: Arial, Helvetica, sans-serif;"> </span>  

    (d)    低通

     

    低通步骤主要用于调整QAM符号的波形,也可以称为“波形成形”。该部分的实现位于自定义的函数rise_cos()中。上述几个步骤中的方波是在本地数字信号处理时常见的波形,但在实际传输时这种方波并不合适,因为使用方波的话会导致相邻传输信号之间的串扰。根据奈奎斯特第一准则,在实际通信系统中一般均使接收波形为升余弦滚降信号。这一过程由发送端的基带成形滤波器和接收端的匹配滤波器两个环节共同实现,因此这两个环节都需要进行平方根升余弦滚降滤波。下面简单介绍平方根余弦滤波器。
    平方根升余弦滤波器具有以下定义的理论函数:

     

                

    其中:是奈奎斯特平率,是滚降系数。
    平方根升余弦滤波器的冲击响应如下图所示。

     

     

    平方根升余弦滤波器的冲激响应曲线

     


    经过该步骤处理后,2路QAM符号如下图所示。

     

    通过低通滤波器后两路信号波形图


    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,经过低通滤波器之后,频域中高频部分被滤除,保留了低频的信号。

    通过低通滤波器后两路信号波形图


    该部分的代码如下所示。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. %x1、x2是两路输入信号,fd是信号信息位的频率,fs是信号的采样频率  
    2. function [y1,y2]=rise_cos(x1,x2,fd,fs)  
    3. %生成平方根升余弦滤波器  
    4. [yf, tf]=rcosine(fd,fs, 'fir/sqrt');  
    5. %对两路信号进行滤波  
    6. [yo1, to1]=rcosflt(x1, fd,fs,'filter/Fs',yf);  
    7. [yo2, to2]=rcosflt(x2, fd,fs,'filter/Fs',yf);  
    8. y1=yo1;  
    9. y2=yo2;<span style="font-family: Arial, Helvetica, sans-serif;"> </span>  

    (e)     加载频

     

    加载频在该仿真中属于一个“附加”步骤。该部分主要用于呈现调制到载波之后的波形图,它的实现位于自定义的函数modulate_to_high()中。本程序将通过成形滤波器后的信号调制到10倍于原频率的载波上。由于在仿真的过程中,只能用离散的点来模拟连续信号,因而为了能够显示出一个正弦曲线,至少需要在一个正弦周期内采样到4个以上的点,这里,我们在一个周期内采10个点。假设最初的0、1信号的频率是1Hz,那么I路和Q路符号传输的频率是1/4Hz,而10倍频是建立在I路或Q路符号频率的基础上,也就是说,载频的频率是2.5Hz。调制后的信号就是I路和Q路线性叠加,符合以下公式。

    其中,fc为载波频率。

     

    该步骤运行后,两路QAM符号合成一路信号,如下图所示。

     

    基带信号调制到高频之后的波形图


    该部分的代码如下所示。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. %x1,x2代表两路输入信号,f是输入信号的频率,hf是载波的频率  
    2. function [t,y]=modulate_to_high(x1,x2,f,hf)  
    3. %产生两个中间变量,用来存储插值后的输入信号  
    4. yo1=zeros(1,length(x1)*hf/f*10);  
    5. yo2=zeros(1,length(x2)*hf/f*10);  
    6. n=1:length(yo1);  
    7. %对输入信号分别进行插值,相邻的两个点之间加入9个点,且这9个点的值同第0个点的值相同  
    8. yo1(n)=x1(floor((n-1)/(hf/f*10))+1);  
    9. yo2(n)=x1(floor((n-1)/(hf/f*10))+1);  
    10. %生成输出输出信号的时间向量  
    11. t=(1:length(yo1))/hf*f/10;  
    12. %生成载波调制信号  
    13. y=yo1.*cos(2*pi*hf*t)-yo2.*sin(2*pi*hf*t);<span style="font-family: Arial, Helvetica, sans-serif;"> </span>  

    (f)      加噪声

     

    加噪声用于模拟实际的信道中的噪声。本程序设定信道具有高斯白噪声的干扰。该步骤的实现位于自定义的函数generate_noise()中。加入白噪声的2路信号如下图所示。

     

    加入高斯白噪声之后的波形图


    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,由于白噪声在整个频域上是均匀分布的,所以整个频域范围内都增加了一些噪声。

    加入高斯白噪声之后DTFT频域图


    该部分的代码如下所示。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. %对输入的两路信号加高斯白噪声,返回处理后的两路信号  
    2. function [y1,y2]=generate_noise(x1,x2,snr)  
    3. %符号信噪比  
    4. snr1=snr+10*log10(4);  
    5. %所有信号的平均功率  
    6. ss=var(x1+i*x2,1);  
    7. %加入高斯白噪声  
    8. y=awgn([x1+j*x2],snr1+10*log10(ss/10),'measured');  
    9. y1=real(y);  
    10. y2=imag(y);<span style="font-family: Arial, Helvetica, sans-serif;"> </span>  

    (g)     匹配滤波

     

    匹配滤波用于从信道中接收QAM信号。这一步骤和前面的“低通”步骤是成对出现的。前面步骤的滤波器用于频谱成型,而这一步骤的滤波器主要用于滤除噪声。接收端的匹配滤波与发送端的成形滤波共同实现了数字通信系统的最佳接收。它与成形滤波器共同构成了一个奈奎斯特滤波器。该步骤的实现与“低通”步骤一样,位于generate_noise()函数中。
    经过匹配滤波期之后的信号如下图所示。

    经过匹配滤波器之后的波形图


    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,信号高频部分的白噪声在经过低通滤波器之后,已经被消除掉了。

    经过匹配滤波器之后DTFT频域图

     

    (h)    采样

     

    采样步骤用于还原前面插值步骤处理之前的QAM符号序列。经过前面的插值步骤之后,序列的点数是原本序列的8倍,因此需要去除这些冗余的点。该步骤的具体实现位于自定义的pick_sig()函数中,代码如下所示。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. function [y1,y2]=pick_sig(x1,x2,ratio)  
    2. y1=x1(ratio*3*2+1:ratio:(length(x1)-ratio*3*2));  
    3. y2=x2(ratio*3*2+1:ratio:(length(x1)-ratio*3*2));  

     
    (i)       判决解调
    解调步骤用于还原QAM符号序列为二进制码原序列。该步骤的实现位于自定义的demodulate_sig()函数中。经过上述几步骤后,已经可以得到2路QAM16的符号序列,该序列的星座图如下图所示。

    接收的QAM符号星座图


    从图中可以看出,原先整齐的星座图经过信道干扰的影响之后之后已经变得有些散乱。这2路QAM符号序列如下图所示。

    接收的QAM符号序列


    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,时域的抽样造成了频域的扩张。

    接收的QAM符号序列


    对于这样的QAM符号序列,需要做以下几步处理:
    (a)     判决。这里可以通过根据最大后验概率(MAP)准则,得到最小检测距离。具体到本仿真中,可以根据下表所示的的规则进行判决。

     

     

    判决电平对应表

    判决前的信号的幅度

    对应的判决后的幅度

    A<-2

    -3

    -2<=A<=0

    -1

    0<=A<2

    1

    A>=2

    3


    (b)     格雷码映射。按照前文所述的格雷码映射规则,将QAM符号重新转换为二进制码原序列。
    (c)     并串转换。将2路二进制码原序列重新合并为1路二进制码原序列。合并的规则和前文所述是一样的,即I路信号作为还原后信号中序号为奇数的码元,Q路则作为还原后信号中序号为偶数的码元。
    经过上述步骤后,就可以得到解码后的二进制码元序列了,如下图所示。

    恢复的二进制序列


    该步骤的代码如下所示。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. function y=demodulate_sig(x1,x2)  
    2. %对x1路信号进行判决  
    3. xx1(find(x1>=2))=3;  
    4. xx1(find((x1<2)&(x1>=0)))=1;  
    5. xx1(find((x1>=-2)&(x1<0)))=-1;  
    6. xx1(find(x1<-2))=-3;  
    7. %对x2路信号进行判决  
    8. xx2(find(x2>=2))=3;  
    9. xx2(find((x2<2)&(x2>=0)))=1;  
    10. xx2(find((x2>=-2)&(x2<0)))=-1;  
    11. xx2(find(x2<-2))=-3;  
    12. %将x1路信号按格雷码规则还原成0、1信号  
    13. temp1=zeros(1,length(xx1)*2);  
    14. temp1(find(xx1==-1)*2)=1;  
    15. temp1(find(xx1==1)*2-1)=1;  
    16. temp1(find(xx1==1)*2)=1;  
    17. temp1(find(xx1==3)*2-1)=1;  
    18. %将x2路信号按格雷码规则还原成0、1信号  
    19. temp2=zeros(1,length(xx2)*2);  
    20. temp2(find(xx2==-1)*2)=1;  
    21. temp2(find(xx2==1)*2-1)=1;  
    22. temp2(find(xx2==1)*2)=1;  
    23. temp2(find(xx2==3)*2-1)=1;  
    24. %将两路0、1信号合成一路  
    25. y=zeros(1,length(temp1)*2);  
    26. y(1:2:length(y))=temp1;  
    27. y(2:2:length(y))=temp2;  

     

    (j)      误码率统计

    误码率统计步骤用于统计上述整个环节中产生误码的情况。该步骤相对比较简单,使用biterr()函数对比发送端输入的二进制码元序列和接收端得到的二进制码元,就可以得到整个系统的误码率情况。

    (k)     程序主干代码

    程序主干代码如下所示,位于plot_qam16.m文件中。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. % QAM16的调制与解调示例程序  
    2. %  
    3. % 雷霄骅  
    4. % 中国传媒大学/数字电视技术  
    5. % leixiaohua1020@126.com  
    6. %  
    7. % 本程序演示了QAM的调制与解调过程。  
    8. % 程序输出了上述过程中的图形,并且在控制台中输出了相关的信息。  
    9. %  
    10. %  
    11. clear;  
    12. %关闭窗口  
    13. close all;  
    14. %白色背景  
    15. set(0,'defaultfigurecolor','w');  
    16. %====定义待仿真序列的长度 N  
    17. global N  
    18. N=240;  
    19. %====定义产生‘1’的概率为 p  
    20. global p  
    21. p=0.5;  
    22. %==============================  
    23. %首先产生随机二进制序列  
    24. source=randsrc(1,N,[1,0;p,1-p]);  
    25. %画出序列波形  
    26. h=figure(1);  
    27. stairs(source);  
    28. ylim([-1,2]);  
    29. set(h,'name','随机二进制序列');  
    30. %==============================  
    31. %对产生的二进制序列进行QAM调制  
    32. [source1,source2]=modulate_sig(source);  
    33. %==============================  
    34. %画出序列波形  
    35. h=figure(2);  
    36. plot_2way_stair(source1,source2);  
    37. set(h,'name','QAM符号序列');  
    38. %输出坐标  
    39. fprintf('\nQAM符号的坐标:\n');  
    40. for i=1:length(source1);  
    41.     if mod(i,10)==0  
    42.         fprintf('\n');  
    43.     end  
    44.     fprintf('(%.3f,%.3f);',source1(i),source2(i));  
    45. end;  
    46. fprintf('\n');  
    47. %===============================  
    48. %画出星座图  
    49. h=figure(3);  
    50. plot_astrology(source1,source2);  
    51. set(h,'name','QAM符号星座图');  
    52. %===============================  
    53. %画出频域图  
    54. h=figure(4);  
    55. plot_2way_f_dtft(source1,source2);  
    56. set(h,'name','QAM符号DTFT频域图');  
    57. %plot_2way_f_dft(source1,source2,50);  
    58. %set(h,'name','QAM符号DFT频域图');  
    59. %===============================  
    60. %两路信号进行插值  
    61. sig_insert1=insert_value(source1,8);  
    62. sig_insert2=insert_value(source2,8);  
    63. %===============================  
    64. %画出两路信号的波形图  
    65. h=figure(5);  
    66. plot_2way(sig_insert1,sig_insert2,length(sig_insert1),0.5);  
    67. set(h,'name','插值后两路信号的波形图');  
    68. %===============================  
    69. %画出频域图  
    70. h=figure(6);  
    71. plot_2way_f_dtft(sig_insert1,sig_insert2);  
    72. set(h,'name','插值QAM符号DTFT频域图');  
    73. %plot_2way_f_dft(sig_insert1,sig_insert2,50);  
    74. %set(h,'name','插值QAM符号DFT频域图');  
    75. %===============================  
    76. %通过低通滤波器  
    77. [sig_rcos1,sig_rcos2]=rise_cos(sig_insert1,sig_insert2,0.25,2);  
    78. %===============================  
    79. %画出两路信号的波形图  
    80. h=figure(7);  
    81. plot_2way(sig_rcos1,sig_rcos2,length(sig_rcos1)/4,0.5);  
    82. set(h,'name','通过低通滤波器后两路信号波形图');  
    83. %===============================  
    84. %画出频域图  
    85. h=figure(8);  
    86. plot_2way_f_dtft(sig_rcos1',sig_rcos2');  
    87. set(h,'name','通过低通滤波器后DTFT频域图');  
    88. %===============================  
    89. %====将基带信号调制到高频上  
    90. [t,sig_modulate]=modulate_to_high(sig_rcos1,sig_rcos2,0.25,2.5);  
    91. h=figure(9);  
    92. %plot(t(1:500),sig_modulate(1:500));  
    93. plot(t,sig_modulate);  
    94. set(h,'name','基带信号调制到高频之后的波形图');  
    95. %===============================  
    96.    
    97. %====加入高斯白噪声  
    98. snr=10;  
    99. [x1,x2]=generate_noise(sig_rcos1,sig_rcos2,snr);  
    100. sig_noise1=x1';  
    101. sig_noise2=x2';  
    102. h=figure(10);  
    103. plot_2way(sig_noise1,sig_noise2,length(sig_noise1)/4,0.5);  
    104. set(h,'name','加入高斯白噪声之后的波形图');  
    105. %===============================  
    106. %画出频域图  
    107. h=figure(11);  
    108. plot_2way_f_dtft(sig_noise1,sig_noise2);  
    109. set(h,'name','加入高斯白噪声之后DTFT频域图');  
    110.    
    111. %====经过匹配滤波器  
    112. [sig_match1,sig_match2]=rise_cos(sig_noise1,sig_noise2,0.25,2);  
    113. h=figure(12);  
    114. plot_2way(sig_match1,sig_match2,length(sig_match1)/4,0.5);  
    115. set(h,'name','经过匹配滤波器之后的波形图');  
    116. %===============================  
    117. %画出频域图  
    118. h=figure(13);  
    119. plot_2way_f_dtft(sig_match1',sig_match2');  
    120. set(h,'name','经过匹配滤波器之后DTFT频域图');  
    121. %采样  
    122. [x1,x2]=pick_sig(sig_match1,sig_match2,8);  
    123. sig_pick1=x1;  
    124. sig_pick2=x2;  
    125. %画出星座图  
    126. h=figure(14);  
    127. plot_astrology(sig_pick1,sig_pick2);  
    128. set(h,'name','接收的QAM符号星座图');  
    129. %画出序列波形  
    130. h=figure(15);  
    131. plot_2way_stair(sig_pick1,sig_pick2);  
    132. set(h,'name','接收的QAM符号序列');  
    133. %输出坐标  
    134. fprintf('\nQAM符号的坐标(接收):\n');  
    135. for i=1:length(source1);  
    136.     if mod(i,10)==0  
    137.         fprintf('\n');  
    138.     end  
    139.     fprintf('(%.3f,%.3f);',sig_pick1(i),sig_pick2(i));  
    140. end;  
    141. fprintf('\n');  
    142. %===============================  
    143. %画出频域图  
    144. h=figure(16);  
    145. plot_2way_f_dtft(sig_pick1',sig_pick2');  
    146. set(h,'name','接收的QAM符号序列DTFT频域图');  
    147. %解调  
    148. signal=demodulate_sig(sig_pick1,sig_pick2);  
    149. h=figure(17);  
    150. stairs(signal);  
    151. ylim([-1,2]);  
    152. set(h,'name','恢复的二进制序列');  
    153. %误码率  
    154. [number,Pe] = biterr(source,signal);  
    155. fprintf('误码数以及误码率:\n');  
    156. fprintf('%d,%f;\n',number,Pe);  
    157. hold on  

     

    2. QAM传输过程中信噪比与误码率之间的关系

     

    本实验在前一个实验的基础上,仿真了16QAM传输过程中信噪比与误码率之间的关系。本仿真的大部分代码与前一个实验是一样的,主要的不同点在于它计算了QAM理论的误码率,并且与实际的误码率进行了对比,整个程序的流程简单描述如下:
    (a)     设定信噪比
    (b)     计算16QAM该信噪比下的误码率
    (c)     仿真16QAM该信噪比下的误码率
    (d)     重新设定信噪比,重复(2)(3)步骤
    该仿真实验选择了1-11dB的信噪比对16QAM进行了仿真,仿真的结果如下图所示。

    16QAM信噪比与误码率之间的关系的仿真结果


    从仿真结果图来看,仿真的误码率十分贴近理论的误码率。程序的代码位于plot_qam16_ber.m文件中,代码的内容和前一个实验是类似的,关键代码大致如下。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. % QAM16的信噪比(S/N)与误码率关系图  
    2. %  
    3. % 雷霄骅  
    4. % 中国传媒大学/数字电视技术  
    5. % leixiaohua1020@126.com  
    6. %  
    7. % 本程序可以得到QAM调制中信噪比(S/N)与误码率之间的关系图  
    8. %  
    9. %  
    10. clear;  
    11. close all;  
    12. %白色背景  
    13. set(0,'defaultfigurecolor','w');  
    14. %用来仿真QAM的误bit率  
    15. snr=1:1:11;  
    16. %先来计算理论误bit率  
    17. error_theory=(1-(1-(2*(1-1/sqrt(16))*1/2*erfc(1/sqrt(2)*sqrt(3*4*10.^(snr/10)/(16-1))))).^2)/4;  
    18. %用理论的误bit率来决定需要仿真的点数  
    19. N=floor(1./error_theory)*100+100;  
    20. %最少5000点  
    21. N(find(N<5000))=5000;  
    22.    
    23. for i=1:length(N);  
    24.          %一次仿真,代码略  
    25. end  
    26. figure(4);  
    27. %画出图形  
    28. semilogy(snr,error_bit,'bs-','LineWidth',2);  
    29. hold on  
    30. semilogy(snr,error_theory,'ms-','LineWidth',2)  
    31. legend('仿真','理论');  
    32. xlabel('S/N, dB');  
    33. ylabel('Bit Error Rate (BER)');  
    34. title('信噪比和误码率之间的关系');  

     

    3. 2FSK,2PSK,4PSK,16PSK,16QAM的信噪比与误码率之间的关系对比

     

    上个实验仿真了16QAM传输过程中信噪比与误码率之间的关系。为了能和其他调制方式做一个对比,本实验仿真了2FSK,2PSK,4PSK,16PSK,16QAM传输过程中信噪比与误码率之间的关系。与前两个实验不同之处在于,本实验没有使用自行编写的程序完成这几种调制方式的仿真,而是使用Matlab的接口函数完成了仿真,实验的结果如下图所示。

     

    2FSK,2PSK,4PSK,16PSK,16QAM的信噪比与误码率之间的关系对比的仿真结果

     


    从图中可以看出,在相同信噪比的前提下,不同调制技术之间的误码率关系如下所示:

     

    2PSK < 4PSK < 2FSK < 16QAM < 16PSK


    程序的源代码如下。
     

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. % 2FSK,2PSK,4PSK,16PSK,16QAM的  
    2. % 信噪比(S/N)与误码率之间的关系对比图  
    3. %  
    4. % 雷霄骅  
    5. % 中国传媒大学/数字电视技术  
    6. % leixiaohua1020@126.com  
    7. %  
    8. % 本程序可以计算得到2FSK,2PSK,4PSK,16PSK,16QAM信噪比  
    9. % 与误码率之间的关系图  
    10. %  
    11. %  
    12. clear;  
    13. close all;  
    14. %白色背景  
    15. set(0,'defaultfigurecolor','w');  
    16. M2=2;  
    17. M4=4;  
    18. M16=16;  
    19. k2=log2(M2);  
    20. k4=log2(M4);  
    21. k16=log2(M16);  
    22.    
    23.    
    24. Fs = 16;  
    25. nsamp = 17;  
    26. freq_sep = 8;  
    27. x = randint(10000,1);  
    28. %mod  
    29. y_2fsk = fskmod(x,M2,freq_sep,nsamp,Fs);  
    30. y_2psk = pskmod(x,M2);  
    31. x4 = bi2de(reshape(x,k4,length(x)/k4).','left-msb');  
    32. y_4psk = pskmod(x4,4);  
    33. x16 = bi2de(reshape(x,k16,length(x)/k16).','left-msb');  
    34. y_16psk = pskmod(x16,16);  
    35. y_16qam = qammod(x16,16);  
    36.    
    37. N=10;  
    38. for j=1:N  
    39.     SNR=j;   
    40.     %[],'dB'  
    41.     y_2fsk_noise = awgn(y_2fsk,SNR-10*log10(Fs),'measured');  
    42.     y_2psk_noise = awgn(y_2psk,SNR,'measured');  
    43.     y_4psk_noise = awgn(y_4psk,SNR,'measured');  
    44.     y_16psk_noise = awgn(y_16psk,SNR,'measured');  
    45.     y_16qam_noise = awgn(y_16qam,SNR,'measured');  
    46.     %demod  
    47.     z_2fsk = fskdemod(y_2fsk_noise,M2,freq_sep,nsamp,Fs);  
    48.     z_2psk = pskdemod(y_2psk_noise,M2);  
    49.     z_4psk = pskdemod(y_4psk_noise,M4);  
    50.     z_16psk = pskdemod(y_16psk_noise,M16);  
    51.     z_16qam = qamdemod(y_16qam_noise,M16);  
    52.     %x = [1 1 1 1 1];  
    53.     %y = [0 0 0 0 1];  
    54.     %[number,ratio]=biterr(x,y)得到 number=4,ratio=0.8  
    55.     [num_2fsk(j),ber_2fsk(j)] = biterr(x,z_2fsk);  
    56.     [num_2psk(j),ber_2psk(j)] = biterr(x,z_2psk);  
    57.     [num_4psk(j),ber_4psk(j)] = biterr(x4,z_4psk);  
    58.     [num_16psk(j),ber_16psk(j)] = biterr(x16,z_16psk);  
    59.     [num_16qam(j),ber_16qam(j)] = biterr(x16,z_16qam);  
    60. end  
    61.    
    62. %theoryBer = (1/k)*3/2*erfc(sqrt(k*0.1*(10.^(EbNo/10))));  
    63. %semilogy(EbNo,theoryBer,'ms-');  
    64. %hold on;  
    65. semilogy(1:N,ber_2fsk,'-*b');  
    66. hold on;  
    67. semilogy(1:N,ber_2psk,'--dg');  
    68. hold on;  
    69. semilogy(1:N,ber_4psk,'-.dr');  
    70. hold on;  
    71. semilogy(1:N,ber_16psk,'--xk');  
    72. hold on;  
    73. semilogy(1:N,ber_16qam,'-.sk');  
    74. title('不同信噪比下2FSK,2PSK,4PSK,16PSK,16QAM误码性能仿真');  
    75. legend('2FSK','2PSK','4PSK','16PSK','16QAM',3);  
    76. xlabel('S/N,dB');  
    77. ylabel('Bit Error Rate (BER)')  
    78. hold off  

     

     

     

    三.下载

     

    QAM调制与解调仿真(Matlab程序)

    CSDN下载地址:http://download.csdn.net/detail/leixiaohua1020/8453115

    转载于:https://www.cnblogs.com/lifan3a/articles/6000675.html

    展开全文
  • 本实验通过 LabVIEW 编程产生信号频率、幅度等参数可变基带信号和载波信号,实现 AM 调制解调,观察参数变化已调信号的影响。并通过仿真运行整个 AM 调制解调系统,学习掌握代码调试方法,验证程序正确性。 ...
  • 本文简单记录一下自己学习《通信原理》时候调试一个仿真...在这个程序中,每执行一步操作,都会画出时域信号图和频域信号图,同时会在控制台打印出有关变量取值,对于理解QAM调制与解调有一定帮助。一.DV...

    本文简单记录一下自己学习《通信原理》的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序。自己一直是研究“信源”方面的东西,所以对“信道”这方面的知识进行实践的机会一直不是很多,做这个小程序的过程中也熟悉了不少相关的知识。在这个程序中,每执行一步操作,都会画出时域信号图和频域信号图,同时会在控制台打印出有关变量的取值,对于理解QAM调制与解调有一定的帮助。

    一.DVB-C中QAM的调制与解调

    简单介绍DVB-C系统中的QAM的调制与解调。DVB系列标准是数字电视领域最重要的标准,它是一个完整的数字广播解决方案,涉及数字电视广播的方方面面。DVB 规范了数字电视的系统结构和信号处理方式,各厂商可以开发各自的 DVB设备,只要该设备能够正确接收和处理信号并满足规范中所规定的性能指标就可以了。我国的卫星数字电视采用了DVB-S标准,地面广播数字电视采用了自主的DTMB标准,有线数字电视传输标准采用了DVB-C 标准。本文主要分析有线数字电视传输中的DVB-C标准。

    1.DVB-C发送端和接收端

    下面简单介绍DVB-C系统的发送端和接收端。DVB-C 标准描述了有线数字电视的帧结构,信道编码和调制。主要用于传送电视中的视频和音频信号。DVB-C 描述的有线数字电视前端与接收端的原理框图如图所示。

    有线前端与接收端的原理框图

    下面简单说明有线前端每个部分的功能:

    (1)基带接口:该单元将数据结构与信号源格式匹配,帧结构应与包含同步字节的 MPEG-2 TS 流一致。

    (2)SYNC1反转和随机化。该单元将依据 MPEG-2 帧结构转换 SYNC1字节;同时为了频谱成形,对数据流进行随机化。

    (3)RS编码器。将每一个TS包送入RS编码器进行RS(204,188)信道编码。

    (4)卷积交织器。完成深度 I=12 的卷积交织信道编码。

    (5)字节变换到 m 比特符号。将字节变换为 QAM 符号。

    (6)差分编码。为了获得旋转不变星座图,将每符号两个最高有效位进行差分编码。

    (7)基带成形。将差分编码的符号映射到I、Q分量。此外对 I 和 Q 信号进行平方根升余弦滚降滤波。

    (8)QAM 调制和物理接口。完成 QAM 调制。之后,它将 QAM 已调制信号连接到有线射频信道。

    接收端的功能不再详细叙述。接收端只要按照前端的处理顺序进行逆处理就可以得到基带信号。

    2.QAM 信号的调制和解调

    正交振幅调制(QAM)数字传输系统因为其高的频带利用率而被确定为DVB-C 标准。下面简单介绍QAM的调制和解调的步骤。QAM调制的步骤可以由下图表示。

    QAM调制原理图

    如图所示,输入的码元数据首先经过“串并转换”形成两路数据信号,转换之后,每个码元的持续时间变成原先的2倍;然后经过“2-L电平变换”转换成为多进制的QAM符号;然后将这2路QAM多进制信号分别和2路正交载波相乘;最后再将这2路调制后的信号相加,就形成了调制后的QAM信号。

    QAM信号解调的步骤与调制的步骤正好相反,如下图所示。

    QAM解调原理图

    如图所示,QAM信号首先分别使用2路正交的相干载波进行解调;然后经过“多电平判决”电路获得2路多进制的QAM符号;接着经过“L-2电平变换”转换成2路码元数据;最后经过“串并转换”将2路码元数据合并后形成完整的码元数据。

    二.仿真

    下面介绍仿真实验。本文做了3个仿真实验。第1个实验仿真了16QAM的调制与解调;第2个实验在第一个实验的基础上,仿真了16QAM信号传输过程中信噪比与误码率之间的关系;第3个实验仿真了2FSK,2PSK,4PSK,16PSK,16QAM的信噪比(S/N)与误码率之间的关系对比图。

    1. QAM的调制与解调

    本实验利用Matlab软件,完成如下图所示的一个基本的基于16QAM的数字通信系统。整个系统可以分成信源、信道和信宿三个部分。信号源产生二进制(0和1)的随机信号,经过调制后形成2路QAM符号(取值-3,-1,1和3)。2路QAM符号分别经过平方根升余弦滤波器,形成等待调制到高频的信号。随后通过给这两路信号添加高斯白噪声的方法,模拟信道的传输环境。然后通过匹配滤波器(平方根升余弦滤波器)。最后经过采样,判决,和解调得到二进制信号。本系统可以从Matlab控制台输出整个过程中关键信号的取值,并且可以在最后统计误码信息。

    QAM的调制和解调过程原理图

    下文将会按照上图所示的信号传递的顺序详细介绍每个步骤。

    (a)二进制信号的生成

    使用randsrc()函数生成随机二进制序列。本程序默认序列长度为240,其中“1”出现的概率为0.5。代码如下所示。

    %====定义待仿真序列的长度 N

    global N

    N=240;

    %====定义产生‘1’的概率为 p

    global p

    p=0.5;

    %==============================

    %首先产生随机二进制序列

    source=randsrc(1,N,[1,0;p,1-p]);

    %画出序列波形

    h=figure(1);

    stairs(source);

    ylim([-1,2]);

    set(h,'name','随机二进制序列');

    该步骤运行完成后生成的二进制序列如图所示。

    随机二进制序列

    (b)    调制

    调制步骤将二进制的码元序列转换成为2路QAM符号。该部分的功能在单独定义的modulate_sig()函数中完成。该函数完成了以下几个步骤:

    (1)     串并转换。该部分将输入的码元序列中序号为奇数的码元选择出来形成一组数据,然后再将剩下的序号为偶数的码元选择出来形成另一组数据。为了描述方便,下文中称第一组数据称为“I路”,第二组数据称为“Q路”。下文中仅描述I路信号的处理,Q路信号的处理和I路是一模一样的。

    (2)     格雷码映射。将I路数据中每两个码元作为一个单元,按照格雷码的映射规则进行映射。格雷码的映射规则如下表所示。

    格雷码映射规则

    映射前(二进制码)

    映射后(QAM符号)

    0 0

    -3

    0 1

    -1

    1 1

    1

    1 0

    3

    注:上述映射规则可以有个简单的记法:第一个比特位代表符号,“1”代表“+”,第二个比特位代表取值,“1”代表“3”。

    经过上述两个步骤处理之后,内容为“0101”的二进制码元序列调制成了内容包含-3,-1,1,3的2路QAM符号。该步骤运行完成后生成的2路QAM符号如下图所示。

    QAM符号序列

    将上图中的QAM符号中的I路取值作为x坐标,Q路取值作为y坐标,可以画图得到16QAM符号的“星座图”,如下图所示。

    QAM符号星座图

    将该QAM符号进行DTFT变换后的频域波形如下图所示。x轴的单位是π。

    QAM符号DTFT频域图

    该部分的代码如下所示。

    %对产生的二进制序列进行QAM调制

    function [y1,y2]=modulate_sig(x)

    %=====首先进行串并转换,将原二进制序列转换成两路信号

    N=length(x);

    a=1:2:N;

    fprintf('串并转换\n第一路:第1,3,5,7...元素\n第二路:第2,4,6,8...元素\n');

    y1=x(a);

    y2=x(a+1);

    %=====分别对两路信号进行QPSK调制

    %======对两路信号分别进行2-4电平变换

    a=1:2:N/2;

    temp1=y1(a);

    temp2=y1(a+1);

    y11=temp1*2+temp2;

    temp1=y2(a);

    temp2=y2(a+1);

    y22=temp1*2+temp2;

    %=======对两路信号分别进行相位调制

    a=1:N/4;

    y1=(y11*2-1-4)*1.*cos(2*pi*a);

    y2=(y22*2-1-4)*1.*cos(2*pi*a);

    %格雷码映射

    fprintf('格雷码映射\n');

    fprintf('---------\n');

    fprintf('二进制码 | 格雷码\n');

    fprintf(' 00     | -3\n');

    fprintf(' 01     | -1\n');

    fprintf(' 11     |  1\n');

    fprintf(' 10     |  3\n');

    fprintf('---------\n');

    fprintf('注:前一位是符号,0代表+,后一位是取值,0代表3;\n');

    y1(find(y11==0))=-3;

    y1(find(y11==1))=-1;

    y1(find(y11==3))=1;

    y1(find(y11==2))=3;

    y2(find(y22==0))=-3;

    y2(find(y22==1))=-1;

    y2(find(y22==3))=1;

    y2(find(y22==2))=3;

    (c)     插值

    插值步骤在QAM符号之间插入一些0点。这一步和后面的低通滤波联合起来的作用是模拟信号高频调制之后的频谱。该步骤的实现位于自定义的函数insert_value ()中。具体的方式是分别在信号的I路和Q路中,相邻的两个码字之间添加7个0。经过该步骤处理后,2路QAM符号如下图所示。

    差值后两路信号的波形图

    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,时域信号的差值会造成频域信号的收缩。

    插值QAM符号DTFT频域图

    该部分的代码如下所示。

    %x是待插值的序列,ratio是插值的比例。

    function y=insert_value(x,ratio)

    %两路信号进行插值

    y=zeros(1,ratio*length(x));

    a=1:ratio:length(y);

    y(a)=x; 

    (d)    低通

    低通步骤主要用于调整QAM符号的波形,也可以称为“波形成形”。该部分的实现位于自定义的函数rise_cos()中。上述几个步骤中的方波是在本地数字信号处理时常见的波形,但在实际传输时这种方波并不合适,因为使用方波的话会导致相邻传输信号之间的串扰。根据奈奎斯特第一准则,在实际通信系统中一般均使接收波形为升余弦滚降信号。这一过程由发送端的基带成形滤波器和接收端的匹配滤波器两个环节共同实现,因此这两个环节都需要进行平方根升余弦滚降滤波。下面简单介绍平方根余弦滤波器。

    平方根升余弦滤波器具有以下定义的理论函数:

                

    其中:

    是奈奎斯特平率,

    是滚降系数。

    平方根升余弦滤波器的冲击响应如下图所示。

    平方根升余弦滤波器的冲激响应曲线

    经过该步骤处理后,2路QAM符号如下图所示。

    通过低通滤波器后两路信号波形图

    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,经过低通滤波器之后,频域中高频部分被滤除,保留了低频的信号。

    通过低通滤波器后两路信号波形图

    该部分的代码如下所示。

    %x1、x2是两路输入信号,fd是信号信息位的频率,fs是信号的采样频率

    function [y1,y2]=rise_cos(x1,x2,fd,fs)

    %生成平方根升余弦滤波器

    [yf, tf]=rcosine(fd,fs, 'fir/sqrt');

    %对两路信号进行滤波

    [yo1, to1]=rcosflt(x1, fd,fs,'filter/Fs',yf);

    [yo2, to2]=rcosflt(x2, fd,fs,'filter/Fs',yf);

    y1=yo1;

    y2=yo2; 

    (e)     加载频

    加载频在该仿真中属于一个“附加”步骤。该部分主要用于呈现调制到载波之后的波形图,它的实现位于自定义的函数modulate_to_high()中。本程序将通过成形滤波器后的信号调制到10倍于原频率的载波上。由于在仿真的过程中,只能用离散的点来模拟连续信号,因而为了能够显示出一个正弦曲线,至少需要在一个正弦周期内采样到4个以上的点,这里,我们在一个周期内采10个点。假设最初的0、1信号的频率是1Hz,那么I路和Q路符号传输的频率是1/4Hz,而10倍频是建立在I路或Q路符号频率的基础上,也就是说,载频的频率是2.5Hz。调制后的信号就是I路和Q路线性叠加,符合以下公式。

    其中,fc为载波频率。

    该步骤运行后,两路QAM符号合成一路信号,如下图所示。

    基带信号调制到高频之后的波形图

    该部分的代码如下所示。

    %x1,x2代表两路输入信号,f是输入信号的频率,hf是载波的频率

    function [t,y]=modulate_to_high(x1,x2,f,hf)

    %产生两个中间变量,用来存储插值后的输入信号

    yo1=zeros(1,length(x1)*hf/f*10);

    yo2=zeros(1,length(x2)*hf/f*10);

    n=1:length(yo1);

    %对输入信号分别进行插值,相邻的两个点之间加入9个点,且这9个点的值同第0个点的值相同

    yo1(n)=x1(floor((n-1)/(hf/f*10))+1);

    yo2(n)=x1(floor((n-1)/(hf/f*10))+1);

    %生成输出输出信号的时间向量

    t=(1:length(yo1))/hf*f/10;

    %生成载波调制信号

    y=yo1.*cos(2*pi*hf*t)-yo2.*sin(2*pi*hf*t); 

    (f)      加噪声

    加噪声用于模拟实际的信道中的噪声。本程序设定信道具有高斯白噪声的干扰。该步骤的实现位于自定义的函数generate_noise()中。加入白噪声的2路信号如下图所示。

    加入高斯白噪声之后的波形图

    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,由于白噪声在整个频域上是均匀分布的,所以整个频域范围内都增加了一些噪声。

    加入高斯白噪声之后DTFT频域图

    该部分的代码如下所示。

    %对输入的两路信号加高斯白噪声,返回处理后的两路信号

    function [y1,y2]=generate_noise(x1,x2,snr)

    %符号信噪比

    snr1=snr+10*log10(4);

    %所有信号的平均功率

    ss=var(x1+i*x2,1);

    %加入高斯白噪声

    y=awgn([x1+j*x2],snr1+10*log10(ss/10),'measured');

    y1=real(y);

    y2=imag(y); 

    (g)     匹配滤波

    匹配滤波用于从信道中接收QAM信号。这一步骤和前面的“低通”步骤是成对出现的。前面步骤的滤波器用于频谱成型,而这一步骤的滤波器主要用于滤除噪声。接收端的匹配滤波与发送端的成形滤波共同实现了数字通信系统的最佳接收。它与成形滤波器共同构成了一个奈奎斯特滤波器。该步骤的实现与“低通”步骤一样,位于generate_noise()函数中。

    经过匹配滤波期之后的信号如下图所示。

    经过匹配滤波器之后的波形图

    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,信号高频部分的白噪声在经过低通滤波器之后,已经被消除掉了。

    经过匹配滤波器之后DTFT频域图

    (h)    采样

    采样步骤用于还原前面插值步骤处理之前的QAM符号序列。经过前面的插值步骤之后,序列的点数是原本序列的8倍,因此需要去除这些冗余的点。该步骤的具体实现位于自定义的pick_sig()函数中,代码如下所示。

    function [y1,y2]=pick_sig(x1,x2,ratio)

    y1=x1(ratio*3*2+1:ratio:(length(x1)-ratio*3*2));

    y2=x2(ratio*3*2+1:ratio:(length(x1)-ratio*3*2));

    (i)       判决解调

    解调步骤用于还原QAM符号序列为二进制码原序列。该步骤的实现位于自定义的demodulate_sig()函数中。经过上述几步骤后,已经可以得到2路QAM16的符号序列,该序列的星座图如下图所示。

    接收的QAM符号星座图

    从图中可以看出,原先整齐的星座图经过信道干扰的影响之后之后已经变得有些散乱。这2路QAM符号序列如下图所示。

    接收的QAM符号序列

    上图所示信号进行DTFT变换后的频域波形如下图所示。从图中可以看出,时域的抽样造成了频域的扩张。

    接收的QAM符号序列

    对于这样的QAM符号序列,需要做以下几步处理:

    (a)     判决。这里可以通过根据最大后验概率(MAP)准则,得到最小检测距离。具体到本仿真中,可以根据下表所示的的规则进行判决。

    判决电平对应表

    判决前的信号的幅度

    对应的判决后的幅度

    A

    -3

    -2<=A<=0

    -1

    0<=A<2

    1

    A>=2

    3

    (b)     格雷码映射。按照前文所述的格雷码映射规则,将QAM符号重新转换为二进制码原序列。

    (c)     并串转换。将2路二进制码原序列重新合并为1路二进制码原序列。合并的规则和前文所述是一样的,即I路信号作为还原后信号中序号为奇数的码元,Q路则作为还原后信号中序号为偶数的码元。

    经过上述步骤后,就可以得到解码后的二进制码元序列了,如下图所示。

    恢复的二进制序列

    该步骤的代码如下所示。

    function y=demodulate_sig(x1,x2)

    %对x1路信号进行判决

    xx1(find(x1>=2))=3;

    xx1(find((x1<2)&(x1>=0)))=1;

    xx1(find((x1>=-2)&(x1<0)))=-1;

    xx1(find(x1

    %对x2路信号进行判决

    xx2(find(x2>=2))=3;

    xx2(find((x2<2)&(x2>=0)))=1;

    xx2(find((x2>=-2)&(x2<0)))=-1;

    xx2(find(x2

    %将x1路信号按格雷码规则还原成0、1信号

    temp1=zeros(1,length(xx1)*2);

    temp1(find(xx1==-1)*2)=1;

    temp1(find(xx1==1)*2-1)=1;

    temp1(find(xx1==1)*2)=1;

    temp1(find(xx1==3)*2-1)=1;

    %将x2路信号按格雷码规则还原成0、1信号

    temp2=zeros(1,length(xx2)*2);

    temp2(find(xx2==-1)*2)=1;

    temp2(find(xx2==1)*2-1)=1;

    temp2(find(xx2==1)*2)=1;

    temp2(find(xx2==3)*2-1)=1;

    %将两路0、1信号合成一路

    y=zeros(1,length(temp1)*2);

    y(1:2:length(y))=temp1;

    y(2:2:length(y))=temp2;

    (j)      误码率统计

    误码率统计步骤用于统计上述整个环节中产生误码的情况。该步骤相对比较简单,使用biterr()函数对比发送端输入的二进制码元序列和接收端得到的二进制码元,就可以得到整个系统的误码率情况。

    (k)     程序主干代码

    程序主干代码如下所示,位于plot_qam16.m文件中。

    % QAM16的调制与解调示例程序

    %

    % 雷霄骅

    % 中国传媒大学/数字电视技术

    % leixiaohua1020@126.com

    %

    % 本程序演示了QAM的调制与解调过程。

    % 程序输出了上述过程中的图形,并且在控制台中输出了相关的信息。

    %

    %

    clear;

    %关闭窗口

    close all;

    %白色背景

    set(0,'defaultfigurecolor','w');

    %====定义待仿真序列的长度 N

    global N

    N=240;

    %====定义产生‘1’的概率为 p

    global p

    p=0.5;

    %==============================

    %首先产生随机二进制序列

    source=randsrc(1,N,[1,0;p,1-p]);

    %画出序列波形

    h=figure(1);

    stairs(source);

    ylim([-1,2]);

    set(h,'name','随机二进制序列');

    %==============================

    %对产生的二进制序列进行QAM调制

    [source1,source2]=modulate_sig(source);

    %==============================

    %画出序列波形

    h=figure(2);

    plot_2way_stair(source1,source2);

    set(h,'name','QAM符号序列');

    %输出坐标

    fprintf('\nQAM符号的坐标:\n');

    for i=1:length(source1);

    if mod(i,10)==0

    fprintf('\n');

    end

    fprintf('(%.3f,%.3f);',source1(i),source2(i));

    end;

    fprintf('\n');

    %===============================

    %画出星座图

    h=figure(3);

    plot_astrology(source1,source2);

    set(h,'name','QAM符号星座图');

    %===============================

    %画出频域图

    h=figure(4);

    plot_2way_f_dtft(source1,source2);

    set(h,'name','QAM符号DTFT频域图');

    %plot_2way_f_dft(source1,source2,50);

    %set(h,'name','QAM符号DFT频域图');

    %===============================

    %两路信号进行插值

    sig_insert1=insert_value(source1,8);

    sig_insert2=insert_value(source2,8);

    %===============================

    %画出两路信号的波形图

    h=figure(5);

    plot_2way(sig_insert1,sig_insert2,length(sig_insert1),0.5);

    set(h,'name','插值后两路信号的波形图');

    %===============================

    %画出频域图

    h=figure(6);

    plot_2way_f_dtft(sig_insert1,sig_insert2);

    set(h,'name','插值QAM符号DTFT频域图');

    %plot_2way_f_dft(sig_insert1,sig_insert2,50);

    %set(h,'name','插值QAM符号DFT频域图');

    %===============================

    %通过低通滤波器

    [sig_rcos1,sig_rcos2]=rise_cos(sig_insert1,sig_insert2,0.25,2);

    %===============================

    %画出两路信号的波形图

    h=figure(7);

    plot_2way(sig_rcos1,sig_rcos2,length(sig_rcos1)/4,0.5);

    set(h,'name','通过低通滤波器后两路信号波形图');

    %===============================

    %画出频域图

    h=figure(8);

    plot_2way_f_dtft(sig_rcos1',sig_rcos2');

    set(h,'name','通过低通滤波器后DTFT频域图');

    %===============================

    %====将基带信号调制到高频上

    [t,sig_modulate]=modulate_to_high(sig_rcos1,sig_rcos2,0.25,2.5);

    h=figure(9);

    %plot(t(1:500),sig_modulate(1:500));

    plot(t,sig_modulate);

    set(h,'name','基带信号调制到高频之后的波形图');

    %===============================

    %====加入高斯白噪声

    snr=10;

    [x1,x2]=generate_noise(sig_rcos1,sig_rcos2,snr);

    sig_noise1=x1';

    sig_noise2=x2';

    h=figure(10);

    plot_2way(sig_noise1,sig_noise2,length(sig_noise1)/4,0.5);

    set(h,'name','加入高斯白噪声之后的波形图');

    %===============================

    %画出频域图

    h=figure(11);

    plot_2way_f_dtft(sig_noise1,sig_noise2);

    set(h,'name','加入高斯白噪声之后DTFT频域图');

    %====经过匹配滤波器

    [sig_match1,sig_match2]=rise_cos(sig_noise1,sig_noise2,0.25,2);

    h=figure(12);

    plot_2way(sig_match1,sig_match2,length(sig_match1)/4,0.5);

    set(h,'name','经过匹配滤波器之后的波形图');

    %===============================

    %画出频域图

    h=figure(13);

    plot_2way_f_dtft(sig_match1',sig_match2');

    set(h,'name','经过匹配滤波器之后DTFT频域图');

    %采样

    [x1,x2]=pick_sig(sig_match1,sig_match2,8);

    sig_pick1=x1;

    sig_pick2=x2;

    %画出星座图

    h=figure(14);

    plot_astrology(sig_pick1,sig_pick2);

    set(h,'name','接收的QAM符号星座图');

    %画出序列波形

    h=figure(15);

    plot_2way_stair(sig_pick1,sig_pick2);

    set(h,'name','接收的QAM符号序列');

    %输出坐标

    fprintf('\nQAM符号的坐标(接收):\n');

    for i=1:length(source1);

    if mod(i,10)==0

    fprintf('\n');

    end

    fprintf('(%.3f,%.3f);',sig_pick1(i),sig_pick2(i));

    end;

    fprintf('\n');

    %===============================

    %画出频域图

    h=figure(16);

    plot_2way_f_dtft(sig_pick1',sig_pick2');

    set(h,'name','接收的QAM符号序列DTFT频域图');

    %解调

    signal=demodulate_sig(sig_pick1,sig_pick2);

    h=figure(17);

    stairs(signal);

    ylim([-1,2]);

    set(h,'name','恢复的二进制序列');

    %误码率

    [number,Pe] = biterr(source,signal);

    fprintf('误码数以及误码率:\n');

    fprintf('%d,%f;\n',number,Pe);

    hold on

    2. QAM传输过程中信噪比与误码率之间的关系

    本实验在前一个实验的基础上,仿真了16QAM传输过程中信噪比与误码率之间的关系。本仿真的大部分代码与前一个实验是一样的,主要的不同点在于它计算了QAM理论的误码率,并且与实际的误码率进行了对比,整个程序的流程简单描述如下:

    (a)     设定信噪比

    (b)     计算16QAM该信噪比下的误码率

    (c)     仿真16QAM该信噪比下的误码率

    (d)     重新设定信噪比,重复(2)(3)步骤

    该仿真实验选择了1-11dB的信噪比对16QAM进行了仿真,仿真的结果如下图所示。

    16QAM信噪比与误码率之间的关系的仿真结果

    从仿真结果图来看,仿真的误码率十分贴近理论的误码率。程序的代码位于plot_qam16_ber.m文件中,代码的内容和前一个实验是类似的,关键代码大致如下。

    % QAM16的信噪比(S/N)与误码率关系图

    %

    % 雷霄骅

    % 中国传媒大学/数字电视技术

    % leixiaohua1020@126.com

    %

    % 本程序可以得到QAM调制中信噪比(S/N)与误码率之间的关系图

    %

    %

    clear;

    close all;

    %白色背景

    set(0,'defaultfigurecolor','w');

    %用来仿真QAM的误bit率

    snr=1:1:11;

    %先来计算理论误bit率

    error_theory=(1-(1-(2*(1-1/sqrt(16))*1/2*erfc(1/sqrt(2)*sqrt(3*4*10.^(snr/10)/(16-1))))).^2)/4;

    %用理论的误bit率来决定需要仿真的点数

    N=floor(1./error_theory)*100+100;

    %最少5000点

    N(find(N<5000))=5000;

    for i=1:length(N);

    %一次仿真,代码略

    end

    figure(4);

    %画出图形

    semilogy(snr,error_bit,'bs-','LineWidth',2);

    hold on

    semilogy(snr,error_theory,'ms-','LineWidth',2)

    legend('仿真','理论');

    xlabel('S/N, dB');

    ylabel('Bit Error Rate (BER)');

    title('信噪比和误码率之间的关系');

    3. 2FSK,2PSK,4PSK,16PSK,16QAM的信噪比与误码率之间的关系对比

    上个实验仿真了16QAM传输过程中信噪比与误码率之间的关系。为了能和其他调制方式做一个对比,本实验仿真了2FSK,2PSK,4PSK,16PSK,16QAM传输过程中信噪比与误码率之间的关系。与前两个实验不同之处在于,本实验没有使用自行编写的程序完成这几种调制方式的仿真,而是使用Matlab的接口函数完成了仿真,实验的结果如下图所示。

    2FSK,2PSK,4PSK,16PSK,16QAM的信噪比与误码率之间的关系对比的仿真结果

    从图中可以看出,在相同信噪比的前提下,不同调制技术之间的误码率关系如下所示:

    2PSK < 4PSK < 2FSK < 16QAM < 16PSK

    程序的源代码如下。

    % 2FSK,2PSK,4PSK,16PSK,16QAM的

    % 信噪比(S/N)与误码率之间的关系对比图

    %

    % 雷霄骅

    % 中国传媒大学/数字电视技术

    % leixiaohua1020@126.com

    %

    % 本程序可以计算得到2FSK,2PSK,4PSK,16PSK,16QAM信噪比

    % 与误码率之间的关系图

    %

    %

    clear;

    close all;

    %白色背景

    set(0,'defaultfigurecolor','w');

    M2=2;

    M4=4;

    M16=16;

    k2=log2(M2);

    k4=log2(M4);

    k16=log2(M16);

    Fs = 16;

    nsamp = 17;

    freq_sep = 8;

    x = randint(10000,1);

    %mod

    y_2fsk = fskmod(x,M2,freq_sep,nsamp,Fs);

    y_2psk = pskmod(x,M2);

    x4 = bi2de(reshape(x,k4,length(x)/k4).','left-msb');

    y_4psk = pskmod(x4,4);

    x16 = bi2de(reshape(x,k16,length(x)/k16).','left-msb');

    y_16psk = pskmod(x16,16);

    y_16qam = qammod(x16,16);

    N=10;

    for j=1:N

    SNR=j;

    %[],'dB'

    y_2fsk_noise = awgn(y_2fsk,SNR-10*log10(Fs),'measured');

    y_2psk_noise = awgn(y_2psk,SNR,'measured');

    y_4psk_noise = awgn(y_4psk,SNR,'measured');

    y_16psk_noise = awgn(y_16psk,SNR,'measured');

    y_16qam_noise = awgn(y_16qam,SNR,'measured');

    %demod

    z_2fsk = fskdemod(y_2fsk_noise,M2,freq_sep,nsamp,Fs);

    z_2psk = pskdemod(y_2psk_noise,M2);

    z_4psk = pskdemod(y_4psk_noise,M4);

    z_16psk = pskdemod(y_16psk_noise,M16);

    z_16qam = qamdemod(y_16qam_noise,M16);

    %x = [1 1 1 1 1];

    %y = [0 0 0 0 1];

    %[number,ratio]=biterr(x,y)得到 number=4,ratio=0.8

    [num_2fsk(j),ber_2fsk(j)] = biterr(x,z_2fsk);

    [num_2psk(j),ber_2psk(j)] = biterr(x,z_2psk);

    [num_4psk(j),ber_4psk(j)] = biterr(x4,z_4psk);

    [num_16psk(j),ber_16psk(j)] = biterr(x16,z_16psk);

    [num_16qam(j),ber_16qam(j)] = biterr(x16,z_16qam);

    end

    %theoryBer = (1/k)*3/2*erfc(sqrt(k*0.1*(10.^(EbNo/10))));

    %semilogy(EbNo,theoryBer,'ms-');

    %hold on;

    semilogy(1:N,ber_2fsk,'-*b');

    hold on;

    semilogy(1:N,ber_2psk,'--dg');

    hold on;

    semilogy(1:N,ber_4psk,'-.dr');

    hold on;

    semilogy(1:N,ber_16psk,'--xk');

    hold on;

    semilogy(1:N,ber_16qam,'-.sk');

    title('不同信噪比下2FSK,2PSK,4PSK,16PSK,16QAM误码性能仿真');

    legend('2FSK','2PSK','4PSK','16PSK','16QAM',3);

    xlabel('S/N,dB');

    ylabel('Bit Error Rate (BER)')

    hold off

    三.下载

    QAM调制与解调仿真(Matlab程序)

    展开全文
  • SystemView是一种适用于通信系统...通过使用SystemView分析窗口观察信号的波形和频谱,我们能直接观测到信号在传输过程中波形和频谱变化,这有助于我们更深刻地理解2FSK调制解调系统工作原理和各个设备功能。
  • 摘 要 本课程设计的目标在于深切理解OQPSK调制与解调的基本原理学会使用 MATALB软件中的M文件来实现OQPSK的调制与解调以及分析加入不同噪声时信 号的影响程度首先产生一个数字基带信号接下来调用MATLAB中的相应...
  • 由于信号经过带通滤波器之后(本文采用的是FIR线性相位数字滤波器)会出现相移,所以不能直接用调制时候的载波信号与此时的band_passed_sig1信号相乘来相干解调,此时用来相干解调的载波应该经过滤波器之后出现...
  • 因为自己就是信号处理专业的学生所以对信号与通信的知识比较了解。最近学习了尤老师的FM调制,感觉对调制的原理有了更进一步的理解,这里想把自己的一些理解放出来做个记录以及载波恢复的扩展,想系统学习软件无线电...

    参考文献

    [1]、V3学院——尤老师
    [2]、网易云课堂

    项目简述

    好久没写博客了,因为这段时间太忙,熟悉博客的同学都应该知道,我的博客每一篇都干货慢慢,从来不水博客。因为自己就是信号处理专业的学生所以对信号与通信的知识比较了解。最近学习了尤老师的FM调制,感觉对调制的原理有了更进一步的理解,这里想把自己的一些理解放出来做个记录以及载波恢复的扩展,想系统学习软件无线电的同学可以联系尤老师。 这个系列我将分为两个章节来完成,一个是载波已知的情况下的相干解调,另一篇博客关于如何从调制之后的信号恢复出载波信号。这篇博客我们讲解基于MATLAB的FM调制解调,这篇文章我们主要分为FM的调制与载波已知情况下的解调。

    先验知识:
    1、通信原理——忘记的同学可以翻看一下通信原理的课本,这篇博客中的代码将于书本上面的模型一摸一样。

    本次实验所用到的软件环境如下:
    1、MATLAB 2015b

    FM调制数学模型

    FM 调频是使载波的频率随调制信号的大小变化而变化, 而振幅保持不变的调制方式。 因为已调信号反映出载波矢量角度上的变化,所以又被称为调角(这里要重点区分一下FM与PM之间的联系与区别)。
    在这里插入图片描述
    上面最重要的知识是基带信号与瞬时频率偏移成线性对应关系 。通过这个知识瞬时频率偏移等于基带信号的线性放大,通过这句话可以直接确定瞬时频率偏移与基带信号的关系,进而确定最终调制之后信号的表达式。

    那么首先以余弦信号的调制解调过程来讲解并且扩展到一般信号中去:
    在这里插入图片描述在这里插入图片描述
    这里对于绝大多数同学不理解的一个地方是,连续域的积分变成了离散域的累加操作,这是符合离散数学原理的,如下:
    在这里插入图片描述
    这里的kfk_f被称为调频灵敏度,是FM中最常出现的一个信号,相信绝大多数的同学不明白调频灵敏度的含义。调频灵敏度说白了就是一个收缩因子,这个因子主要作用是线性控制调制信号所引起的瞬时频率偏移。

    将上式转换为IQ调制,如下图:
    在这里插入图片描述
    在MATLAB与FPGA中sin(wt)cos(wt)sin(wt)、cos(wt)主要式使用DDS产生的信号,那么这里就需要知道如何利用DDS产生如下信号:
    1sin(wct)1、sin(w_ct) 2cos(wct)2、cos(w_ct) 3、cos(kfm(τ))cos(k_f*\sum m(\tau )) 4、cos(kfm(τ))cos(k_f*\sum m(\tau ))

    展开全文
  • 1.假设模拟调制系统基本原理和基本组成的理解 2.熟悉调制解调过程中信号时域和频域特性的变化过程 二、实验原理 1.AM调制: (1)具有离散大载波的双边带调幅又称标准调幅,正弦型载波的幅度将随基带信号成线性...

    一、实验目的
    1.假设对模拟调制系统基本原理和基本组成的理解
    2.熟悉调制和解调过程中信号时域和频域特性的变化过程
    二、实验原理
    1.AM调制:
    (1)具有离散大载波的双边带调幅又称标准调幅,正弦型载波的幅度将随基带信号成线性变化。
    (2)AM信号的频谱与基带信号的频谱呈线性关系,只是将基带信号的频谱从零频线性搬移到±f_c处。如果已调信号的频谱和基带信号的频谱之间呈线性搬移关系,则称该调制方式为线性调制。因此AM调制属于线性调制。
    (3)AM信号的带宽为基带信号带宽的两倍。
    2.DSB调制:
    (1)在AM信号中,载波分量并不携带信息,信息完全由边带传送。如果将载波抑制,则得到抑制载波的双边带调幅信号,简称为DSB信号。
    (2)DSB仍然是线性调制。与AM不同的是,DSB信号的频谱不再含有载频分量离散谱,只包含上、下两个边带。
    (3)DSB信号的解调:由于SSB信号的包络不能直接反映基带信号的变化,所以SSB信号的解调不能采用简单的包络检波,需采用相干解调。将接收到的SSB信号和本地载波相乘,在经过低通滤波器即恢复出基带信号。
    3.SSB调制:
    (1)单边带调幅简称为SSB信号,它只包含上边带或者下边带信号。可以采用边带滤波法和相移法来产生SSB信号。
    (2)其频谱是DSB信号频谱的一个边带
    三、使用仪器、材料
    Matlab
    四、实验步骤
    1.线性调制
    (1)假定调制信号为m(t)=cos2πf_c t,f_m=1kHz, f_c=10kHz;绘制调制信号和载波的时域波形。
    (2)进行DSB调制,S_DSB (t)=m(t)∙c(t):进行AM调制,S_AM (t)=[1+m(t)]∙c(t);绘制DSB已调信号和AM已调信号的波形,并与调制信号波形进行对比。
    (3)用相移法进行SSB调制,分别得到上边带和下边带信号。
    (4)对载波、调制信号、DSB已调信号、AM已调信号和SSB已调信号进行FFT变换,得到其频谱,并绘制出幅度谱。
    2.DSB信号的解调
    (1)用相干解调法对DSB信号进行解调,解调所需相干载波可直接采用调制载波。
    (2)将DSB已调信号与相干载波相乘。
    (3)设计低通滤波器,将乘法器输出中的高频成分滤除,得到解调信号。
    (4)绘制低通滤波器的频率响应。
    (5)对乘法器输出和滤波器输出进行FFT变换,得到频谱。
    (6)绘制解调输出信号波形;绘制乘法器输出和解调器输出信号幅度谱。
    (7)绘制解调载波与发送载波同频但不同相时的解调信号的波形,假设相位偏移分别是π/8、π/4、π/3、π/2。
    五、实验过程原始记录(数据、图表、计算等)
    1.线性调制:
    图1:调制信号和载波的时域波形;图2:AM调制时域波形与频谱
    图3:DSB调制时域波形与频谱; 图4:SSBL调制时域波形与频谱
    图5:SSBR调制时域波形与频谱;

    图1:调制信号和载波的时域波形 图2:AM调制时域波形与频谱
    图3:DSB调制时域波形与频谱 图4:SSBL调制时域波形与频谱
    图5:SSBR调制时域波形与频谱
    2. DSB信号的解调:
    图6:低通滤波器的频率响应
    图7:解调器输出信号的频谱与时域波形
    图8:解调载波与发送载波同频但不同相时的解调信号的波形
    六、实验结果及分析
    略,可关注作者私聊询问

    备注:完整实验代码请查看附件
    https://download.csdn.net/download/YQEMMMM/13092844

    展开全文
  • 2FSK调制技术

    2014-07-06 22:26:07
    本次课程设计主要运用MATLAB软件,在Simulink平台下建立仿真模型,实现模拟基带信号经过2FSK调制与非相干解调的传输过程。通过分析比较调制解调的输出波形,理解2FSK调制原理。通过系统仿真加深通信课程理论的理解...
  • 网络原理以及VM中VMnet0,VMnet1,VMnet8的理解

    千次阅读 多人点赞 2017-11-28 20:56:35
    实现模拟信号与数字信号相互转换,可以忽略成一条网线。  路由器: 提供路由、DHCP、NAT等专门设备,连接不同网络(包括局域网WAN之间连接,提供互联网连接)。   网关: 网关实质上是一个网络通向...
  • 最后,结合通信和信号处理中实际应用,对信号波形产生、FIR和IIR滤波、正交变换(FFT、DCT、DHT、Hilbert变换和小波变换)、语音图像压缩编码、调制/解调、信道编码、LMS和RLS自适应滤波等算法实时DSP设计...
  • VMware Workstation...调制解调器(Modem): 实现模拟信号与数字信号相互转换,可以忽略成一条网线。 路由器: 提供路由、DHCP、NAT等专门设备,连接不同网络(包括局域网WAN之间连接,提供互联网连接)。
  • 调制解调器(Modem): 实现模拟信号与数字信号相互转换,可以忽略成一条网线。 路由器: 提供路由、DHCP、NAT等专门设备,连接不同网络(包括局域网WAN之间连接,提供互联网连接)。 : 交换机和网桥功能...
  • 如果把调制与解调过程看做是广义信道一部分,则任何数据传输系统均可等效为基带传输系统。因而数字基带信号的传输原理是十分重要。通过system view提供仿真环境数字基带传输中某些问题加以仿真、分析,能...
  • 首先是关于IQ数据,这个内容是在信号与系统的课中有介绍,但不巧的是我并没有学过这门课所以本文的介绍就基于我个人的理解来进行。IQ信号是什么先说说IQ数据是用来干什么的。在通信系统中,通信所用的电磁波最基本的...
  • 来自: http://hi.baidu.com/xiao1988618/blog/item/8b06f00189943589e950cdd2.html<br />  我VMware Workstation虚拟网络VMnet0、VMnet... 术语 调制解调器(Modem): 实现模拟信号与数字信号相互
  • 基于 MATLAB 的 MPSK 性能分析 摘要 通信系统中的数字调制技术是通信信息...点因此相移键控信号调制解调原理的掌握有助于加深对调制技术的理解深入 学习新型的调制技术有指导作用本文首先介绍数字通信系统
  • 基于MATLAB的通信系统仿真程序设计 QPSK同步 摘 要 介绍了数字通信中的QPSK调制同步和解调的原理,通过用MATLAB编写脚本程序QPSK通信系统的发射同步和接收过程的具体实现进行模拟仿真,并运行M文件绘出信号在理想...
  • 网络原理,以及VMware Workstation虚拟网络VMnet0、VMnet1、VMnet8图解 ... 1. 文中符号说明:  : 可以理解成A,也可以理解成B。... 调制解调器(Modem): 实现模拟信号与数字信号相互转换,可

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

对信号调制与解调的理解