资源描述
Gold序列实验报告
一、实验过程及分析
1 m序列&Gold序列得产生
(1)选取本原多项式,产生m序列。
fbconnection_m=[1 0 1 0 0 1 1];
mseq=m_sequence(fbconnection_m);
(2)由本原多项式生成得m序列为m序列优选对,以此优选对来产生Gold序列。
fbconnection_op_1=[0 0 1 0 0 0 1];
fbconnection_op_2=[1 1 1 0 0 0 1];
goldseq=gold_seq(fbconnection_op_1,fbconnection_op_2);
2 m序列得相关特性
图1 m序列自相关函数
图 2 m序列互相关函数
3 Gold序列得相关特性
图3 Gold序列自相关函数
图4 Gold序列互相关函数
图2-5 m序列&Gold序列最小,最大相关值
4 m序列&Gold序列相关特性比较
图6 m序列&Gold序列自相关函数比较
图7 m序列&Gold序列互相关函数比较
gold序列在时延不为0就是三值得,这一点不如m序列,在时延为0处具有与m序列相同得峰值特性。显然,m序列得自相关特性比Gold序列得自相关特性要好。
Gold序列具有更小得互相关峰值,显然Gold序列得互相关特性比m序列得互相关特性性能要好。
5 m序列优选对
m序列优选对也就是gold序列族中得gold序列,所以其互相关函数与gold序列一致。
图8 m序列优选对得互相关函数
6 任选6个Gold序列,观察其自相关函数
图9 任选6个Gold序列得自相关函数
7 任选6对Gold序列,观察其互相关函数
图 10 任选6对Gold序列得互相关函数
任意两个Gold序列互相关函数幅度小于或等于17,符合Gold理论。
源码
(1) PN_Correlation、m
% =======================================
% PN_Correlation、m
% Correlation analysis of PN sequence
%
% Author: jzh (04011646 seu)
% Date: 2014、12、29
% =======================================
% clean
close all;
clear all;
clc;
% optimum pairs
fbconnection_op_1=[0 0 1 0 0 0 1];
fbconnection_op_2=[1 1 1 0 0 0 1];
% any m sequence for test
fbconnection_m=[1 0 1 0 0 1 1];
% gold sequence
mseq_op_1=m_sequence(fbconnection_op_1);
mseq_op_2=m_sequence(fbconnection_op_2);
goldseq=gold_seq(fbconnection_op_1,fbconnection_op_2);
% m sequence
mseq=m_sequence(fbconnection_m);
% mapping
mseq_op_1((mseq_op_1==0))=-1;
mseq_op_2((mseq_op_2==0))=-1;
goldseq((goldseq==0))=-1;
mseq((mseq==0))=-1;
m_auto=ccorr(mseq);
% any two m sequences except optimum pairs
m_cross=ccorr(mseq,mseq_op_1);
gold_auto=ccorr(goldseq(1,:));
gold_cross=ccorr(goldseq(1,:),goldseq(2,:));
m_op_cross=ccorr(mseq_op_1,mseq_op_2);
m_auto_max = max(m_auto)
m_auto_min = min(m_auto)
gold_auto_max = max(gold_auto)
m_cross_amplitude_max = max(abs(m_cross))
gold_cross_amplitude_max = max(abs(gold_cross))
N=length(mseq); % sequence length
abscissa=-N+1:N-1; % abscissa axis
figure(1);
plot(abscissa,m_auto);
xlabel('k'); ylabel('R(k)');
legend('autocorrelation function of m sequence');
title('autocorrelation function of m sequence');
figure(2);
plot(abscissa,m_cross);
xlabel('k'); ylabel('R(k)');
legend('cross-correlation function of m sequence');
title('cross-correlation function of m sequence');
figure(3);
plot(abscissa,gold_auto);
xlabel('k'); ylabel('R(k)');
legend('autocorrelation function of gold sequence');
title('autocorrelation function of gold sequence');
figure(4);
plot(abscissa,gold_cross);
xlabel('k'); ylabel('R(k)');
legend('cross-correlation function of gold sequence');
title('cross-correlation function of gold sequence');
figure(5);
subplot(1,2,1);
plot(abscissa,m_auto);
xlabel('k'); ylabel('R(k)');
title('autocorrelation function of m sequence');
subplot(1,2,2);
plot(abscissa,gold_auto);
xlabel('k'); ylabel('R(k)');
title('autocorrelation function of gold sequence');
figure(6);
subplot(1,2,1);
plot(abscissa,m_cross);
xlabel('k'); ylabel('R(k)');
title('cross-correlation function of m sequence');
subplot(1,2,2);
plot(abscissa,gold_cross);
xlabel('k'); ylabel('R(k)');
title('cross-correlation function of gold sequence');
figure(7);
plot(abscissa,m_op_cross);
xlabel('k'); ylabel('R(k)');
legend('cross-correlation function of m sequence optimum pairs');
title('cross-correlation function of m sequence optimum pairs');
% test autocorrelation of any gold sequence
for test_time = 1:6
ii = ceil(rand()*(N+2));
figure();
temp_gold_auto = ccorr(goldseq(ii,:));
plot(abscissa,temp_gold_auto);
xlabel('k'); ylabel('R(k)');
legend(strcat( 'seq number = ',num2str(ii)));
title('autocorrelation function of a random gold sequence');
end
% test cross-correlation of any 2 gold sequence
for test_time = 1:6
ii = ceil(rand()*(N+2));
jj=ceil(rand()*(N+2));
while jj == ii
jj=ceil(rand()*(N+2));
end
figure();
temp_gold_cross = ccorr(goldseq(ii,:),goldseq(jj,:));
plot(abscissa,temp_gold_cross);
xlabel('k'); ylabel('R(k)');
legend(strcat( 'seq1 number=',num2str(ii),', seq2 number=',num2str(jj)));
title(strcat('cross-correlation function of 2 random gold sequence:',、、、
' cross correlation amplitude MAX = ',、、、
num2str(max(abs(temp_gold_cross)))));
end
(2) m_sequence、m
% ==============================
% m_sequence、m
% generating m sequence
%
% Author: jzh (04011646 seu)
% Date: 2014、12、29
% ==============================
function mseq = m_sequence(fbconnection)
% ============================== m_sequence ==============================
% generating m sequence
%
% Input:
% fbconnection: feedback connection responding to primitive polynomial
% Output:
% msequ: generation of m sequence, 1-by-N
% ========================================================================
n = length(fbconnection);
N = 2^n-1; % length of m sequence
register = [zeros(1,n-1) 1]; % initial state of shift register
% preallocating
newregister = zeros(1,n);
mseq = zeros(1,N);
mseq(1)=register(n);
for ii=2:N
% feedback
newregister(1) = mod(sum(fbconnection、*register),2);
% shift
for jj=2:n
newregister(jj)=register(jj-1);
end
register=newregister; % update
mseq(ii)=register(n); % output m sequence
end
(3) gold_seq、m
% ==================================
% gold_seq、m
% generating gold sequence family
%
% Author: jzh (04011646 seu)
% Date: 2014、12、29
% ==================================
function goldseq = gold_seq(fbconnection1,fbconnection2)
% =============================== gold_seq ===============================
% generating gold sequence family
%
% Input:
% fbconnection1: feedback connection 1
% fbconnection2: feedback connection 2
% Note: fbconnection1 & fbconnection2 are optimum pairs
% Output:
% goldseq: generation of gold sequence family, (N+2)-by-N
% ========================================================================
mseq1 = m_sequence(fbconnection1);
mseq2 = m_sequence(fbconnection2);
N=2^length(fbconnection1) - 1;
goldseq = zeros(N+2,N); % preallocating
% different shift amount of two m sequence
for shift_amount = 0:N-1
shift_mseq2 = [mseq2(shift_amount+1:N) mseq2(1:shift_amount)];
goldseq(shift_amount+1,:) = mod(mseq1+shift_mseq2,2);
end
goldseq(N+1,:)=mseq1;
goldseq(N+2,:)=mseq2;
(4) ccorr、m
% =======================================
% ccorr、m
% calculate cross-correlation function
%
% Author: jzh (04011646 seu)
% Date: 2014、12、29
% =======================================
function r = ccorr(seq1,seq2)
% ================================ ccorr =================================
% calculate cross-correlation function
%
% Input:
% seq1: sequence 1
% seq2: sequence 2
% Note: (a) length of two sequence must be the same
% (b) two input sequence: calculate cross-correlation function
% (c) one input sequence: calculate autocorrelation function
% Output:
% r: correlation function, 1-by-2*N-1
% ========================================================================
% one input sequence: calculate autocorrelation
if nargin==1
seq2 = seq1;
end
N = length(seq1);
r = zeros(1,2*N-1); % preallocating
for k=-N+1:-1
seq2_shift = [seq2(k+N+1:N) seq2(1:k+N)];
r(N+k) = seq1*seq2_shift';
end
for k=0:N-1
seq2_shift = [seq2(k+1:N) seq2(1:k)];
r(N+k) = seq1*seq2_shift';
end
展开阅读全文