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 13:03:58 浏览: 67
我看到代码中存在两个相同的语句 `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调制的波形图。
假设双极性不归零序列的码元速率为2x103 B,载波频率 fc =32x103 HZ, m 序列的码元速率为104 B,采用 2PSK 调制的直接扩频通信系统进行仿真MATLAB代码
以下是一个简单的 MATLAB 代码,用于模拟双极性不归零序列的直接扩频通信系统,并使用2PSK调制:
```matlab
% 设置参数
fc = 32e3; % 载波频率
Tc = 1/fc; % 载波周期
Rs = 2e3; % 码元速率
Ts = 1/Rs; % 码元周期
Rm = 100e3; % m序列的码元速率
Tm = 1/Rm; % m序列的码元周期
N = 1000; % 仿真的码元数
Eb = 1; % 符号能量
SNR = 10; % 信噪比
% 生成双极性不归零序列
data = randi([0 1], 1, N);
bi_nrz = 2*data - 1;
% 生成m序列
m_seq = comm.PNSequence('Polynomial',[3 2 0],'SamplesPerFrame',N,'InitialConditions',[0 0 1]);
m_seq = m_seq();
m_seq(m_seq == 0) = -1;
% 生成调制信号
t = 0:Tc/1000:(N*Ts)-Tc/1000;
carrier = sqrt(2/Tc)*cos(2*pi*fc*t);
spread = kron(bi_nrz, ones(1, round(Ts/Tc)));
spread_seq = kron(m_seq, ones(1, round(Ts/Tm)));
mod_signal = sqrt(Eb)*spread.*spread_seq.*carrier;
% 加噪声
noise = randn(1, length(mod_signal));
Pn = mean(abs(mod_signal).^2)/(10^(SNR/10));
noise = sqrt(Pn)*noise;
rx_signal = mod_signal + noise;
% 解调
demod_signal = rx_signal./carrier;
demod_signal = demod_signal(round(Tc/Ts):round(Tc/Ts):end); % 采样
demod_signal = demod_signal./sqrt(Eb);
% 解扩
demod_signal = demod_signal./spread_seq;
demod_signal = demod_signal./spread;
% 判决
rx_data = demod_signal > 0;
BER = sum(abs(rx_data - data))/N;
disp(['误比特率为:' num2str(BER)]);
```
请注意,此代码只是一个简单的示例,您可能需要根据您的具体要求进行修改。
阅读全文