目录

  • 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+1wave2(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)==1jidai(n)=1;elsejidai(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)>0pdst1(i)=1;elsepdst1(i)=-1;end
endfor i=1:length(lvbo2)if lvbo2(i)>0pdst2(i)=1;elsepdst2(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)>0I_panjue=[I_panjue,1];elseI_panjue=[I_panjue,-1];end
endfor j=L:(2*L):((2*L)*((M+1)/2))if pdst2(j)>0Q_panjue=[Q_panjue,1];elseQ_panjue=[Q_panjue,-1];end
endx5=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)~=0code = [code, I_panjue((n+1)/2)];elsecode = [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)==1code(i)=1;else code(i)=0;end
endfor k=1:Myuanma(k)=xor(code(k),code(k+1));
endx8=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信号,抗干扰能力强。

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

  1. 通信原理与MATLAB(十四):HDB3的编解码

    目录 1.HDB3码的编码原理 2.HDB3码的解码原理 3.HDB3码的编解码的代码 4.HDB3码的误码率曲线 4.1原理 4.2 HDB3码的误码率曲线的代码 4.3 HDB3码的误码率曲线图 ...

  2. 通信原理与MATLAB(十):QPSK的调制解调

    目录 1.QPSK的调制原理 2.QPSK的解调原理 3.QPSK代码 4.结果图 5.特点 1.QPSK的调制原理 QPSK调制原理如下图所示,QPSK相当于两个正交的BPSK相加而成.其调制原理是 ...

  3. 【通信原理】实验五 基于Matlab的2ASK和2FSK调制解调

    目录 一.实验目的 二.实验器材 三.实验原理 1.二进制振幅键控(2ASK) 2.二进制频移键控(2FSK) 四.示例演示 1.2ASK的模拟调制程序如下: 2.2ASK的开关键控法,调制程序如下: ...

  4. 【全套完结】通信原理----全套Matlab仿真实验报告

    目录 实验一.基于Matlab的模拟信号的调制和解调 实验二.角度调制实验 实验三.数字基带码型产生实验 实验四.数字基带信号的眼图实验 实验五.基于Matlab的2ASK和2FSK调制解调 实验六. ...

  5. 计算机多媒体应用技术ppt课件ppt,多媒体计算机技术原理及应用十二课件.ppt

    <多媒体计算机技术原理及应用十二课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<多媒体计算机技术原理及应用十二课件.ppt>文档请在天天文库 ...

  6. simulink 汉明码 用法_通信原理及MATLAB/Simulink仿真

    通信原理及MATLAB/Simulink仿真 作 者:张水英,徐伟强 著 出版时间:2012 丛编项:21世纪高等院校信息与通信工程规划教材·高校系列 内容简介 <21世纪高等院校信息与通信工程 ...

  7. 通信原理与MATLAB(二):DSB的调制解调

    目录 1.DSB的调制原理 2.DSB的解调原理 3. DSB调制解调的代码 4.DSB调制解调结果图 5.DSB的优缺点 1.DSB的调制原理 DSB和AM相差一个直流量,因此其调制原理如下图所示, ...

  8. 通信原理抽样定理MATLAB实验报告,通信原理抽样定理实验报告

    与<通信原理抽样定理实验报告>相关的范文 通信原理软件实验报告 学 院:信息与通信工程学院 班 级: 班内序号: 学生姓名: 学 号: 实验二 时域仿真精度分析 一[实验目的] 1. 了解 ...

  9. 基于matlab的通信原理,基于Matlab的通信原理

    基于Matlab的通信原理Tag内容描述: 1.基于基于 MATLABMATLAB 的眼图仿真的眼图仿真 及其与通信实验箱之结果的比较及其与通信实验箱之结果的比较 摘要摘要 通信实验往往可以从硬件和软 ...

最新文章

  1. 关于fmincon和cvx
  2. 对一组同构对象用单数组表示法实现(算法导论第十章10.3-2)
  3. 本地安装Docker
  4. 复练-关于面试的科技树-V1004-求职面试的阶段和策略
  5. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)
  6. bzoj4772 显而易见的数论
  7. NoSQL技术入门简介
  8. 什么程度才算精通 Linux?
  9. angularjs directive指令 link在渲染完成之后执行
  10. 宇宙最强vscode教程(基础篇)
  11. jdk HashSet源码解读
  12. Java基础知识笔记第八章:常用的实体类
  13. 用Java实现一个视频聊天软件
  14. JAVA如何校验txt的文本编码格式
  15. 利用SEQ2SEQ模型实现车牌识别
  16. 服务器操作系统套什么定额,数据库服务器套什么定额
  17. 小功率太阳能UPS锂电池传感器供电系统套件充电宝不间断电源 5V12V户外监控
  18. PPT2016内嵌Excel的动态图表
  19. windows命令行工具
  20. 服务器虚拟机控制台打不开,OpenStack虚拟机控制台打不开

热门文章

  1. 极简主义的思想内核-奥卡姆剃刀原则
  2. pta初级题库题解1~50
  3. 从小白视角理解“数据挖掘十大算法”
  4. mysql8.0 my.cnf只读_MySQL8.0 my.cnf踩坑记录
  5. 离线数仓模型构建的简单见解
  6. Python 中错误 ConnectionError: Max retries exceeded with url
  7. 神经网络设计(10)——性能曲面和最优点
  8. 重磅!产品经理薪资报告2021.PDF
  9. hifi功放有很高的技术含量吗?
  10. GHOST 安装系统教程