以下用matlab生成(1)生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。
时间: 2024-02-26 12:56:38 浏览: 126
以下是matlab代码实现:
(1) 生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps
```matlab
% 生成40000个随机的二进制比特序列
bits = randi([0 1], 1, 40000);
% 采样率为100kHz
Fs = 100000;
% 信息速率为4Kbps
Rs = 4000;
% 计算每个符号的持续时间
T = 1/Rs;
% 每个符号对应的采样数
Ns = T*Fs;
% 重复每个符号,得到完整的信号
tx_signal = repelem(bits, Ns);
```
(2) 串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座,得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。
```matlab
% 将比特序列转换为16进制符号
hex_symbols = bi2de(reshape(bits, [], 4), 'left-msb');
% 星座映射,使用16QAM调制
qam_symbols = qammod(hex_symbols, 16, 'gray');
% 绘制发送端的星座图
scatterplot(qam_symbols);
title('发送端星座图');
```
相关问题
提供MATLAB代码以实现以下任务(1)产生信源符号序列:生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。 (3)脉冲成形:平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
以下是MATLAB代码实现:
```matlab
% 产生信源符号序列
bits = randi([0 1], 1, 40000); % 生成40000个0或1的随机数
symbols = bi2de(reshape(bits, 4, [])', 'left-msb'); % 将比特序列转换为16进制符号
modSymbols = qammod(symbols, 16); % 星座映射
scatterplot(modSymbols); % 绘制星座图
xlabel('I'); ylabel('Q'); title('16QAM星座图');
% 脉冲成形
rolloff = 0.5; span = 10; % 滚降系数和脉冲宽度
sps = 4; % 每个符号对应4个采样点
pulse = rcosdesign(rolloff, span, sps, 'sqrt'); % 平方根升余弦脉冲成形滤波器
freqz(pulse); % 绘制滤波器传输函数
xlabel('Normalized Frequency'); ylabel('Magnitude'); title('脉冲成形滤波器传输函数');
% 上采样和滤波
upsampledSymbols = upsample(modSymbols, sps); % 上采样
filteredSignal = filter(pulse, 1, upsampledSymbols); % 滤波
Fs = 100000; % 采样率
pwelch(filteredSignal, [], [], [], Fs); % 绘制功率谱密度图
xlabel('Frequency (Hz)'); ylabel('Power/Frequency (dB/Hz)'); title('复基带信号功率谱密度图');
```
需要注意的是,符号速率为4Kbps,采样率应该至少为8KHz,而不是100KHz。因此,在代码中,我们将每个符号对应的采样点数设为4,从而得到采样率为16KHz。此外,为了避免频谱混叠,滤波器的带宽应该为符号速率的两倍,即8KHz。因此,我们将脉冲成形滤波器的脉冲宽度设为10个采样点,从而得到带宽为8KHz的滤波器。
(1)产生信源符号序列:生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。 (3)脉冲成形:平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
好的,以下是回答:
(1) 首先生成40000个随机的二进制比特,可以使用MATLAB中的randi函数:
```matlab
bits = randi([0 1],1,40000);
```
(2) 将比特序列转换为16进制符号并进行星座映射:
```matlab
M = 16; % 星座大小
k = log2(M); % 每个符号的比特数
symbols = bi2de(reshape(bits,k,[])','left-msb')'; % 将比特序列分组,转换为10进制数
constellation = qammod(symbols,M); % 星座映射
scatterplot(constellation); % 绘制星座图
```
(3) 平方根升余弦脉冲成形滤波器的传输函数可以使用MATLAB中的rcosdesign函数进行设计:
```matlab
Fs = 100000; % 采样率
span = 10; % 滤波器的长度(单位:符号)
beta = 0.5; % 滚降系数
sps = 4; % 每个符号的样本数
h = rcosdesign(beta,span,sps,'sqrt'); % 计算滤波器系数
fvtool(h,'Analysis','freq'); % 绘制滤波器的传输函数,查看带宽
```
对于上述代码中的rcosdesign函数,其中beta参数是滚降系数,span参数是滤波器长度(以符号为单位),sps参数是每个符号的样本数,'sqrt'表示使用平方根升余弦脉冲成形。
对于上采样并过滤波器的操作:
```matlab
tx_signal = upfirdn(constellation,h,sps); % 上采样并过滤波器
f = -Fs/2:Fs/length(tx_signal):Fs/2-Fs/length(tx_signal); % 计算频率坐标轴
psd = 10*log10(abs(fftshift(fft(tx_signal)/length(tx_signal))).^2); % 计算功率谱密度
plot(f,psd); % 绘制功率谱密度
xlabel('Frequency (Hz)');
ylabel('Power/Frequency (dB/Hz)');
ylim([-100 0]);
```
上述代码中,upfirdn函数用于将星座映射后的符号序列上采样,并经过滤波器。计算频率坐标轴和功率谱密度的代码与基带信号相同。绘制出的功率谱密度应该与基带信号的功率谱密度相同,但带宽应该是原来的16倍(因为16QAM每个符号传输4个比特,所以符号速率为4Kbps,而复基带信号的带宽为16*4KHz=64KHz)。
阅读全文
相关推荐















