Hi,In order to meet our project requirements, we need to reach a symbol rate of at least 40MSps.
Our current architecture is based on the AD9361. However to achieve this symbol rate, the pulse shaping is to be integrated into the transceiver.
To validate the solution, we are using a FMCOMMS3 and ZC706 board.
The ZC706 is running the official image and we are configuring the AD9361 with the IIO oscilloscope application.
As test data, we are sending random QPSK data pre-computed in Matlab/Octave.
Initially, I wanted to use the FIR as a RRC pulse shaping filter with an oversampling of 4.
To configure the FIR, I computed the .ftr file manually, using a Matlab/Octave script (see below steps taken).
If I use the FIR filter using this .ftr (see below), the IIO configures it correctly (according to the IIO dashboard). However, we have a poor signal quality (measured in EVM: ~9%-10% or -20dB via a Signal Analyzer) coming out of the AD9361 :
If I use the same data, pulse-shaped with the same filter but this time directly in Matlab/Octave, therefore moving the pulse-shaping before the AD9361 (& disabling the FIR), we get a much cleaner signal (EVM ~1% or -40bB) (the rate has to be divided by 4 here since the pulse shaping is done upstream) :
Hence I think the computation of the .ftr file might be wrong.
I found very few data on how to generate such a file, so any insight/help would be much appreciated.
Here is how I currently generate it :
1) Compute the RRC FIR taps using the rcosdesign function of Matlab (beta = 0.35, span = 32, sps = 4), this generates 129 taps.
2) The FIR has only 128 coefficients, so I normalize the vector by the middle value and remove it. This gives me 128 symmetrical taps.
3) I convert these floating point taps into fixed point with variable gain in the following manner :
Tap n°64: 0.873582
Converted into 0000000000000000000000000000000011011111101000110001000111101000 / 3752006120 / 00000000DFA311E8. Error: 8.714196031434085e-11
This giving me a gain of 0dB.
4) I compute the maximum rate I can achieve :
-> Since the FIR rate is limited to 120MSps, the max we can have with an oversampling of 4 is 30MSps
The RX filter is not really relevant, so I configure it as a lowpass.
This gives me the following file :
TX 3 GAIN 0 INT 4RX 3 GAIN 0 DEC 4RRX 960000000 480000000 240000000 120000000 120000000 30000000RTX 960000000 240000000 120000000 120000000 120000000 30000000BWTX 56000000BWRX 56000000-10,-8617,13027,-1558,154-21,-60-29,179-7,7925,26733,2356,378-30,360-39,438-9,38231,37339,2525,158-37,-13-43,-145-1,-30447,-39451,-4622,-433-56,-358-61,-192-5,358,24161,450-4,626-73,706-69,69415,55299,31392,-19-13,-378-118,-728-113,-9927,-1132126,-1092112,-871-39,-469-176,59-135,65382,1211274,1646224,1858-72,1788-348,1400-308,71561,-205398,-1240286,-2245-286,-3043-762,-3468-442,-3370766,-26521954,-12751708,720-661,3222-4043,6050-5642,8972-2533,117316187,1407218177,1577228625,1666628625,1666618177,157726187,14072-2533,11731-5642,8972-4043,6050-661,32221708,7201954,-1275766,-2652-442,-3370-762,-3468-286,-3043286,-2245398,-124061,-205-308,715-348,1400-72,1788224,1858274,164682,1211-135,653-176,59-39,-469112,-871126,-10927,-1132-113,-992-118,-728-13,-37892,-1999,31315,552-69,694-73,706-4,62661,45058,241-5,3-61,-192-56,-3582,-43351,-46247,-394-1,-304-43,-145-37,-135,15839,25231,373-9,382-39,438-30,3606,37833,23525,267-7,79-29,179-21,-608,15427,-15517,130-10,-86
--- END of .ftr file
For the following vector :
Is there indeed something off in the way my coefficients are computed ? Or is this to be expected when pulse-shaping is done in the AD9361 ?
This phenomenon was worse when I switched to a RRC with an oversampling of 2 to increase the rate.
As stated before, any insights or help is much appreciated.
Thanks for your help !
Just to confirm the steps that you followed for the creation of custom filter,
1. Used the filter wizard to create custom filter file for the different sampling rateuse cases.
2. then replaced the FIR…
We managed to get a decent pulse shaping filter with a ~1.5% EVM at 20MSps with an oversampling of 4.
This EVM deteriorates as the rate increase but within acceptable limits.
Thanks for your…
Update on our situation :
I was able to reduce the EVM further by changing the filter configuration. Instead of using the whole 128 taps of the FIR and breaking the asymmetry of the RRC filter, I truncate the RRC filter of 129 taps to 127, keeping its original asymmetry.This cause a significant improvement in term of EVM : at 20MSps we are down to 2% EVM :
At 30MSps, the EVM is degraded to 3.5%. This I assume is due to a loss of interpolation due to the DAC's 320MSps limit.To achieve higher rate, I have to change the RRC filter to only work at an oversampling factor of 2 (please confirm, it seems that the FIR cannot output more than 120MSps). This further degrades the EVM to 5% at 40MSps.
In summary this is what we currently have : 1) 2% EVM at 20MSps 2) 3.5% EVM at 30MSps 3) 5% EVM at 40MSps 4) 15% EVM at 61MSps 5) 13.5% EVM at 41MSpsMy question is therefore now :
Is that the expected performance or should we be able to get a better EVM (especially at higher rate >40MSps) ? The AD9361 specs advertise a 1% EVM but I assume this is achieved with an external pulse-shaping filter ?
If so, where could we improve our design ?
Thanks for help !Antoine
Please refer to the below post,
Thanks for the links !
These are mostly on the computation of the .ftr coefficients however. I'll check them out to be sure that I'm configuring the FIR correctly.
However these do not answer the question on the achieved performance in the post above :
AntoineGauthier said:Is that the expected performance or should we be able to get a better EVM (especially at higher rate >40MSps) ? The AD9361 specs advertise a 1% EVM but I assume this is achieved with an external pulse-shaping filter ?
If so, where could we improve our design ?
Should I open another question ?
2. then replaced the FIR filter coefficients with RRC filter.
One point here is the filter wizard using FIR + Half band filters to get the required rejections and we use FIR gain to compensate for the droop in analog filter response to get a flat in band response.
When you replace FIR with RRC that compensation for flatness may not be there and you need to keep the half bands as they are .in some cases you may not get the full 128 taps as explained below
The Tx FIR uses DAC_CLK (Tx DAC sample clock) as its sample clock. DAC_CLK is either set equal to ADC_CLK or is set to ADC_CLK/2. The Tx FIR calculates 16 taps per clock cycle. This limits the number of available taps to the ratio of DAC_CLK to the input data rate multiplied by 16. For example, if the input data rate is 25 MHz and DAC_CLK is 100 MHz, then the ratio of DAC_CLK to the input data rate is 100/25 or 4. In this scenario, the total number of taps available is 64.
Indeed that's how I generate the custom filter.
Thanks for the clarifications !
This would explain why, using the same filter with a sample rate above 40MSps (where 96 taps only are used then) we see such degradation. We both loose a interpolation factor and our RRC filter is truncated.
Moreover, I assume we don't even have a RRC filter anymore since it will use only the first 96 taps of the file ? What others compensation does the tool takes care of that I should be aware of ?
However at 40MSps of input rate, the whole 128 taps should be available if the DAC_CLK is at 320MSps right ? Is then an EVM of 3-5% what you would expect for such a configuration ? Or do you think further improvements are possible ?