基于matlab实现MSK的调制与解调

基于matlab实现MSK的调制与解调

  • 1.MSK
  • 2.matlab代码实现MSK调制与解调
    • filter的创建
  • 3.实验结果

1.MSK

最小频移键控MSK (Minimum Shift Keying)是一种改变波载频率来传输信息的调制技术,即特殊的连续相位的频移键控 (CPFSK)。其最大频移为比特速率的1/4,即MSK是调制系数为0.5的连续相位的FSK。
介绍:
在数字调制中,最小频移键控(Minimum-Shift Keying,缩写:MSK)是一种连续相位的频移键控方式,在1950年代末和1960年代产生。与偏移四相相移键控(OQPSK)类似,MSK同样将正交路基带信号相对于同相路基带信号延时符号间隔的一半,从而消除了已调信号中180°相位突变的现象。与OQPSK不同的是, MSK采用正弦型脉冲代替了OQPSK基带信号的矩形波形,因此得到恒定包络的调制信号,这有助于减少非线性失真带来的解调问题
调制方式:
在FSK方式中,相邻码元的频率不变或者跳变一个固定值。在两个相邻的频率跳变的码元之间,其相位通常是不连续的。MSK是对FSK信号作某种改进,使其相位始终保持连续不变的一种调制。
MSK又称快速移频键控(FFSK)。这里“最小”指的是能以最小的调制指数(即0.5)获得正交信号;而“快速”指的是对于给定的频带,它能比PSK传送更高的比特速率。
MSK是一种在无线移动通信中很有吸引力的数字调制方式,它具有以下两种主要的特点:
信号能量的99.5%被限制在数据传输速率的1.5倍的带宽内。谱密度随频率(远离信号带宽中心)倒数的四次幂而下降,而通常的离散相位FSK信号的谱密度却随频率倒数的平方下降。因此,MSK信号在带外产生的干扰非常小。这正是限带工作情况下所希望有的宝贵特点。
信号包络是恒定的,系统可以使用廉价高效的非线性器件。
MSK调制方式是数字调制技术的一种。数字调制是数字信号转换为与信道特性相匹配的波形的过程。调制过程就是输入数据控制(键控)载波的幅度、频率和相位。
MSK属于恒包络数字调制技术。现代数字调制技术的研究,主要是围绕着充分的节省频谱和高效率地利用可用频带这个中心而展开的。随着通信容量的迅速增加,致使射频频谱非常拥挤,这就要求必须控制射频输出信号的频谱。但是由于现代通信系统中非线性器件的存在,引入了频谱扩展,抵消了发送端中频或基带滤波器对减小带外衰减所做的贡献。这是因为器件的非线性具有幅相转换(AM/PM)效应,会使己经滤除的带外分量几乎又都被恢复出来了。为了适应这类信道的特点,必须设法寻找一些新的调制方式,要求它所产生的己调信号,经过发端带限后,虽然仍旧通过非线性器件,但是,非线性器件输出信号只产生很小的频谱扩展。

2.matlab代码实现MSK调制与解调

首先给出代码:

clear all;clc;
N=20;  % The number of bits
T=1;   % The bit period
fc=10; % The carrier frequency
Fs=100;   % the sample frequency
bitstream=randi([0,1],1,N);  % randomly generate the bitstream
bitstream1=2*bitstream-1;  % 0 to -1; 1 to 1
% encode
b0=1;
for i=1:N
    encode_output(i)=b0*bitstream1(i);
    b0=encode_output(i);
end
I=[];Q=[];
for i=1:N
    if mod(i,2)~=0
        I=[I,encode_output(i)];
    else
        Q=[Q,encode_output(i)];
    end
end 
% using plot to compare bitsteam, I, Q
bit_data=[];
for i=1:N
    bit_data=[bit_data,encode_output(i)*ones(1,T*Fs)];
end
 I_data=[];Q_data=[];base_wave=-T:1/Fs:T-1/Fs;
for i=1:N/2
    I_data=[I_data,I(i)*cos(pi*base_wave/(2*T))];
    Q_data=[Q_data,Q(i)*cos(pi*base_wave/(2*T))];
end
% Q delay
number_delay=length(base_wave)/2;
Q_data1=[zeros(1,number_delay),Q_data(1:length(Q_data)-number_delay)];
% plot
figure();
t=0:1/Fs:N*T-1/Fs;
subplot(3,1,1)
plot(t,bit_data);legend('Bitstream')
subplot(3,1,2)
plot(t,I_data);legend('I Bitstream')
subplot(3,1,3)
plot(t,Q_data1);legend('Q Bitstream')
% carrier signal 
bit_t=0:1/Fs:N*T-1/Fs;
I_carrier=cos(2*pi*fc*bit_t);
Q_carrier=cos(2*pi*fc*bit_t+pi/2);
% transmit signal
MSK_signal=I_data.*I_carrier+Q_data1.*Q_carrier;
 
snr=1;  % signal to noise rate 
% Receive singal 
MSK_receive=awgn(MSK_signal,snr);
% demodulate 
I_output=MSK_receive.*I_carrier;
 
Hd=filter;
I_filter_ouput=filter(Hd,I_output);
Q_output=MSK_receive.*Q_carrier;
Q_filter_ouput=filter(Hd,Q_output);
 
for i=1:N/2
    if I_filter_ouput((2*i-1)*number_delay)>0
        I_recover(i)=1;
    else
        I_recover(i)=-1;
    end
    if Q_filter_ouput(2*i*number_delay)>0
        Q_recover(i)=1;
    else
        Q_recover(i)=-1;
    end
end
bit_recover=[];
for i=1:N
    if mod(i,2)~=0
        bit_recover=[bit_recover,I_recover((i-1)/2+1)];
    else
        bit_recover=[bit_recover,Q_recover(i/2)];
    end
end
 
% decode
for i=1:N
    if i==1
        bit_recover1(i)=bit_recover(i);
    else
        bit_recover1(i)=bit_recover(i)*bit_recover(i-1);
    end
end
% using plot to compare bitsteam, I, Q
recover_data=[];
for i=1:N
    recover_data=[recover_data,bit_recover1(i)*ones(1,T*Fs)];
end
 
% plot 
figure();
t=0:1/Fs:N*T-1/Fs;
bit_stream=[];
for i=1:N
    bit_stream=[bit_stream,bitstream1(i)*ones(1,T*Fs)];
end
subplot(2,1,2)
plot(t,bit_stream);legend('original Bitstream')
subplot(2,1,1)
plot(t,recover_data);legend('recover Bitstream')

其中filter是需要自己创建的低通滤波器

filter的创建

1.首先在matlab命令行输入
在这里插入图片描述
2.自己设置参数然后点击file创建函数
点击file
点击generate matlab code
点击filter designer function
文件命令filter(自己随意命令)
基于matlab实现MSK的调制与解调_第1张图片
基于matlab实现MSK的调制与解调_第2张图片
执行代码

3.实验结果

基于matlab实现MSK的调制与解调_第3张图片
基于matlab实现MSK的调制与解调_第4张图片
对于实验结果我也不太了解,只是为了记录一下学习内容,所以这里就不过多解释误人子弟啦
对MSK感兴趣的小伙伴可自己去查询相关资料
基于matlab实现MSK的调制与解调_第5张图片

你可能感兴趣的:(matlab,MSK)