|
A new version of the website is under development, powered by MediaWiki! You can already use it here. | |||||||||||
|
Estimation of the RF impairments of the USRP throught channel impulse response estimation The objective of this demonstration is to estimate the RF impairments of the FLEX 2400 daughterboard of the USRP.Two USRP have been connected on two PCs running matlab/windows and the Tools4SDR toolbox. The two USRP have been connected thanks to a wire (instead of using antennas): These scripts are described on this page, as well as the obtained result. These scripts are available for downloading at the bottom of this page. 1. Scripts for the transmitter
The transmitted symbols have been generated as follows:
NbTrame = 1000;
A square root cosine filter has been used to modulate these symbols at a rate equal to Tc=5Te. Te is the sampling frequency, and is equal to
Te=1us, so that the transmitted signal is 1MHz bandwidth.
SymbToTransmit = appr_offset; for (iNbTrame=1:NbTrame) SymbToTransmit = [SymbToTransmit ; appr_symboles]; end
Te = 1e-6;
The transmitted signal has thus been generated as:
Tc = 5*Te; g = GetNyquistSqrt(0.2,Tc,-100*Te:Te:100*Te); %0.2 is the bandwidth excess
Symb = kron(SymbToTransmit,[0 0 1 0 0].');
Finally, it has been transmitted throught the USRP:
y = conv(g,Symb);
USRP_Init();
The signal y is then transmitted around 10 times into the WiFi bands (channel 3, center frequency 2422MHz), so that on the receiver side,
the acquisition script can be runned to record an entire copy of the signal y.
USRP_SendSignal(y); 2. Scripts for the receiver The scripts used for the received can be downloaded at the bottom of this page [Receiver_scripts.zip].The acquisition script has to be launched just after the PC on which the transmitter is connected prints the transmission begins:
[t,y] = USRP_ReceiveSignal(8);
The signal y is then composed of burts, each being a replica of the signal of interest. The received signal can be downloaded from the
bottom of this page ([acqui_flex2400.zip] (around 20Mo), with a script to load the file [ReadAcquiSignal.m]). The signal
processing starts with the selection of a burst:
[t2,y2] = SelectUsefulPart(t,y);
Then, the frequency offset is estimated thanks to the BPSK training sequence, and the signal filtered by its adaptative filter:
[z,offset] = CorrectFrequencyOffset(y3,appr_offset,5); % 5 is the oversampling factor (Tc/Te)
As the signal is oversampled by a factor 5, we can extract from z2 5 signals sampled at the rate Tc. For each of these signals, the
channel impulse response can be estimated as well as the estimation error:
[z2] = Adaptative_Filter(z,5,0.2); %0.2 is the bandwidth excess
[ Allz ] = Compute_Signals_For_Synchro(z2,5);
The error variable described the least square error and contains 5 values. It takes its minimal value for the 5th index, meaning that the
best synchronized signal is Allz(5,:). [Error,h] = IREst(appr_offset,Allz);
Sig = Allz(5,:);
NbTrames = 1000; For (iNbTrame = 1:NbTrames) [Error,h(iT,:)] = IREst(appr_symboles,Sig(length(appr_offset)+(iT-1)*length(appr_symboles):end); end 3. Results The mesured variations of the channel impulse response (h(iT,:)) are the following ones: As the maxima is moving from point 2 to point 3, we can deduce that the sampling frequency is not exactly equal to 1us. Further, the value variation indicates that the oscillator derives.Attached files: [ AF1 ] Transmitter_scripts.zip[ AF2 ] Seqs.mat [ AF3 ] Receiver_scripts.zip [ AF4 ] acqui_flex2400.zip [ AF5 ] ReadAcquiSignal.m |
|||||||||||
| About | Contact | Site map | Support | ||||||||||||