GMSK调制matlab代码
时间: 2023-10-21 15:06:25 浏览: 109
以下是GMSK调制的MATLAB代码:
```matlab
function [out]=code_expand(d,M)
N=length(d); %基带信号码元长度
z=zeros(M,N); %矩阵M为采样点 N为基带信号码元数量
z(1,:)=d; %将零矩阵第一行替换成基带信号中的8个码元
zero_replace=reshape(z,1,M*N); % 1行 m*n 列
temp = conv(zero_replace,ones(1,M));
out = temp(1:N*M);
end
% 高斯曲线
function J_g = gauss_wave(n)
peak = 1; %波峰值 peak=1/(sqrt(2*pi)*sigma)
sigma=(1/(peak*sqrt(2*pi)));
a=sigma*6; %对称轴,离对称轴3*sigma的值就已经接近于0了
x=0:a*2/n:a*2-a*2/n;
gaussf=peak*exp(-((x-a).^2)/(2*sigma^2));
J_g=zeros(1,length(gaussf));
for i=1:length(gaussf)
if i==1
J_g(i)=gaussf(i)*(a*2/n);
else
J_g(i)=J_g(i-1) gaussf(i)*(a*2/n);
end
end
J_g=J_g./2;
end
code = [1 1 1 -1 1 -1 1 -1 -1 -1 -1 1 1 -1];%码元
n = length(code); %码元数量
fn= 64; %每个码元采样点数
L = 5; %码元关联数量
Fs_num = fn*(n*L);%总的采样数
x = 1:fn*(n*L);
J_g=gauss_wave(fn*L);%相位变化函数
c = zeros(1,Fs_num); % 单个码元对相位的印象
p = zeros(1,Fs_num); % 统计总的相位影响
for i=1:n %第i个码元对相位的影响
if(code(i)==1)
for j=1:Fs_num
if(j<=(i-1)*fn)
c(j)=0;
elseif(j<=(i+L-1)*fn)
c(j)=J_g(j-(i-1)*fn);
else
c(j)=0.5;
end
end
else
for k=1:Fs_num
if(k<=(i-1)*fn)
c(k)=0;
elseif(k<=(i+L-1)*fn)
c(k)=-J_g(k-(i-1)*fn);
else
c(k)=-0.5;
end
end
end
p = p + c;
end
out = p;
```
这段代码实现了GMSK调制。首先,`code_expand`函数用于扩展码元。然后,`gauss_wave`函数生成高斯曲线作为相位变化函数。接下来,根据码元的值,计算单个码元对相位的影响,并将其累加到总的相位影响。最后,输出总的相位变化。
阅读全文