已关闭问题
群时延失真的均衡:我的程序错在哪?
提问者:rockyxf   |  提问时间:2012-9-26 11:58
群时延失真的均衡:我的程序错在哪?

我用Matlab仿真用横向滤波器均衡群时延的方法,分别用了符号间隔均衡、T/2间隔均衡、T/4间隔均衡。

但得到很奇怪的结果:
符号间隔均衡后的误码曲线比理想误码曲线还要好,
而T/2间隔均衡又比符号间隔均衡好大约3dB,
T/4间隔均衡又比T/2间隔均衡好大约3dB。

我查了很长时间,没弄明白问题出在哪。

有没有高手能帮忙看一下?


抱歉,刚注册,没分给啊!


===========================
程序的关键代码如下:

% generate souce symbols
dataSymbols = randi([0 3], nFrameSym, 1);
% modulate
dataModOut = dataModemObj.modulate(dataSymbols);
% extract training symbols
trainSyms = dataModOut(1:nTrainSym);

% insert zeros (oversampling)
IQ_ovSamp = zeros(nSymSamples * ovSymLen, 1);
for symIndex = 1 : nFrameSym
sampleIndex = (symIndex - 1 ) * nSymSamples + 1;
IQ_ovSamp(sampleIndex) = dataModOut(symIndex);
end

% pulse shapling
IQ_shaped = filter(hd_psf, IQ_ovSamp);

% experience group delay distortion
IQ_gd = filter(b1, a1, IQ_shaped);

% matched filtering
IQ_matched = filter(mf, IQ_gd);

%¼óèëAWGN
IQ_noisy = step(hChan, IQ_matched); % hChan is an AWGN channel with a specific Es/No value

% received signal
r = IQ_noisy;

% ############# T/4 FSE #############

% down sample r to 4 samples in each symbol period
x4 = downSample(r, 4);

e=zeros(1,nTrainSym-N/2); % instant error
f=zeros(N4+1,1); % equalizer coefficients
mu=0.005; % step size

% equalizer training
X = zeros(N4+1, 1);
X(1:N4/2) = x4(N4/2:-1:1);
for ii=1:nTrainSym-N/2
if ii>1000
mu = 0.001;
end
X = [x4(ii*4+N4/2);
x4((ii-1)*4+3+N4/2);
x4((ii-1)*4+2+N4/2);
x4((ii-1)*4+1+N4/2);
X(1:N4-3)];
e(ii)=trainSyms(ii)-f'*X; % instant error
f = f + mu*conj(e(ii))*X; % update equalizer estimation
end

% perform equalization (including training symbols)
X = zeros(N4+1, 1);
X(1:N4/2) = x4(N4/2:-1:1);
y = zeros(nFrameSym, 1); % equalizer output
sd = zeros(nFrameSym, 1); % symbol decisions on equalizer output
for ii=1:nFrameSym
X = [x4(ii*4+N4/2);
x4((ii-1)*4+3+N4/2);
x4((ii-1)*4+2+N4/2);
x4((ii-1)*4+1+N4/2);
X(1:N4-3)];
y(ii) = f'*X;
sd(ii) = dataModemObj.symbolHardDecision(y(ii));
end

% calculating SER
hError.reset;
errorStats = step(hError, dataModOut(SER_startSym : nFrameSym), sd(SER_startSym : nFrameSym));
nErrors_FSE2(EsNoI) = nErrors_FSE2(EsNoI) + errorStats(2);


% ############# T/2 FSE #############

% ############# SRE #############
关闭所有答案回应    问题答案 ( 0 条 )