これが私の目標です:
データ信号を検索して、既知の反復バイナリ データ シーケンスが配置されている場所 (インデックス) を見つける方法を見つけようとしています。次に、拡散コードと復調がわかっているので、対応するデータのチップを引き出して読み取ります。現在のところ、xcorr でうまくいくと思います。
これが私の問題です:
xcorr または xcorr2 からの結果を解釈して、探しているものを得ることができないようです。xcorr 関数のベクトル位置から時間ベクトルへの相互参照に問題があるか、xcorr を使用してデータ シーケンスを適切に識別できないか、またはその両方が発生しています。他の可能性が存在する可能性があります。
私がいる場所/私が持っているもの:
対象のデータ シーケンスとガベージ データで構成されるランダムな BPSK 信号を作成しました。私は立ち往生しているxcorrを使用して処理しようとしました。
これが私のコードです:
%% Clear Variables
clc;
clear all, close all;
%% Create random data
nbits = 2^10;
ngarbage = 3*nbits;
data = randi([0,1],1,nbits);
garbage = randi([0,1],1,ngarbage);
stream = horzcat(data,garbage);
%% Convert from Unipolar to Bipolar Encoding
stream_b = 2*stream - 1;
%% Define Parameters
%%% Variable Parameters
nsamples = 20*nbits;
nseq = 5 %# Iterate stream nseq times
T = 10; %# Number of periods
Ts = 1; %# Symbol Duration
Es = Ts/2; %# Energy per Symbol
fc = 1e9; %# Carrier frequency
%%% Dependent Parameters
A = sqrt(2*Es/Ts); %# Amplitude of Carrier
omega = 2*pi*fc %# Frequency in radians
t = linspace(0,T,nsamples) %# Discrete time from 0 to T periods with nsamples samples
nspb = nsamples/length(stream) %# Number of samples per bit
%% Creating the BPSK Modulation
%# First we have to stretch the stream to fit the time vector. We can quickly do this using _
%# simple matrix manipulation.
% Replicate each bit nspb/nseq times
repStream_b = repmat(stream_b',1,nspb/nseq);
% Tranpose and replicate nseq times to be able to fill to t
modSig_proto = repmat(repStream_b',1,nseq);
% Tranpose column by column, then rearrange into a row vector
modSig = modSig_proto(:)';
%% The Carrier Wave
carrier = A*cos(omega*t);
%% Modulated Signal
sig = modSig.*carrier;
XCORR の使用
等しくないベクトルxcorr2()
のゼロパディング効果を排除するために使用します。xcorr
明確にするために、以下のコメントを参照してください。
corr = abs(xcorr2(data,sig); %# pull the absolute correlation between data and sig
[val,ind] = sort(corr(:),'descend') %# sort the correlation data and assign values and indices
ind_max = ind(1:nseq); %# pull the nseq highest valued indices and send to ind_max
これで、データと sig の間の相関関係が最も高い 5 つが得られるはずです。これらは、ストリームの反復ごとにストリーム内のデータの最後のビットに対応する必要があります。これは、データが sig と最も強く相互相関する場所だと思うからですが、そうではありません。場合によっては、最大値が 1 ストリームの長さでさえ離れていないことがあります。だから私はここで混乱しています。
質問
3 部構成の質問:
特定のステップがありませんか?この場合、データと sig が最も強く相関している場所を見つけるために xcorr を使用するにはどうすればよいですか?
私の方法全体が間違っていますか?最大相関を探すべきではありませんか?
または、この問題を別の角度から攻撃する必要がありますか、id est、xcorr を使用せず、おそらくフィルターまたは別の関数を使用する必要がありますか?