通信人家园

标题: OFDM接收端子载波信号反向加载了  [查看完整版帖子] [打印本页]

时间:  2014-3-18 09:48
作者: kevinclily     标题: OFDM接收端子载波信号反向加载了

大家好。我在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)。


非常奇怪,对吧?但是我不知道是怎么回事。
并且这个现象很奇怪,有时候出现,有时候不出现。有哪位知道原因么?请告知,感激不尽。


谢谢关注


时间:  2014-3-18 10:08
作者: 玄仔

如果方便的话,把程序贴上来
光描述现象,不好分析问题
时间:  2014-3-18 10:49
作者: kevinclily

本帖最后由 kevinclily 于 2014-3-18 11:11 编辑
玄仔 发表于 2014-3-18 10:08
如果方便的话,把程序贴上来
光描述现象,不好分析问题

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


每个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





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

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

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

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



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




时间:  2014-3-18 12:09
作者: 玄仔

请教不敢当,共同讨论学习吧
你所帖的数据定义这块应该是按要求写的
这里面涉及矩阵变形的语句
txfreqdataA=reshape(txfreqdataAline,nSubcarriers,nSymbolspercircle);     %chunking
tx=reshape(xwithcp,size(xwithcp,1)*size(xwithcp,2),1);  %Serialization
rxtimedataraw=reshape(rxtimedataraw,nFFT*(1+CP),length(Rx)/(nFFT*(1+CP)));   %deserialization

可能和你描述的时域序列翻转问题相关,但是具体我也说不上来,只是感觉
信号经过的实时系统,由于是非程序可控所以不好判定

时间:  2014-3-19 15:14
作者: kevinclily

玄仔 发表于 2014-3-18 12:09
请教不敢当,共同讨论学习吧
你所帖的数据定义这块应该是按要求写的
这里面涉及矩阵变形的语句

好的,我再研究研究。
谢谢!
时间:  2014-3-21 12:53
作者: D2D

会不会是载波同步,解调时候出现的倒π现象?具体原理不知道OFDM会不会出现
时间:  2014-3-26 09:54
作者: kevinclily

D2D 发表于 2014-3-21 12:53
会不会是载波同步,解调时候出现的倒π现象?具体原理不知道OFDM会不会出现

不好意思,刚刚看到回复。我现在去看看这种可能性。
BTW,如果是倒pi现象,应该怎么解决?除了采取差分编码,还有别的解决办法吗?
时间:  2014-3-26 10:58
作者: D2D

kevinclily 发表于 2014-3-26 09:54
不好意思,刚刚看到回复。我现在去看看这种可能性。
BTW,如果是倒pi现象,应该怎么解决?除了采取差分编 ...

我也是凭着感觉说的,书上学的解决的方法就是差分搞定的。:)




通信人家园 (https://www.txrjy.com/) Powered by C114