星座是怎么产生的,为什么很准
时间: 2023-04-11 21:02:28 浏览: 115
星座是由古代人类观测天空时发现的一些特定的星群,它们被赋予了特定的名称和象征意义。星座的准确性是因为它们与地球的位置和时间有关,因此它们可以用来预测天文事件。然而,星座并不是真正存在的实体,而是人类为了方便观测和研究天空而创造的概念。
相关问题
matlab实现在大气湍流条件下解调qpsk信号产生星座图
在大气湍流条件下解调 QPSK 信号可以使用 MATLAB 中的 `comm.PolarizationDemodulator` 和 `comm.RectangularQAMDemodulator` 对象来实现。下面是一个简单的 MATLAB 代码,可以生成QPSK信号,通过大气湍流信道传输,然后解调,并生成星座图:
```matlab
% 设置参数
M = 4; % QPSK调制方式
fc = 1e9; % 信号频率
fs = 10*fc; % 采样频率
L = 1000; % 信号长度
SNR = 20; % 信噪比
% 生成QPSK信号
data = randi([0 M-1],L,1);
modSignal = pskmod(data,M);
% 添加高斯白噪声
rxSignal = awgn(modSignal,SNR,'measured');
% 设置大气湍流信道
atmosChan = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)','SNR',SNR);
rxSignal = atmosChan(rxSignal);
% 解调QPSK信号
demodulator = comm.RectangularQAMDemodulator('ModulationOrder',M,'BitOutput',true);
bits = demodulator(rxSignal);
% 绘制星座图
scatterplot(rxSignal);
```
运行后,将会得到解调后的比特流,并绘制出星座图。值得注意的是,这里的大气湍流信道是使用 `comm.AWGNChannel` 模拟的高斯白噪声信道,实际情况中可能需要根据具体的信道条件进行调整。
(1)产生信源符号序列:生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。 (3)脉冲成形:平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
好的,我已经理解了你的问题。让我来回答你的问题。
首先,我们需要生成一个40000比特的二进制符号序列,采样率为100kHz,信息速率为4Kbps。在MATLAB中,可以使用randi函数生成指定长度的随机二进制序列:
```
binary_seq = randi([0 1], 1, 40000);
```
接下来,我们需要把二进制序列转换为16进制符号,并按16QAM调制映射为星座。首先,我们可以使用reshape函数将比特序列按照4比特一组进行分组:
```
binary_groups = reshape(binary_seq, 4, [])';
```
然后,我们可以使用bi2de函数将每组4比特转换为一个10进制数字:
```
decimal_seq = bi2de(binary_groups, 'left-msb');
```
最后,我们可以使用qammod函数将10进制数字映射为16QAM星座:
```
M = 16;
constellation = qammod(decimal_seq, M);
```
现在,我们已经得到了复基带符号。我们可以使用scatterplot函数绘制星座图:
```
scatterplot(constellation);
title('16QAM星座图');
```
下一步是脉冲成形。我们需要使用平方根升余弦脉冲成形滤波器,滚降系数为0.5。在MATLAB中,可以使用rcosdesign函数生成滤波器系数:
```
span = 10;
rolloff = 0.5;
sps = 4;
h = rcosdesign(rolloff, span, sps, 'sqrt');
```
然后,我们可以使用upfirdn函数对复基带符号进行上采样和滤波:
```
upsampled_seq = upfirdn(constellation, h, sps);
```
现在,我们已经得到了复基带信号。我们可以使用pwelch函数绘制功率谱,并标出带宽:
```
fs = 100000;
[Pxx, f] = pwelch(upsampled_seq, [], [], [], fs);
plot(f, 10*log10(Pxx));
title('复基带信号功率谱');
xlabel('频率(Hz)');
ylabel('功率(dB)');
bw = 2*4*1000 + 1/(2*span/sps)/2;
hold on;
line([bw/2 bw/2], [-100 10], 'Color', 'red', 'LineStyle', '--');
line([-bw/2 -bw/2], [-100 10], 'Color', 'red', 'LineStyle', '--');
text(bw/2, -50, sprintf('带宽 = %.2f kHz', bw/1000));
```
最后,我们需要比较基带信号带宽和符号速率。由于基带信号的带宽为符号速率的一半,因此基带信号的带宽应该为2kHz。与此相比,复基带信号的带宽应该为4kHz。可以通过绘制基带信号的功率谱来验证:
```
baseband_seq = upfirdn(binary_seq*2-1, h, sps);
[Pxx, f] = pwelch(baseband_seq, [], [], [], fs);
plot(f, 10*log10(Pxx));
title('基带信号功率谱');
xlabel('频率(Hz)');
ylabel('功率(dB)');
bw = 2*1000;
hold on;
line([bw/2 bw/2], [-100 10], 'Color', 'red', 'LineStyle', '--');
line([-bw/2 -bw/2], [-100 10], 'Color', 'red', 'LineStyle', '--');
text(bw/2, -50, sprintf('带宽 = %.2f kHz', bw/1000));
```
可以看到,基带信号的带宽为2kHz,符合我们的预期。
阅读全文