设计一个N=10的PN序列发生器,每符号5个采样(不调用replicate等MATLAB自带的函数),画出PN序列的自相关函数、只显示前101个元素的部分自相关函数、PN序列发生器输出端的前101个采样
时间: 2023-06-27 16:07:42 浏览: 49
首先,我们需要定义PN序列的生成规则。PN序列可以使用LFSR线性反馈移位寄存器实现。在这个例子中,我们选择使用x^10 + x^7 + 1作为LFSR的特征多项式,它的位数为10,生成的PN序列长度为1023。
接下来,我们按照以下步骤生成PN序列:
1. 初始化一个10位的寄存器为1。
2. 按照LFSR的规则,依次计算10个新的位,新的位是原始位与特征多项式的系数异或和。将新的位放在寄存器的最低位,并将寄存器向右移动一位。
3. 重复步骤2直到生成1023个位。
根据这个规则,我们可以编写如下的MATLAB代码实现PN序列的生成:
```MATLAB
N = 10; % 寄存器位数
len = 2^N-1; % PN序列长度
% 特征多项式
polynomial = [1 0 0 0 0 0 1 0 0 1];
% 初始化寄存器
register = ones(1, N);
% 生成PN序列
pn_seq = zeros(1, len);
for i = 1:len
% 计算新的位
new_bit = mod(sum(register .* polynomial), 2);
% 更新寄存器
register = [new_bit register(1:N-1)];
% 存储新的位
pn_seq(i) = new_bit;
end
```
接下来,我们需要画出PN序列的自相关函数。自相关函数是一个序列与自身平移后的序列的点积。在MATLAB中,可以使用`xcorr`函数来计算自相关函数。代码如下:
```MATLAB
% 计算PN序列的自相关函数
rxx = xcorr(pn_seq);
% 画出自相关函数
figure;
plot(-len+1:len-1, rxx);
title('PN序列的自相关函数');
xlabel('平移量');
ylabel('自相关系数');
```
接下来,我们需要画出PN序列的部分自相关函数。部分自相关函数是一个序列与自身平移后的序列的点积,但是在计算时需要减去之前已经计算过的部分自相关函数。在MATLAB中,可以使用`parcorr`函数来计算部分自相关函数。代码如下:
```MATLAB
% 计算PN序列的部分自相关函数
parrx = parcorr(pn_seq, 100);
% 画出部分自相关函数
figure;
stem(0:100, parrx);
title('PN序列的部分自相关函数');
xlabel('平移量');
ylabel('部分自相关系数');
```
最后,我们需要输出PN序列的前101个采样。根据题目要求,每个符号需要5个采样,因此需要将PN序列进行重复。在MATLAB中,可以使用`kron`函数来实现。代码如下:
```MATLAB
% 将PN序列重复5次
symbol = kron(pn_seq, ones(1, 5));
% 输出前101个采样
disp(symbol(1:101));
```