msk调制解调matlab程序
时间: 2023-05-15 19:03:57 浏览: 287
MSK调制的matlab程序
4星 · 用户满意度95%
基本原理
MSK是一种正交频移键控(OQPSK)的一种调制方式,其中,载波频率按每个比特变化而变化。每个比特的频率移动必须为半个符号波长,以确保频率跨越两个载波周期。这种调制方案几乎免疫线性失真。由于Ms-K的失真效应非常小,因此在多路径或带限信道中使用非常有效。对于常数符号速率,每个符号为两个比特,因此从预定义移相角度期望移相角的幅度则为pi/2。
MSK模型
这是一个使用MATLAB进行MSK调制的示例。
function [s, dmod] = msk_mod(msg)
% % % % % 已知的参数 % % % % %
fc = 20e3; % % % % 载频
fs = 200e3; % 采样速率
Rs = 10e3; % 符号速率
T = 1/Rs; % % 一条正弦波的周期
ns = T*fs; % % 每个符号中的样本数
n = length(msg); % % 消息比特数
t = (0:n-1)*T; % % 时间向量
ak = 2*msg-1; % % 生成+1 / -1数列
% % % % % MSK调制 % % % % %
f_dev = Rs/2; % % 频率偏差
dphi = pi/2; % % 惯性相位偏移
s = zeros(1,n*ns); % % 为信号分配空间
p = 1; % % 信号中位置的计数器
for i = 1:ns:n*ns
% 对于每个符号,取前半个周期用于调制
s(i:i+ns/2-1) = ak((i-1)/ns+1) * sin(2*pi*fc*t(i:i+ns/2-1)+dphi);
% 调制完第一半周期后移动相位
dphi = dphi + pi*f_dev*T;
% 记录相位偏移到下一周期
dphi = mod(dphi,2*pi);
% 取后半个周期
s(i+ns/2:i+ns-1) = ak((i-1)/ns+1) * sin(2*pi*fc*t(i+ns/2:i+ns-1)+dphi);
end
% % % % % MSK解调 % % % % %
dmod = zeros(1,n);
dphi = pi/2; % % 初始相位偏移
for i = 1:n
% 首先提取当前符号的两个相邻采样点
y1 = s((i-1)*ns+1);
y2 = s(i*ns);
% 求解两个样本之间的相位差
theta = atan2(y2,-y1);
% 考虑到相位的一周性,将值调整到0到2π之间
if theta < 0
theta = theta + 2*pi;
end
% 将相位差除以符号速率,确定上一个符号的值。
dmod(i) = round(theta/(pi/2));
end
% 将+1 / -1数列转换为比特序列
dmod = (dmod+1)/2;
end
重点是s函数,其中信号向量s大小为1的ns*n行矩阵。在循环中,它首先生成前半个周期的调制信号,然后将相位偏移(dphi)到第二个周期。稍后,将第二个周期中的信号附加到信号向量s。MSK解调程序中的关键部分通过计算当前样本和下一个样本之间的相位差,然后将其舍入到最接近的pi/2的整数来计算每个接收符号的值。
阅读全文