close all; Ts=1;%码元周期 N_sample=17;%每个码元抽样点数 eye_num=8;%眼图的个数 alpha=1;%滚降系数为1 N_data=1000;%码元数 dt=Ts/N_sample;%抽样时间间隔 t=-3*Ts:dt:3*Ts;%设置采样 %%产生双极性数字信号 d=sign(randn(1,N_data));%randn随机生成数字 sign函数进行一个判断,判断其正负 xt=sigexpand(d,N_sample)%对d进行扩张,每个间隔加入N_sample-1个零 %基带系统冲击响应(升余弦) ht=sinc(t/Ts).*(cos(alpha*pi*t/Ts))./(1-4*alpha^2*t.^2/Ts^2+eps);%升余弦滚降特性的公式 st=conv(xt,ht);%卷积函数 tt=-3*Ts:dt:(N_data+3)*N_sample*dt-dt;%设置采样 %% 绘制接收端波形 subplot(2,1,1); plot(tt,st); axis([0 20 -1.2 1.2]);%横坐标范围,纵坐标范围 xlabel('t/Ts'); ylabel('基带信号'); %% 绘制眼图 subplot(2,1,2); ss=zeros(1,eye_num*N_sample);%建立零矩阵 ttt=0:dt:eye_num*N_sample*dt-dt;%采样间隔 for k=3:50 ss=st(k*N_sample+1:(k+eye_num)*N_sample); drawnow;%将还未处理完的图像实时的显示出来,实时看到图像的每一步变化情况 plot(ttt,ss); hold on;%新画图像之后不覆盖原图像 end xlabel('t/Ts'); ylabel('基带信号眼图') %% 扩展函数,转换为1维矩阵进行卷积 function[out]=sigexpand(d,M); N=length(d);%基带信号码元长度 out=zeros(M,N); out(1,:)=d;%将零矩阵第一行换成基带信号中的8个码元 out=reshape(out,1,M*N);% end 给出用MATLAB代码实现思路的分析
时间: 2023-08-05 17:10:02 浏览: 101
这段MATLAB代码主要用于产生双极性数字信号并绘制眼图和波形图。首先通过随机生成数字和sign函数进行判断,产生双极性数字信号d,然后对d进行扩张,每个间隔加入N_sample-1个零,得到扩张后的基带信号xt。接着利用升余弦滚降特性的公式生成基带系统冲击响应ht,再通过卷积函数得到接收端波形st。在绘制接收端波形图的同时,利用for循环和眼图的采样间隔,绘制眼图。最后给出一个扩展函数,将零矩阵转换为1维矩阵进行卷积。
相关问题
实现%基带信号周期为1/16000s,即为16KHz%输入信号周期为Ts/2=1/32000s,即32KHz%取BbTb为0.5%3dB带宽%载波频率为32KHz%每载波采样64个点%基带信号为8个码元%每基带码元采样点数B_sample=Tb/Dt%采样间隔%仿真时间%仿真时间值%产生8个基带信号 。使用GMSK调制完成卫星通信中的调制方法(绘制调制波形00101010)
好的,以下是实现您要求的 MATLAB 代码。请注意,这只是一个实现的示例,可能需要根据您的具体需求进行修改。
```
% 基本参数设置
Tb = 1/16000; % 基带信号周期
Ts = 1/32000; % 输入信号周期
BbTb = 0.5; % 3dB带宽
fc = 32000; % 载波频率
N = 64; % 每载波采样点数
N_bits = 8; % 基带信号为8个码元
% 计算采样间隔
B_sample = Tb / (N-1);
t = -Tb/2 : B_sample : Tb/2;
% 生成基带信号
bits = [0 0 1 0 1 0 1 0];
baseband = zeros(1, length(bits)*length(t));
for i=1:length(bits)
if bits(i) == 0
sig = -1*ones(1, length(t));
else
sig = ones(1, length(t));
end
baseband((i-1)*length(t)+1:i*length(t)) = sig;
end
% 生成调制波形
modulated = zeros(1, length(baseband));
for i=1:N_bits
phase = pi/2 * sum(bits(1:i));
for j=1:length(baseband)/N
t_sample = t + (j-1)*Tb;
if sum(t_sample < 0) > 0
modulated((i-1)*length(baseband)/N+j) = modulated((i-1)*length(baseband)/N+j-1);
else
modulated((i-1)*length(baseband)/N+j) = cos(2*pi*fc*t_sample + phase);
end
end
end
% 绘制调制波形
plot(modulated);
title('GMSK调制波形');
xlabel('时间');
ylabel('振幅');
```
注意,这里的调制方法为 GMSK 调制,使用的是相移键控(PSK)调制,不是您提到的 AM 调制。如果您需要 AM 调制,需要对代码进行相应修改。
M=20; % 产生码元数 L=100; % 每码元复制L次,每个码元采样次数 Ts=0.001; % 每个码元的宽度,即码元的持续时间 Rb=1/Ts; % 码元速率1K dt=Ts/L; % 采样间隔 TotalT=M*Ts; % 总时间 t=0:dt:TotalT-dt; % 时间 TotalT2=(M/2)*Ts; % 总时间2 t2=0:dt:TotalT2-dt; % 时间2 Fs=1/dt; % 采样间隔的倒数即采样频率
您的代码中定义了一些变量,M表示要产生的码元数,L表示每个码元复制L次,每个码元采样次数,Ts表示每个码元的宽度,即码元的持续时间,Rb表示码元速率,dt表示采样间隔,TotalT表示总时间,t表示时间,TotalT2表示总时间2,t2表示时间2,Fs表示采样间隔的倒数即采样频率。根据您提供的代码,可以看出您正在进行的是数字调制和信号生成的相关操作,但是缺少具体的调制方式和参数设置。如果您能提供更具体的信息,我可以为您提供更详细的帮助。