matlab设计一个N=10的PN序列发生器,每符号一个采样,画出PN序列的自相关函数,只显示前101个元素的部分自相关函数,PN序列发生器输出端的前101个采样
时间: 2024-03-05 11:54:38 浏览: 86
以下是实现这个功能的MATLAB代码:
```matlab
% 设置参数
N = 10; % PN序列长度
tap1 = 7; % 第1个寄存器的反馈系数
tap2 = 6; % 第2个寄存器的反馈系数
initstate = '0110101011'; % 初始状态
num_symbols = 10; % 符号个数
% 初始化寄存器状态
sr1 = zeros(1,N);
sr2 = zeros(1,N);
for i = 1:N
sr1(i) = str2num(initstate(i));
sr2(i) = str2num(initstate(i));
end
% 生成PN序列
pn_seq = zeros(1,N*num_symbols);
for i = 1:N*num_symbols
pn_seq(i) = mod(sr1(N)+sr2(tap2),2);
sr1(2:N) = sr1(1:N-1);
sr1(1) = pn_seq(i);
sr2(2:N) = sr2(1:N-1);
sr2(1) = sr1(tap1);
end
% 截取前101个PN序列和自相关函数值
pn_seq_first_101 = pn_seq(1:101);
corr = xcorr(pn_seq, 'biased');
corr_first_101 = corr(length(pn_seq)-100:length(pn_seq));
% 绘制PN序列的自相关函数和前101个PN序列
lags = -(length(pn_seq)-1):(length(pn_seq)-1);
figure;
subplot(2,1,1);
stem(lags, corr_first_101);
title('PN序列前101个元素的自相关函数');
xlabel('延迟');
ylabel('幅值');
subplot(2,1,2);
stem(1:101, pn_seq_first_101);
title('PN序列前101个采样');
xlabel('采样序号');
ylabel('幅值');
```
在上面的代码中,我们首先生成了长度为10的PN序列,然后将其扩展到10个符号的长度。接下来,我们截取了前101个PN序列和自相关函数值,以便在图形中仅显示前101个元素。最后,我们绘制了PN序列的自相关函数和前101个PN序列。
在这个代码中,我们使用 `subplot` 函数绘制了两个子图。第一个子图显示前101个元素的自相关函数,第二个子图显示前101个采样的PN序列。
阅读全文