OFDM with real-only transmission
Started by 4 months ago●46 replies●latest reply 2 months ago●212 viewsConsider a 64 subcarrier OFDM waveform with 20MHz bandwidth. At the transmitter, we would generate 64 complex numbers (A(n) + jB(n)) n=1, 2, 3, .... 64 using the QAM-to-bits mapping. This 64-element data vector is input to the IFFT at the transmitter to generate 64 time-history complex sample points. The time-history samples are at 20MSPS because the FFT restricts the samples to occur at one-over-the-subcarrier-frequency separation. We use an IQMixer to upconvert the baseband time-histories (both real and imaginary) to the carrier frequency, sum the upconverted real and imaginary signals, and send across a channel to the receiver. At the receiver, we use a second IQ mixer to downconvert the received signal and to separate the real and imaginary signals. These real and imaginary signals are input to an FFT where the A(n) and B(n) values are re-generated.
Would it be possible to fill the IFFT input vector with 128 complex datapoints where the second half is the reversed complex-conjugate of the first half. The IFFT would generate 128 real-only time-history datapoints -- but now the sample interval is 40MSPS. We upconvert as before (single-channel mixer only) and send to the receiver. The receiver downconverts with a single-channel mixer and samples at 40MSPS to recreate the baseband time-history of 128 real digital samples. We use a 128-point FFT to recreate the 64 unique A(n), B(n) pairs.
Please see July 29, 2024 update with simulation results.
DSPForumResponse OFDM RealTime.pdf
Below is a youtube video (20min) that shows dynamic results from the simulation.
https://www.youtube.com/watch?v=9aKPk-OfnMc
Potential benefits:
1) We would use reduced-cost single-channel mixers and a single ADC -- for low cost applications such as IOT.
2) Keeping the legacy IQMixer/dual-ADC configuration would allow a second independent data channel to be transmitted so as to double the datarate at the expense of doubling sample rates -- but maintaining the bandwidth. The receiver synch steps (timing, phase, frequency) would be simplified for the second channel. The preamble and pilot subcarrier allocation could be shared between the two channels.
Drawbacks
1) Doubling the sample rate imparts a cost. However, ADCs/DACs today can easily handle this doubled sample rate.
2) Computation time. If the FFT is at 128 versus 64, then the computation will be approximately doubled. The ratio for the N versus 2N FFT will be 2Nlog2N / NlogN = 2.33 for a 64-point complex waveform (2.20 for a 1024-point FFT).
I believe the Cyclic Prefix, Forward Error Correction, equalization, and receiver phase/frequency synch methods would work the same as before.
This seems too obvious a solution for doubling the throughput --- what am I missing?
Update based on response by kaz: A real IFFT response passed through a single-input Mixer has a significant drawback. The signal bandwidth after upconversion is doubled because the baseband frequencies show up both above and below the carrier. It appears two IFFT signals could be passed through an IQmixer and recovered by an IQMixer at the receiver (doubling the datarate) -- but the bandwidth is also doubled. When the Nth-order IFFT for the N subcarriers is used, we get both the I,Q and the IQMixer math deletes the higher sideband keeping the baseband bandwidth.
If you're already upsampled to 40 MHz, you can accomplish the same thing by mixing the usual IFFT from baseband to fs/4 with a simple +/-1 multiplication mixer. Then take the real part and send it out a single DAC at 40MHz.
In practice, however, this probably won't work well because the images at the output of the DAC won't have enough guardband between them to allow for suitable filtering before transmission.
These days high-speed DACs are not unusual or expensive, so mixing to some digital IF with lots of guardband and filtering opportunities is not difficult to achieve. e.g., even with a 100 MHz sample rate (which is still pretty low these days), mixing digitally to fs/4 would put the center of the signal BW at 25 MHz, with a 40MHz gap (guardband) to the next image. That should be sufficient for image filtering before the PA.
BTW, none of these techniques, including what you proposed, would double the throughput.
From the transmitter's IQMixer we get one real output:
Tx(t) = s1(t) Cos(wt) + s2(t) Sin(wt)
From the receiver's IQMixer (Zero IF formulation) we get two real outputs:
Rx1(t) = Tx(t) Cos(wt) = s1(t) Cos^2(wt) + s2(t) Sin(wt) Cos(wt)
Rx2(t) = Tx(t) Sin(wt) = s1(t) Sin(wt) Cos(wt) + s2(t) Sin^2(wt)
trig identities ..
Rx1(t) = 0.5 ( s1(t) + s1(t) Cos(2wt) + s2(t) Sin(2wt) )
Rx2(t) = 0.5 ( s2(t) - s2(t) Cos(2wt) + s1(t) Sin(2wt) )
Low Pass Filter Rx1(t) and Rx2(t) recovers S1(t) and S2(t). Sample these at 40MHz and pass through two separate 128-point FFTs to recover two independent sets of A(n), B(n) values.
At baseband, the real part has even symmetry about the y-axis. Likewise the quadrature (imaginary) part has odd symmetry about the y-axis. So each has really 1/2 the bandwidth capacity of the total signal when centered at baseband. If your signal is 20 MHz wide at baseband, the real signal has 10 MHz unique BW that is reflected across the y-axis, and likewise the imaginary signal has 10 MHz of unique BW with the opposite symmetry across the y-axis. Together they provide 20 MHz total unique BW when at baseband.
When you mix that up to an IF frequency away from the axis, the real (or imaginary) component will each have the full 20 MHz BW of unique signal energy, so either will support all of the information contained in the signal. In other words, once mixed away from baseband, the two channels are now essentially redundant copies of each other. This is why we can throw away either of the real or imaginary channels, transmit the remaining channel, and recover the entire 20 MHz BW signal in the receiver.
The general idea is that the BW of the signal is proportional to the information capacity, regardless of whether it is at baseband or IF or RF or wherever. Mixing it away from baseband does not double the throughput or increase the information capacity.
Slartibartfast -- thanks for your patience. I admit I didnt follow your semantic explanation. With OFDM, at the transmitter, we start in the frequency domain -- we manufacture the QAM-modulated tones and the IFFT takes us to the time domain at baseband -- then the Mixer upconverts to the carrier frequency.
In my prior math expression, we can define two independent signals:
s1(t) = A1 Cos(w0 t) + B1 Sin Sin(w0 t)
s2(t) = A2 Cos(w0 t) + B2 Sin Sin(w0 t)
These are two independent QAM-modulated single tones at w0 where (A1,B1) and (A2,B2) are bit-mapped from a constellation. The two (A,B) pairs are independent so represent unique information.
At the transmitter's IQMixer, we form the single real signal:
Tx = s1(t) Cos(wc t) + s2(t) Sin(wc t) where wc >> w0.
At the receiver's IQMixer, we generate: Tx Cos(wc t) and Tx Sin(wc t). These are two separate entities. If we pass each through separate low pass filters, we are left with s1(t)/2 and s2(t)/2 from which we can separately recover both (A,B) pairs. With the QAM-modulated single tones, we dont need to add in the complexity of the IFFT/FFT but I believe the 2X datarate can be argued.
I'm very familiar with OFDM as well as single-carrier modulation. I've been developing modems for nearly forty years, so it's all pretty familiar.
Unless s1(t) and s2(t) have some sort of orthogonality they won't be separable if they occupy the same frequency (w0) at the same time. Take a QAM constellation, form A1 and B1 (which are presumably the real and imaginary components of the signal, although you don't say that), then add A2 and B2. This seems to be the case you're describing, at least initially. Once they're added together they are no longer separable without some sort of orthogonality (time, frequency, whatever). In your expressions for s1 and s2 there is no imaginary part, the real and imaginary parts seem to be simply added together, which is also problematic as the orthogonality that normally separates the A and B components is then lost as well.
In OFDM the orthogonality of the complex constellation components is preserved and the orthogonality of the subcarriers are also preserved, throughout the modulation and demodulation process. This is what the IFFT/FFT pairs do. Complex quantities with real and imaginary components are preserved throughout. This is how the data is able to be recovered in the demodulator. Your expressions are all real-valued, so it is not clear how you maintain the original orthogonality of the QAM signals, let alone add any new information.
https://www.dsprelated.com/showarticle/51.php
I hope that helps a little bit. It's not a trivial topic when you first encounter it.
I also wanted to point out that via Information Theory the theoretical throughput capacity of various modulations and coding can be determined. So we know that we can already operate fairly close to the theoretical limit of throughput for things like QAM using appropriate FEC coding. This suggests there really isn't an opportunity to double the throughput without re-inventing Information Theory and throwing out it's current principles.
Eric -- your credentials are indeed impressive. And I agree that suggesting a 2x datarate improvement for a 50-yr-old tech is a bit like anti-gravity boots. My background is image processing and GNC (>55yrs) so I am a bit handicapped.
Returning to the high-school math, its hard to question that the two signals s1(t) and s2(t) can be independently transmitted across the same bandwidth. The Tx(t)=s1(t) Cos(wt) + s2(t) Sin(wt) indeed contains two terms that are orthogonal -- but s1 and s2 dont require this.
The problem lies in the recovery of the phase and amplitude of s1, s2 at the receiver even if they are sampled beyond Nyquist. We know these signals can be "recovered" (per Nyquist) but actually doing it is a bit tricky.
Consider s1(t) = Mag Cos(w0 t + phi) -- w0<<w. Since we are creating this at the transmitter, we can also create s1I(t)= Mag Sin(w0 t + phi). Now, if we send s1(t) (Inphase) and s1I(t) (Quadrature) using the transmitter IQMixer magic, the computation of the phase/amplitude (and A,B) at the receiver is trivial and can be done on a per-sample basis. This is what motivates sending the complex signals across the wireless channel. Can we say that we have traded a 2x throughpout improvement for this benefit?
If we have real-valued s1(t) and s2(t) at the receiver (sampled at >2X their bandwidth), can we use alternative signal processing methods to solve for the A,B pairs? I have a suggestion if we can get through the above anti-gravity issues.
It looks to me like you're just describing using complex values. Sin and Cos are orthogonal to each other, which is how orthogonality is maintained modulating or mixing complex-valued quantities, like the constellation for a QAM signal or the subcarriers for an OFDM signal.
If what you have in mind is not mixing s1 and s2 fully to baseband, but keeping the signal where it is still completely real-valued, you can still recover s1 and s2, it just takes a bit more work. Usually it is just mixed full to baseband (i.e., the BW centered at zero Hz), and s1 and s2 recovered as the real and imaginary parts of the signal.
At least I think that's what you're describing.
The s1(t) and s2(t) are two totally independent communication signals. Just like two separate MIMO streams. If I can send 54mbps on s1(t), then I can also simultaneously send 54mbps on s2(t) with same shared spectrum. There is no Complex (I/Q) parallel paths anywhere during the transmission or reception. The throughput gain comes from re-use of the freed-up IQMixer channel for the 2nd stream -- but at the expense of faster sample rate. The phase/amplitude (and A,B symbols) are separately estimated for s1(t) and s2(t) using only sampling of the real signals at >2x the bandwidth.
In my simulations, I use a lot of oversampling (e.g., 100MHz for a 20MHz signal bandwidth). Because the A,B estimation is recursive (processing is per-sample), I can skip samples (e.g., skip measurements with high values) so as to reduce PAPR -- w/o reduction in the optimality of the solution. Because the processing is recursive (not batch like FFT), we observe the prediction/correction steps during the symbol sampling -- this allows adaptive estimation of the multipath delay spread -- its clearly visible in the incremental symbol processing - no need for CP -- just extend the sampling. But the most interesting aspect is subsampling of the DirectRF. Normally, we ZIF the RF via the Mixer or DDC (SDR) so as to reduce the processing requirements. I find that, if we sufficiently bandpass the RF so only the signal spectrum remains, then we can subsample the RF so that mixing is not required. That is, we could sample a 2.4GHz signal at 120MHz preserving the phase/amplitude w/o concern over the nonlinear impacts of the mixing.
There seems to be I/Q terminology problem:
With your structure (A1,B1) is [I] to the mixer while (A2,B2) is [Q] to the mixer.
You are just having two instances of streams each at double rate...each with double length iFFT.
Can you show spectrum at baseband and after upconversion.
kaz ---
The A1,B1 (complex A1+iB1), extended to 2N terms, is input to the IFFT to produce 2N real-only time-points -- we just call this "I" because its the baseband going in to one port (I port) of an IQMixer. The A2,B2 (A2+iB2) is treated similarly to produce 2N real-only time points -- we just call this "Q" because it is the second baseband input to the IQMixer at the transmitter. But you are right -- this terminology is poor. However, after the multiplication by cos(wt) and sin(wt), we can think of the two outputs as being "inPhase" and "Quadrature" before they are summed. I am thinking of a more generic use of the IQMixer to upconvert two independent baseband signals in an orthogonal manner so they can be recovered/separated at the receiver by a second mixer.
The spectrum at baseband will just show N single tones one for each subcarrier with the height from their amplitude rt(A1(n)^2 + B1(n)^2) n: 0=>N-1. For example, 802.11 with 64 subcarriers and 20MHz bandwidth will have 64 single-frequency "spikes" in the baseband spectrum starting at 0 Hz (the DC) and spaced at dw = 0.3125 MHz (64*0.3125MHz=20MHz). The same is true for the spectrum for A2,B2 -- but the two signals are independent (uncorrelated).
These could be thought of as separate streams just as in the case of independent streams formed from MIMO reflections. Interestingly, because the two streams are affected by the same Tx/Rx synch errors, we should be able to do the synch better -- we have twice the data.
After the transmitter upconversion, but before the summation from the IQMixer, we will have two signals with spectrum centered at the carrier (Wc) and extending symmetrically with the same single-frequency spikes as above. Each subcarrier frequency will show up twice symmetric about the carrier. Spikes will be at frequencies: Wc +/- n * dw . The more interesting spectrum will be after the second IQMixer downconversion. This is where we will see the original baseband spectrum + unwanted 2 * Wc terms.
Jim
I am really finding it hard to grasp. It seems your main point is converting 64 A1,B1 from phase info to amplitude info and same with A2,B2 then treat each one as inputs to mixer. But this phase to amplitude conversion is irreversible unless you are just doing a conveniently matching mathematical inversion with zero change of phase. The channel affects phase and makes it ambiguous.
maybe go back to the code you wrote -- the octave code below. You indicated you didnt get a real output. I downloaded Octave and will try this.
x = randn(1,64)+j*rand(1,64); //does this create a complex vector x, and fill it with random numbers? I was filling the complex input with QPSK values of +/- 1.0 -- from a rectangular grid with 1.0 at the corners. I think you need to set the DC value to 0.
xx=[x fliplr(conj(x))]; //this looks like it creates a new vector of xx where you appended the conjugate of x flipped left-to-right?
y=ifft(xx); //do the ifft of xx -- is y now a 128-length vector?
plot(real(y)); hold //plot the real value of y.
plot(imag(y),'g-') //plot the imaginary part of y
Let me focus on your latest idea: you send amplitude which is:
A = sqrt(I^2+Q^2)
Then receiver has to get I and Q from A. It can't because phase is unknown at receiver. It has to get two unknown variables from A.
That can't be done.
The output from the IFFT (real-only after extending the input to 2N) is the sum of all the QAM-modulated individual subcarriers. After up-down-conversion by the mixers (and LPF), we recover this IFFT output. This real signal sampled by ADC at 2X the bandwidth, recovers the original complex input to the IFFT.
two keys:
1) can we make a real output with the IFFT with a 2N input vector by conjugating/flipping the second half.
2) can we send this signal from 1) into an FFT so that it returns the original IFFT input vector.
3) next leap -- can we send real signals from two independent IFFTs into the I,Q channels of the IQMixers two recover both real IFFT signals.
You can show all this with the Octave simulation.
My code is checking if your idea is zeroing the imaginary based on my understanding of your iFFT frame. Here it is modified for qpsk but it is a diversion:
pkg load communications
x = randsrc(1,64,[1,-1])+j*randsrc(1,64,[1,-1]); %64 data
xx=[x fliplr(conj(x))]; %128 data
xx(1) = 0;
y=ifft(xx); %128 data
plot(real(y)); hold
plot(imag(y),'g-')
also could add
XXX = fft(y)
Test to see if xxx = xx -- this must be true.
If we do the code twice and add in the IQMixer up/down conversion (+LPF) for the TWO real outputs, we have the simulation that I did.
if you reverse any ifft using fft you get back your signal. That doesn't mean much. It is just ideal mathematical inversion. If you change the phase of (y) you get mismatch.
The channel will change the phase and there is no way to recover original I/Q which you converted to amplitude.
The idea of using real only which turned out to be amplitude sqrt(I^2+Q^2) will lose info of I/Q symbols from source.
So I believe you should give up I am afraid.
Kaz ..
The channel will indeed modify the phase and amplitude --- this is the key purpose of multicarrier waveform -- to be able to establish the required phase/amplitude correction over a specific narrow frequency. The preamble of the data block sends out known pre-assigned symbols that, once demodulated at the receiver, can be used to correct the channel-induced disturbances. This process is called channel equalization. You suggest there is no way to recover the phase at the receiver. However, you agree that we can recover the original IFFT input vector be sending the real-only IFFT output back through the FFT. The output of the receiver's FFT contains exactly the amplitude and phase of the original modulated subcarriers!
If you reviewed the video, you see I simulated the whole process with two independent IFFT/FFT datapaths for two separate bitstreams -- including the IQMixer math and various noise sources. I have concern the X2 throughput benefit from the real-only datapaths doesnt pass the sniff test! But your semantic argument about "cant-recover-phase" doesnt appear to be the case.
I suggest "politely" you read about qpsk, ASK etc without ofdm, just basic IQ digital communication (FDM). That will simplify your modelling.
On a different note, I am puzzled by your ifft framing (64 to 128):
You say
"Would it be possible to fill the IFFT input vector with 128 complex datapoints where the second half is the reversed complex-conjugate of the first half. The IFFT would generate 128 real-only time-history datapoints "
isn't that what I did in my code?
Then later you say you get amplitude as sqrt(I^2+Q^2). How do you relate this amplitude equation to your above description.
Kaz --
no need for politeness -- I am looking for someone to show me why the real-only paths wont work -- so I dont waste more of my time. My goal is a hardware demo using a pair of the ADI AD9084 chips. What if I am actually correct and we can increase the datarate by 2X?
/////
isn't that what I did in my code?
Then later you say you get amplitude as sqrt(I^2+Q^2). How do you relate this amplitude equation to your above description.
Your above statements are correct. When you do the N-length complex vector for N QAM-modulated subcarriers, you get an N-length complex output with non-zero real and imaginary terms -- these non-zero time sequences are then sent across the channel to be separately recovered at the receiver. But if you do the 2N input vector and the conjugate/fliplr (your Octave sim), then you also get a complex output but of length 2N -- and (surprise) the complex terms are exactly zero! Thus the amplitude math as you state is correct -- as the Q is just zero. Now it would be a waste of resources to send both the I/Q across the channel -- allowing the repurposing of the IQMIxer to allow sending two independent datapaths.
As another option, you can use an input vector of length M*N; M>=2. You must maintain A(M*N-n)+iB(M*N-n)=A(n)+iB(n) -- with the rest of the terms zero. This will give you an ideal interpolation of the "real" IFFT output time sequence. For my sim, I use an M=128, so the IFFT output vector is of length 64*128 = 8192. What this does is to have roughly 8 digital samples per carrier cycle at the receiver. I'm thinking about a DirectRF radio solution. I show an example of this interpolation for M=2 and M=128 in the .pdf that I submitted. This allows me to do a very simple digital LPF to strip out the two*carrier terms after the IQMixer downconversion.
Jim
I don't see zero Q: are we looking at same vector
blue is I & green is Q from iFFT (of my code)
kaz --
maybe try the following if its easy.
Generate a time function from a sum-of-three-single-tones.
s(t) = (Cos(t)+Sin(t)) + (Cos(2t)-Sin(2t)) + (-Cos(3t)-Sin(3t))
QAM= (1+i) (1-i) (-1-i)
This represents the "real" output for three single tones with QPSK modulation -- first three terms in the Fourier series -- delta-frequency will be 1 rad/sec and the delta-time is 1/64. Generate 128 values from above with time spacing 1/64. Create a complex vector with the imaginary part zero. Put this into the FFT. This should return 128 complex values:
[1+i, 1-i, -1-i, 122 zero values , -1+i, 1+i, 1-i]
That is, the last three values will be the conjugate values from the first three -- but fliplr. This will tell us if the Octave FFT/IFFT works like the FFTW code here. If you like, we can do a teams video call and I'll walk you through the very simple simulation (source) I am using here.
Jim
Kaz -- I ran the case above and this is what I get:
Below is the C# code to produce the above ....
The input vector of length 128 has the added terms to force a "real" output from the IFFT. You are correct, I am plotting the "real" component (left) and the "imaginary" component (right) of the complex output -- NOT the phase as is stated in the legend. The phase should be arctan(imaginary/real) -- so with "tiny" imaginary term, the phase should also be "tiny" i.e., ~10^-16ish as shown in the graph.
Both matlab and octave ifft produce same result.
Your iFFT is doing something wrong and misleading you.
Jim
x = [1+i, 1-i, -1-i, zeros(1,122), -1+i, 1+i, 1-i];
y = ifft(x);
plot(real(y)); hold
plot(imag(y),'g-')
Kaz ... maybe you inserted too many zeros?
Not sure what this does: zeros(1,122)
maybe should be zeros(4,125) -- put zeros into elements 4 through element 125.
there should be three non-zero terms, then 122 zero terms, and then 3 more non-zero terms.
the below article describes how to enforce the real output from the IFFT for a single tone.
https://www.mathworks.com/help/matlab/ref/ifft.htm...
I see the use of this expression:
Y2 = [Y1(1) Y1(2:end)/2 fliplr(conj(Y1(2:end)))/2];
we will need the /2 to get the right answer.
I started vector with three symbols then 122 zeros then three symbols at end.
If you target symmetry then using this code gives zero Q:
x = [0, 1+i, 1-i, -1-i, zeros(1,121), -1+i, 1+i, 1-i];
y = ifft(x);
plot(real(y),'.-'); hold
plot(imag(y),'g.-')
But I don't see any relevance doing that. As such you assume the input to iFFT is single sided spectrum then you extend it to become mirrored. A major waste of spectrum
Thus you achieve double data (I & Q) at expense of mirrored spectrum. Then you offset that by having a second stream (A2/B2) to create new pair of I/Q to mixer. this way it could work but no benefit except that you use double resource of iFFT/FFT. You might as well just double the speed of single stream instead of parallelism.
Kaz ..
Thanks for your patience. I see your point. My proposed approach of re-purposing the IQMixer with two real-only inputs would actually work -- as I showed with simulation. The two real datastreams would result in 2X datarate -- but the required spectrum would also be doubled. You send two 20MHz bandwidth signals across 40MHz of bandwidth -- just the same performance as two separate OFDM transmissions with carriers 20MHz apart. Not what I was hoping!
Jim
x = [1+i, 1-i, -1-i, zeros(1,122), -1+i, 1+i, 1-i];
y = ifft(x);
plot(real(y)); hold
plot(imag(y),'g-')
here is the plot:
When changing iFFT input from 64 samples to 128 samples by using reversed conjugated 64 samples you will get a copy of same 64 samples extended at twice bandwidth. If you then discard the last 64 you get back your information and bandwidth but as I/Q not real only. So no benefit.
I guess you are wrongly mapping positive/negative frequencies to I/Q.
The I/Q concept is better understood without iFFT/FFT such as QPSK modem that generates I/Q data.
The I/Q spectrum must be asymmetric and has to be upconverted well away from dc then the real only part can be taken to a channel, thus carrying information from both I & Q channels. The upconverter shifts the negative and positive frequencies to positive higher frequencies.
thanks for noting this confusion.
I was (erroneously) referring to the FFTW software implementation of the IFFT. There, the input array is a complex array (each array element contains two values) -- but of course, you cannot use negative array indices. For an OFDM IFFT simulation, we may want, for example, to represent 64 subcarriers. If you fill the FFTW input array with 64 complex values, you will get an output array of 64 complex values. The FFTW output array contains the real and imaginary sampled time-histories. With OFDM, these two independent time-histories are placed into the IQMixer for upconversion and transmission to the receiver.
But what if we want an FFTW output of 128 real-only values. For FFTW, the input array will have the first 64 values as before but the second half of the array has a copy of the first half conjugated and reversed. The output array will be length 128 but the imaginary components will all be zero.
This is my understanding of your idea as a matlab(or Octave) model, please correct me if wrong, I don't see zero Q output:
##################################
x = randn(1,64)+j*rand(1,64);
xx=[x fliplr(conj(x))];
y=ifft(xx);
plot(real(y)); hold
plot(imag(y),'g-')
So sorry kaz --- I'm not a Matlab programmer.
I hand-bang this stuff using Visual Studio and C/C++. The issue may be the mechanization of FFTW -- its very well documented and widely used. In C++
Complex[] input = new Complex[FFTLength]; //uses Complex type in .net
Complex[] output = new Complex[FFTLength];
input[12] = new Complex(0.5, 0.5); //set the single frequency
input[FFTLength-12] = new Complex(0.5, -0.5); //second-half for real
DFT.IFFT(input, output); //do the FFTW IFFT
This produces an FFTLength time sequence with a single frequency. Can likely try with Matlab -- but its IFFT may use a different input array structure.
I will be happy to send along a VisualStudio .sln if you want to run this from the source.
If you download Octave (this is free Gnu tool that is the unwanted clone of Matlab), it takes few minutes. Then in Octave GUI just copy paste my code and you are done.
What is your motivation for only wanting real-valued output? Previously you mentioned using only one DAC, but that's already pretty easy if the complex-valued signal is mixed to a digital IF within a single DACs sample frequency range. This is typically what's done in modern modulators.
If I understand correctly what you're suggesting (and I'm not sure I do), your method would work, too, it's just more complex. It doesn't add any information-carrying capacity.
I think the long play is robustness/graceful degradation to channel disturbance with fixed BER and spectrum use. The real-only path recursive solutions provide a ton of additional insight into the channel behavior while maintaining the end-of-symbol constellation-error maps available as with legacy OFDM. A minimal-device IOT solution also is of interest.
Numerical complexity: The stuff I am doing is Nth order per digital sample. FFT is NlogN but after the symbol sampling is complete.
Do you have a radio diagram showing how you do the complex tx/rx with only a single DAC?
FWIW, most channel effects of interest to comm systems that are processed in a demodulator are linear, e.g., multipath reflections, doppler, pathloss, etc., so there's no advantage to processing real-only. Most channel models are developed to be translated to baseband (i.e., complex-valued) for this reason. OFDM is generally always processed at baseband with complex-valued signals for this reason...it's easier and less complex to do with no loss of performance. OFDM exists specifically to be robust to multipath effects, and complex-valued equalizers have been around forever for single-carrier modulations as well. You may have an uphill battle to demonstrate an advantage over existing methods, which are pretty mature.
You can search on Digital Downconversion (DDC) or Digital Upconversion (DUC) to get a lot of information on using a single ADC or DAC in a receiver or modulator. It is pretty much the normal modem architecture these days for most applications. The signal flow can be the same as a traditional system, just the conversion is done at IF instead of at baseband. It is not unusual to digitize a wide bandwidth with a single ADC and digitally tune multiple channels into multiple demodulators from the same sample stream, and similarly transmit multiple channels from independent modulators into a single DAC.
This article is a reasonable basic discussion of the architecture:
https://www.allaboutcircuits.com/technical-article...
There is even a standards organization working on standardizing how people use Digital Intermediate Frequency processing to make equipment interoperable at the ADC or DAC interface.
https://dificonsortium.org/
Sorry for delayed response .. I'm working on a simulation to demo the results described below. You stated:
....most channel effects of interest to comm systems that are processed in a demodulator are linear, e.g., multipath reflections, doppler, pathloss, etc., so there's no advantage to processing real-only.
The current OFDM for N subcarriers demands an N-point IFFT at the transmitter resulting in two N-point time-histories -- a real and imaginary time-history. The N sampled points from the IFFT are produced at exactly the signal bandwidth: N * subcarrier-delta-frequency. The digital sample rate must be proportional to the delta-frequency for the IFFT (and FFT) to work with NlogN efficiency. No benefit can be gained with current OFDM by sampling faster. Also, OFDM demands treatment of two independent data streams (the real and imaginary) throughout the transmitter and receiver processing flow.
A real-only transmitted signal can be readily formed from the same A,B QAM bit-mapped grid points as is currently used by the IFFT. However, N additional complex conjugate grid points (A+jB)* => (A-jB) must be added to achieve the necessary 2N points for the 2N IFFT so as to achieve 2N time-history sample points. I use the FFTW software algorithm for the IFFT/FFT and the extra terms are added to the upper half of the IFFT input array in reverse order: A(N-n), B(N-n) = A(n), B(n). When you do this, the FFTW (IFFT) output is a 2N complex array with the imaginary part exactly zero. The 2N samples are spaced over the same time-period so the time-samples are spaced at twice the signal bandwidth. The 2N IFFT computation time is approximately X2 (2.2X for a 1024 IFFT). A similar 2N FFT can be performed at the receiver with the expense of twice the normal OFDM receiver sample rate; e.g., 40MHz vs 20MHz for 64 subcarriers over 20MHz bandwidth.
When transmitting both real and imaginary as with OFDM, we require an IQMixer at both Tx/Rx ends. This is a non-linear operation known to insert signals at 2*carrier at the receiver. If we transmit/receive ONLY a single real signal from the 2N-point-IFFT, we have freed-up one of the IQMixer channels.
We have two design options: use a single-channel Mixer/ADC for a low cost/SWaP Tx/Rx (an IoT system) or we can re-purpose the IQMixer so as to transmit a completly separate and independent datastream. That is, we would have two independent 2N IFFT/FFT processes at the Tx/Rx so that we could communicate two independent datastreams across the same frequency spectrum. We have re-purposed the IQMixer's orthogonality functionality to achieve a 2X data throughput.
Consider a second benefit of a time-based solution at the receiver. Direct RF seems to be the trend. The ADI AD9084 is an example sampling RF to 20Gsps -- Intel's devices go up to 64Gsps. The AD9084 includes a DDC for downconversions that is a digitized version of the Mixing -- retaining the nonlinear multiplication by sin/cos of the carrier.
A very simple time-based algorithm can trap the peaks in the time-sampled carrier at the receiver. For example, consider sampling a 2.4GHz carrier signal s(i) at 20Gsps -- look for (s(i+1) > s(i)) && (s(i+1) > s(i+2)) to select s(i+1) as a peak. If we select every Mth peak, we have subsampled the modulated subcarriers at a rate of carrier/M. This trivial time-based process replaces the non-linear Mixing process. A much better time-based process, with noise considerations, is available but this simple algorithm suggests that there are options to replace the troublesome nonlinear Mixing.
Your focus is on mixer resource and not on bandwidth.
Using real only method means double spectrum generated and you also have to find a way to get IQ constellations(qpsk, 16QAM, ...etc).
For example: 20MHz IQ ofdm may occupy 9MHz baseband, 18MHz after complex mixer. If real only it requires 18MHz baseband for same symbol rate and then 36MHz after real mixer. This is Waste of spectrum.
IQ is conceptually the simplest case of "spatial multiplexing" whereby symbols are split into two streams and sent in parallel in air at same time/frequency.
The file shows simulation results that address use of real-only OFDM transmissions.
Simulation Results for OFDM with real-only transmission