clear all; close all; fc = 10^6; %载波频率 Tb = 1/1000; %码元长度 fs = 16*fc; %采样频率 N = 1024; %采样点数 M = 4; %调制阶数 fc1 = fc*Tb; %载波频率 t = (0:N-1)/fs; %时间坐标 A = sqrt(2); %振幅 dataIn = randi([0 M-1],1,N/2); %产生调制数据 dataSym = qammod(dataIn,M); %QAM调制 data = pskmod(dataIn,M); %PSK调制 f1 = A*cos(2*pi*fc1*t); %正弦载波 f2 = A*sin(2*pi*fc1*t); %余弦载波 yI = real(data.*exp(1j*2*pi*fc*t)); %信号的I路分量 yQ = imag(data.*exp(1j*2*pi*fc*t)); %信号的Q路分量 y = yI.*f1 - yQ.*f2; %PSK信号 subplot(2,1,1); plot(t,dataSym,'bo'); title('QAM调制波形'); subplot(2,1,2); plot(t,y,'r'); title('PSK调制波形');yI = real(data.*exp(1j*2*pi*fc*t)); %信号的I路分量报错
时间: 2023-11-27 16:03:58 浏览: 31
我看到代码中存在两个相同的语句 `yI = real(data.*exp(1j*2*pi*fc*t)); %信号的I路分量`,这可能是造成报错的原因。你可以将其中一个语句删除或者修改为:
```matlab
yI = real(data.*exp(1j*2*pi*fc*t)).'; %信号的I路分量
```
这样可以将结果转置成列向量,与 `yQ` 同维度。
相关问题
编写matlab代码,实现%基带信号周期为1/16000s,即为16KHz%输入信号周期为Ts/2=1/32000s,即32KHz%取BbTb为0.5%3dB带宽%载波频率为32KHz%每载波采样64个点%基带信号为8个码元%每基带码元采样点数B_sample=Tb/Dt%采样间隔%仿真时间%仿真时间值%产生8个基带信号 。使用GMSK调制完成卫星通信中的调制方法(绘制调制波形00101010)
以下是实现该功能的 MATLAB 代码:
```matlab
%% 参数设置
fc = 32000; % 载波频率
fs = 64*fc; % 采样频率
T = 8/fc; % 基带信号周期
Ts = 1/(2*fc); % 输入信号周期
BbTb = 0.5; % 3dB带宽
B = BbTb/T; % 带宽
B_sample = round(T/(1/fs)); % 每基带码元采样点数
Dt = 1/fs; % 采样间隔
t = 0:Dt:T-Dt; % 基带信号采样时间
tb = 0:Dt:T/B-Dt; % 基带码元采样时间
N = length(tb); % 每个基带码元采样点数
data = [0 0 1 0 1 0 1 0]; % 基带信号
%% 生成基带信号
bb = zeros(1, length(t));
for i = 1:length(data)
if data(i) == 0
bb((i-1)*N+1:i*N) = -1;
else
bb((i-1)*N+1:i*N) = 1;
end
end
%% GMSK调制
kf = B/T; % 调频灵敏度
phi = cumsum(2*pi*fc*Dt + 2*pi*kf*bb.*cos(2*pi*fc*t)); % 累积相位
s = cos(phi); % GMSK调制信号
%% 绘制调制波形
figure;
plot(t, s);
xlabel('时间(s)');
ylabel('幅度');
title('GMSK调制波形');
```
运行该代码,即可得到GMSK调制的波形图。
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表示采样间隔的倒数即采样频率。根据您提供的代码,可以看出您正在进行的是数字调制和信号生成的相关操作,但是缺少具体的调制方式和参数设置。如果您能提供更具体的信息,我可以为您提供更详细的帮助。