通信原理与MATLAB(十二):MSK的调制解调 您所在的位置:网站首页 数字调制系统模型怎么做 通信原理与MATLAB(十二):MSK的调制解调

通信原理与MATLAB(十二):MSK的调制解调

2024-07-03 22:29| 来源: 网络整理| 查看: 265

目录 1.MSK的调制原理2.MSK的解调原理3.MSK代码4.结果图5.特点

1.MSK的调制原理

MSK调制原理如下图所示,基带码元先差分编码,然后经过串并转换分成I、Q两路,再与对应的载波相乘,然后再相加完成MSK的调制。 其中注意:I、Q两路码元分别是差分编码后的相对码的奇数和偶数位置上的码元,I路对应于奇数,Q路对应于偶数。而pk是I路码元,但是其码元宽度Tb是相对码的码元宽度Ts的两倍,并且延时一个Ts;而qk是Q路码元,其码元宽度Tb也是相对码码元宽度Ts的两倍。 例如,绝对码元是10001,如果参考电平是1,那么相对码元是100001,然后经过单极性码变为双极性码,1转换成1,0转换成-1,则I路码元是1 -1 -1,Q路码元是-1 -1 1。pk也是1 -1 -1,但是pk的码元宽度Tb是相对码的码元宽度Ts的两倍,并且延时Ts。而qk是-1 -1 1,但是qk的码元宽度Tb是相对码的码元宽度Ts的两倍。 在这里插入图片描述 在这里插入图片描述

2.MSK的解调原理

MSK的解调原理如下图所示,MSK信号再分为I、Q两路和对应的载波相乘,然后经过低通滤波器后进行抽样判决,判决之后的I、Q路码元进行合并,I路为最终码元序列的奇数位置码元,Q路为最终码元序列的偶数位置码元,然后进行解差分编码,恢复出原始的码元序列。 在这里插入图片描述

3.MSK代码 clear all; % 清除所有变量 close all; % 关闭所有窗口 clc; % 清屏 %% 基本参数 M=11; % 产生码元数 L=100; % 每码元复制L次,每个码元采样次数 Ts=0.001; % 每个码元的宽度,即码元的持续时间 Rb=1/Ts; % 码元速率1K dt=Ts/L; % 采样间隔 TotalT=M*Ts; % 绝对码总时间 t=0:dt:TotalT-dt; % 时间1 TotalT2=(M+1)*Ts; % 相对码总时间 t2=0:dt:TotalT2-dt; % 时间2 Fs=1/dt; % 采样间隔的倒数即采样频率 %% 产生单极性波形 wave=randi([0,1],1,M); % 产生二进制随机码,M为码元个数 %% 绝对码变相对码 wave2=ones(1,M+1); % 产生1*(M+1)的全1行向量 %% 相对码第一个参考值为1,相对码b(n+1)=绝对码a(n)和相对码b(n)做异或 for k = 2:M+1 wave2(k) = xor(wave(k-1),wave2(k-1));%生成相对码 end fz=ones(1,L); % 定义复制的次数L,L为每码元的采样点数 x1=wave(fz,:); % 将原来wave的第一行复制L次,称为L*M的矩阵 juedui=reshape(x1,1,L*M); % 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵 x2=wave2(fz,:); % 将原来wave2的第一行复制L次,称为L*(M+1)的矩阵 jidai=reshape(x2,1,L*(M+1));% 将刚得到的L*(M+1)矩阵,按列重新排列形成1*(L*(M+1))的矩阵 %% 单极性变为双极性 % 基带信号变为双极性即jidai为1的时候,jidai为1;jidai为0的时候,jidai为-1 for n=1:length(jidai) if jidai(n)==1 jidai(n)=1; else jidai(n)=-1; end end %% 产生I、Q两路码元 I_lu=wave2(1:2:end); % 相对码的奇数位置为I路码元 Q_lu=wave2(2:2:end); % 相对码的偶数位置为Q路码元 %% I、Q两路单极性码元变为双极性码元 I_lu=2*I_lu-1; Q_lu=2*Q_lu-1; %%I、Q两路码元的单个码元的持续时间是原始码元中单个码元的两倍,Tb=2Ts,并且I路码元延时Ts fz2=ones(1,2*L); % 定义复制的次数2L x3=I_lu(fz2,:); % 将原来I_lu的第一行复制2L次,称为2L*((M+1)/2)的矩阵 I=reshape(x3,1,(2*L)*((M+1)/2));% 将刚得到的2L*((M+1)/2)矩阵,按列重新排列形成1*(2L*((M+1)/2))的矩阵 x4=Q_lu(fz2,:); % 将原来Q_lu的第一行复制2L次,称为2L*((M+1)/2)的矩阵 Q=reshape(x4,1,(2*L)*((M+1)/2));% 将刚得到的2L*((M+1)/2)矩阵,按列重新排列形成1*(2L*((M+1)/2))的矩阵 I_yanshi=zeros(1,length(I));% 产生1*length(I)的零向量 % I路延时Ts,即I路1至L置零,原来1至(2*L)*((M+1)/2)-L的数移动到L+1至最后 I_yanshi(L+1:end)=I(1:(2*L)*((M+1)/2)-L); %% 绘制码元波形 figure(1); % 绘制第1幅图 subplot(411); % 窗口分割成4*1的,当前是第1个子图 plot(t,juedui,'LineWidth',2);% 绘制绝对码元波形,线宽为2 title('绝对码信号波形'); % 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 axis([0,TotalT,-1.1,1.1]) % 坐标范围限制 subplot(412); % 窗口分割成4*1的,当前是第2个子图 plot(t2,jidai,'LineWidth',2);% 绘制相对码元波形,线宽为2 title('相对码信号波形'); % 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 axis([0,TotalT2,-1.1,1.1]) % 坐标范围限制 subplot(413); % 窗口分割成4*1的,当前是第3个子图 plot(t2,I,'LineWidth',2); % 绘制I路码元波形,线宽为2 title('I路信号波形'); % 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 axis([0,TotalT2,-1.1,1.1]) % 坐标范围限制 subplot(414); % 窗口分割成4*1的,当前是第4个子图 plot(t2,Q,'LineWidth',2); % 绘制Q路码元波形,线宽为2 title('Q路信号波形'); % 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 axis([0,TotalT2,-1.1,1.1]) % 坐标范围限制 %% MSK调制 fc1=4000; % 载波1频率4kHz fc2=1/(4*Ts); % 载波2频率1/(4*Ts) zb1=cos(2*pi*fc1*t2); % 同相载波1 zb2=-sin(2*pi*fc1*t2); % 正交载波1 zb3=cos(2*pi*fc2*t2); % 同相载波2 zb4=sin(2*pi*fc2*t2); % 正交载波2 I_wave=I_yanshi.*zb1; I_wave=I_wave.*zb3; % I路波形 Q_wave=Q.*zb2; Q_wave=Q_wave.*zb4; % Q路波形 msk=I_wave+Q_wave; % MSK的调制 figure(2); % 绘制第2幅图 subplot(411) % 窗口分割成4*1的,当前是第1个子图 plot(t2,I_wave,'LineWidth',2);% 绘制I路信号的波形 title('I路信号波形') % 标题 axis([0,TotalT2,-1.1,1.1]); % 坐标范围限制 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 subplot(412) % 窗口分割成4*1的,当前是第2个子图 plot(t2,Q_wave,'LineWidth',2);% 绘制Q路信号的波形 title('Q路信号波形') % 标题 axis([0,TotalT2,-1.1,1.1]); % 坐标范围限制 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 subplot(413) % 窗口分割成4*1的,当前是第3个子图 plot(t2,msk,'LineWidth',2); % 绘制MSK的波形 title('MSK信号波形') % 标题 axis([0,TotalT2,-1.1,1.1]); % 坐标范围限制 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 %% 信号经过高斯白噪声信道 tz=awgn(msk,20); % 信号msk中加入白噪声,信噪比为SNR=20dB subplot(414); % 窗口分割成4*1的,当前是第4个子图 plot(t2,tz,'LineWidth',2); % 绘制MSK信号加入白噪声的波形 axis([0,TotalT2,-1.5,1.5]); % 坐标范围设置 title('通过高斯白噪声信道后的信号');% 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 %% 解调部分 jt1=tz.*zb1.*zb3; % 相干解调,I路乘以相干载波 jt2=tz.*zb2.*zb4; % 相干解调,Q路乘以相干载波 figure(3); % 绘制第3幅图 subplot(511) % 窗口分割成5*1的,当前是第1个子图 plot(t2,jt1,'LineWidth',2) % 绘制I路乘以相干载波后的信号 axis([0,TotalT2,-1.5,1.5]); % 设置坐标范围 title("I路乘以相干载波后的信号")% 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 subplot(512) % 窗口分割成5*1的,当前是第2个子图 plot(t2,jt2,'LineWidth',2) % 绘制Q路乘以相干载波后的信号 axis([0,TotalT2,-1.5,1.5]); % 设置坐标范围 title("Q路乘以相干载波后的信号")% 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 %% 加噪信号经过滤波器 % 低通滤波器设计 fp=2*Rb; % 低通滤波器截止频率,乘以2是因为下面要将模拟频率转换成数字频率wp=Rb/(Fs/2) b=fir1(30, fp/Fs, boxcar(31));% 生成fir滤波器系统函数中分子多项式的系数 % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型 % 这里是生成了30阶(31个抽头系数)的矩形窗滤波器 [h,w]=freqz(b, 1,512); % 生成fir滤波器的频率响应 % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512 lvbo1=fftfilt(b,jt1); % 对信号进行滤波,jt是等待滤波的信号,b是fir滤波器的系统函数的分子多项式系数 lvbo2=fftfilt(b,jt2); % 对信号进行滤波,jt是等待滤波的信号,b是fir滤波器的系统函数的分子多项式系数 subplot(513); % 窗口分割成5*1的,当前是第5个子图 plot(w/pi*Fs/2,20*log(abs(h)),'LineWidth',2); % 绘制滤波器的幅频响应 title('低通滤波器的频谱'); % 标题 xlabel('频率/Hz'); % x轴标签 ylabel('幅度/dB'); % y轴标签 subplot(514) % 窗口分割成5*1的,当前是第4个子图 plot(t2,lvbo1,'LineWidth',2);% 绘制I路经过低通滤波器后的信号 axis([0,TotalT2,-1.1,1.1]); % 设置坐标范围 title("I路经过低通滤波器后的信号");% 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 subplot(515) % 窗口分割成5*1的,当前是第5个子图 plot(t2,lvbo2,'LineWidth',2);% 绘制Q路经过低通滤波器后的信号 axis([0,TotalT2,-1.1,1.1]); % 设置坐标范围 title("Q路经过低通滤波器后的信号");% 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 %% 抽样判决 % 滤波后的信号大于0,判决为1,小于0,判决为-1 for i=1:length(lvbo1) if lvbo1(i)>0 pdst1(i)=1; else pdst1(i)=-1; end end for i=1:length(lvbo2) if lvbo2(i)>0 pdst2(i)=1; else pdst2(i)=-1; end end % 取码元的中间位置上的值进行判决,由于I路延时了Ts,因此第一个抽样值为2L,间隔为2L % Q路第一个抽样值为L,间隔为2L I_panjue=[]; Q_panjue=[]; for j=(2*L):(2*L):((2*L)*((M+1)/2)) if pdst1(j)>0 I_panjue=[I_panjue,1]; else I_panjue=[I_panjue,-1]; end end for j=L:(2*L):((2*L)*((M+1)/2)) if pdst2(j)>0 Q_panjue=[Q_panjue,1]; else Q_panjue=[Q_panjue,-1]; end end x5=I_panjue(fz2,:); % 将原来I_panjue的第一行复制2L次,称为2L*((M+1)/2)的矩阵 I_zong=reshape(x5,1,(2*L)*((M+1)/2));% 将刚得到的2L*((M+1)/2)矩阵,按列重新排列形成1*(2L*((M+1)/2))的矩阵 x6=Q_panjue(fz2,:); % 将原来Q_panjue的第一行复制2L次,称为2L*((M+1)/2)的矩阵 Q_zong=reshape(x6,1,(2*L)*((M+1)/2));% 将刚得到的2L*((M+1)/2)矩阵,按列重新排列形成1*(2L*((M+1)/2))的矩阵 figure(4) % 绘制第4幅图 subplot(411) % 窗口分割成4*1的,当前是第1个子图 plot(t2,I_zong,'LineWidth',2)% 画出经过抽样判决后的信号 axis([0,TotalT2,-1.1,1.1]); % 设置坐标范用 title("I路经过抽样判决后的信号")% 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 subplot(412) % 窗口分割成4*1的,当前是第2个子图 plot(t2,Q_zong,'LineWidth',2)% 画出经过抽样判决后的信号 axis([0,TotalT2,-1.1,1.1]); % 设置坐标范用 title("Q路经过抽样判决后的信号")% 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 % 将I路码元为最终输出的奇数位置码元,将Q路码元为最终输出的偶数位置码元 code=[]; for n=1:(M+1) if mod(n, 2)~=0 code = [code, I_panjue((n+1)/2)]; else code = [code, Q_panjue(n/2)]; end end x7=code(fz,:); % 将原来code的第一行复制L次,称为L*(M+1)的矩阵 dout=reshape(x7,1,L*(M+1)); % 将刚得到的L*(M+1)矩阵,按列重新排列形成1*(L*(M+1))的矩阵 subplot(413) % 窗口分割成4*1的,当前是第3个子图 plot(t2,dout,'LineWidth',2) % 画出经过抽样判决后的信号 axis([0,TotalT2,-1.1,1.1]); % 设置坐标范用 title("恢复的相对码波形") % 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 %% 相对码变绝对码 yuanma=ones(1,M); for i=1:(M+1) if code(i)==1 code(i)=1; else code(i)=0; end end for k=1:M yuanma(k)=xor(code(k),code(k+1)); end x8=yuanma(fz,:); % 将原来yuanma的第一行复制L次,称为L*M的矩阵 yuanma_wave=reshape(x8,1,L*M);% 将刚得到的L*M+矩阵,按列重新排列形成1*(L*M)的矩阵 subplot(414) % 窗口分割成4*1的,当前是第3个子图 plot(t,yuanma_wave,'LineWidth',2) % 画出经过抽样判决后的信号 axis([0,TotalT,-1.1,1.1]); % 设置坐标范用 title("恢复的绝对码波形") % 标题 xlabel('时间/s'); % x轴标签 ylabel('幅度'); % y轴标签 %% 绘制频谱 %% 信源频谱 T=t2(end); % 时间 df=1/T; % 频谱分辨率 N=length(jidai); % 采样长度 f=(-N/2:N/2-1)*df; % 频率范围 mf=fftshift(abs(fft(jidai)));%对信源信号采用快速傅里叶变换并移到矩阵中心 figure(5) % 绘制第5幅图 subplot(211); % 窗口分割成2*1的,当前是第1个子图 plot(f,mf,'LineWidth',2); % 绘制信源频谱波形 title("基带信号频谱"); % 标题 xlabel('频率/Hz'); % x轴标签 ylabel('幅度'); % y轴标签 %% MSK信号频谱 sf=fftshift(abs(fft(msk)));% 对MSK信号采用快速傅里叶变换并将0-fs频谱移动到-fs/2-fs/2 subplot(212) % 窗口分割成2*1的,当前是第2个子图 plot(f,sf,'LineWidth',2) % 绘制MSK调制信号频谱 title("MSK信号频谱") % 标题 xlabel('频率/Hz'); % x轴标签 ylabel('幅度'); % y轴标签 %% 乘以相干载波后的频谱 mmf=fftshift(abs(fft(jt1)));% 对I路相干载波信号采用快速傅里叶变换并移到矩阵中心 mmf2=fftshift(abs(fft(jt2)));% 对Q路相干载波信号采用快速傅里叶变换并移到矩阵中心 figure(6) % 绘制第6幅图 subplot(211); % 窗口分割成2*1的,当前是第1个子图 plot(f,mmf,'LineWidth',2) % 画出I路乘以相干载波后的频谱 title("I路乘以相干载波后的频谱")% 标题 xlabel('频率/Hz'); % x轴标签 ylabel('幅度'); % y轴标签 subplot(212); % 窗口分割成2*1的,当前是第2个子图 plot(f,mmf2,'LineWidth',2) % 画出Q路乘以相干载波后的频谱 title("Q路乘以相干载波后的频谱")% 标题 xlabel('频率/Hz'); % x轴标签 ylabel('幅度'); % y轴标签 %% 经过低通滤波后的频谱 dmf=fftshift(abs(fft(lvbo1)));%对I路低通滤波信号采用快速傅里叶变换并移到矩阵中心 dmf2=fftshift(abs(fft(lvbo2)));%对Q路低通滤波信号采用快速傅里叶变换并移到矩阵中心 figure(7); % 绘制第7幅图 subplot(211); % 窗口分割成2*1的,当前是第1个子图 plot(f,dmf,'LineWidth',2) % 画出I路经过低通滤波后的频谱 title("I路经过低通滤波后的频谱");% 标题 xlabel('频率/Hz'); % x轴标签 ylabel('幅度'); % y轴标签 subplot(212); % 窗口分割成2*1的,当前是第2个子图 plot(f,dmf2,'LineWidth',2) % 画出Q路经过低通滤波后的频谱 title("Q路经过低通滤波后的频谱");% 标题 xlabel('频率/Hz'); % x轴标签 ylabel('幅度'); % y轴标签 4.结果图

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

5.特点

最小移频键控(MSK)信号是一种包络恒定、相位连续、带宽最小,并 且严格正交的2FSK信号,抗干扰能力强。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有