亚星游戏官网-yaxin222

门户 | 手机客户端 | 论坛 | 人才 | 百科 | 搜索 | 技术问答 | English
待解决问题
OFDM接收端子载波信号反向加载了
离问题结束还有0天0小时  |  提问者:kevinclily   |  提问时间:2014-3-18 09:48
大家好。我在ofdm实验中遇到了个问题。 发射的是QPSK信号,经过IFFT,调制和解调,Tx端的信号在Rx端用matlabFFT之后反向了。 意思是这样的:假设发射的nFFT=8的信号某个symbol是 [0,a,b,0,0,0,c,d]; a,b,c,d∈(-1+i,-1-i,1+i,1-i); 那么接收端变成了 [0,f(d),f(c),0,0,0,f(b),f(a)]。d,c,b,a按照原来的相反的顺序循环加载了。 当然并不是原样加载上去,而是实部虚部反号且交换了,f是个函数,f(x)=-imag(x)-1i*real(x)。 非常奇怪,对吧?但是我不知道是怎么回事。 并且这个现象很奇怪,有时候出现,有时候不出现。有哪位知道原因么?请告知,感激不尽。


我的信号不是仿真,而是经过了实际的传输系统,所以不知道问题是不是在信号产生和接收处理中。
而且程序写得很糟糕,其中好多是很废柴的信号排列,因为要实现时序上的一些关系。贴出精简的部分吧。献丑了...


每个symbol内的data sample分成了六块,每块的数量是sextant=nFFT/6。正频和负频分别加载三个块,在正频和负频的各自三个块中各有两个pilot tone用于做相位估计。
nFFT=128.
CP 是cyclic prefix,0.125,也就是nFFT*0.125=128*0.125=16.

这是时序信号发生部分:
nFFT=128;
CP=0.125;
sextant=nFFT/6;
randombit=prbs17block(1:nSubcarriers*nSymbolspercircle,:); %read frequency data from the prbs data.
txfreqdataAline=randombit(:,1)+1i*randombit(:,2); %QPSK modulation
txfreqdataA=reshape(txfreqdataAline,nSubcarriers,nSymbolspercircle); %chunking
frame=txfreqdataA;

%OFDM modulation
X=zeros(nFFT,nSymbolspercircle);
X(2:sextant+1,:)=frame(1:sextant,:);
X(sextant+2,:)=2;
X(sextant+3:2*sextant+2,:)=frame(sextant+1:2*sextant,:);
X(2*sextant+3,:)=0;
X(2*sextant+4:3*sextant+3,:)=frame(2*sextant+1:3*sextant,:);

X(nFFT-3*sextant-1:nFFT-2*sextant-2,:)=frame(3*sextant+1:4*sextant,:);
X(nFFT-2*sextant-1,:)=-2;
X(nFFT-2*sextant:nFFT-sextant-1,:)=frame(4*sextant+1:5*sextant,:);
X(nFFT-sextant,:)=0;
X(nFFT-sextant+1:nFFT,:)=frame(5*sextant+1:6*sextant,:);

x=sqrt(nFFT)*ifft(X,nFFT);
xwithcp=[x;x(1:CP*nFFT,:)];
tx=reshape(xwithcp,size(xwithcp,1)*size(xwithcp,2),1); %Serialization





信号接收和解调部分的主要程序:

[b]rxtimedataraw=reshape(rxtimedataraw,nFFT*(1+CP),length(Rx)/(nFFT*(1+CP))); %deserialization[/b]
[b]rxtimedata=rxtimedataraw(precut+1:precut+nFFT,1:length(Rx)/(nFFT*(1+CP))); %CP cut[/b]
[b]rxfreqdata_nFFT=fft(rxtimedata,nFFT);[/b]

[b]rxfreqdata_nSubcarriers=[rxfreqdata_nFFT(2:sextant+1,:);[/b]
[b]rxfreqdata_nFFT(sextant+3:2*sextant+2,:);[/b]
[b]rxfreqdata_nFFT(2*sextant+4:3*sextant+3,:);[/b]
[b]rxfreqdata_nFFT(nFFT-3*sextant-1:nFFT-2*sextant-2,:);[/b]
[b]rxfreqdata_nFFT(nFFT-2*sextant:nFFT-sextant-1,:);[/b]
[b]rxfreqdata_nFFT(nFFT-sextant+1:nFFT,:)];[/b]

[b]rxfreqdata_pilots=[rxfreqdata_nFFT(sextant+2,:);[/b]
[b]rxfreqdata_nFFT(2*sextant+3,:);[/b]
[b]rxfreqdata_nFFT(nFFT-2*sextant-1,:);[/b]
[b]rxfreqdata_nFFT(nFFT-sextant,:)];[/b]



[b]没有问过有关程序的问题,所以不知道提供些什么好。。。如果有什么纰漏和未竟提供的,请指教。[/b]
[b]谢谢![/b]

回答时间:2014-3-18 10:49
 
我要回应:  回应字数在5000字以内

 

XML 地图 | Sitemap 地图