Reply by Christian Gollwitzer May 6, 20132013-05-06
Am 06.05.13 10:26, schrieb coolboy03:
> Actually FFT of 1536 is used in PRACH LTE 3gpp for a transmission bandwith > of 15Mhz. I have already implemented in matlab, and I can' use any library > or software because I am working in a software company i have to build my > own regardless of the performance of computation.
If you are doing MATLAB, there is no need to twiddle with factors. Just call fft(x) which will do it for you (it uses FFTW internally). Otherwise kissfft has a very liberal license (that was one reason to make it) and can be included in commercial projects without problems. Christian
Reply by coolboy03 May 6, 20132013-05-06
>On 4/27/2013 3:24 PM, glen herrmannsfeldt wrote: >> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >>> On 4/25/2013 12:49 PM, glen herrmannsfeldt wrote: >>>> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >>>>> On 4/25/2013 11:57 AM, coolboy03 wrote: >>>>>> I just want to know how can we implement the FFT of size 1536. >> >> (snip) >>>>>> With reading >>>>>> the literature I came to know that we do it by splitting 1536 into
three
>>>>>> block of 512 and then take their fft. In the end we combine all the
ffts
>>>>>> and multiply with the respective twiddle factors to and apply the
radix 3
>>>>>> stage. Can anyone help me with the C coding regarding it. Suppose
that I
>>>>>> have done the coding for three 512 sub transforms . >>>>>> Now I want to go to the radix 3 stage. >> >>>>> For any purpose other then homework, use FFT size of 2048 and pad
data
>>>>> with zeroes. >> >>>> Unless the data is periodic in 1536 samples. >> >>> Then resample 1536 into 4096 >> >> Hmm. Easier than resampling to 2048 I suppose. > >The 2048 would require heavy antialiasing. > >> But the radix 3 step isn't that hard to do, is it? > >Yes, but I doubt efficiency would be any better. > >VLV > > >
Actually FFT of 1536 is used in PRACH LTE 3gpp for a transmission bandwith of 15Mhz. I have already implemented in matlab, and I can' use any library or software because I am working in a software company i have to build my own regardless of the performance of computation.
Reply by Jussi April 28, 20132013-04-28
On 04/28/2013 12:23 AM, Vladimir Vassilevsky wrote:
> On 4/27/2013 3:24 PM, glen herrmannsfeldt wrote: >> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >>> On 4/25/2013 12:49 PM, glen herrmannsfeldt wrote: >>>> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >>>>> On 4/25/2013 11:57 AM, coolboy03 wrote: >>>>>> I just want to know how can we implement the FFT of size 1536. >> >> (snip) >> >>>>> For any purpose other then homework, use FFT size of 2048 and pad data >>>>> with zeroes. >> >>>> Unless the data is periodic in 1536 samples. >> >>> Then resample 1536 into 4096 >> >> Hmm. Easier than resampling to 2048 I suppose. > > The 2048 would require heavy antialiasing. > >> But the radix 3 step isn't that hard to do, is it? > > Yes, but I doubt efficiency would be any better. > > VLV > >
The number of real multiplications of 1536 radix-3 is less than 70% of that of the 2048 split-radix.
Reply by Vladimir Vassilevsky April 27, 20132013-04-27
On 4/27/2013 3:24 PM, glen herrmannsfeldt wrote:
> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >> On 4/25/2013 12:49 PM, glen herrmannsfeldt wrote: >>> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >>>> On 4/25/2013 11:57 AM, coolboy03 wrote: >>>>> I just want to know how can we implement the FFT of size 1536. > > (snip) >>>>> With reading >>>>> the literature I came to know that we do it by splitting 1536 into three >>>>> block of 512 and then take their fft. In the end we combine all the ffts >>>>> and multiply with the respective twiddle factors to and apply the radix 3 >>>>> stage. Can anyone help me with the C coding regarding it. Suppose that I >>>>> have done the coding for three 512 sub transforms . >>>>> Now I want to go to the radix 3 stage. > >>>> For any purpose other then homework, use FFT size of 2048 and pad data >>>> with zeroes. > >>> Unless the data is periodic in 1536 samples. > >> Then resample 1536 into 4096 > > Hmm. Easier than resampling to 2048 I suppose.
The 2048 would require heavy antialiasing.
> But the radix 3 step isn't that hard to do, is it?
Yes, but I doubt efficiency would be any better. VLV
Reply by glen herrmannsfeldt April 27, 20132013-04-27
Vladimir Vassilevsky <nospam@nowhere.com> wrote:
> On 4/25/2013 12:49 PM, glen herrmannsfeldt wrote: >> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >>> On 4/25/2013 11:57 AM, coolboy03 wrote: >>>> I just want to know how can we implement the FFT of size 1536.
(snip)
>>>> With reading >>>> the literature I came to know that we do it by splitting 1536 into three >>>> block of 512 and then take their fft. In the end we combine all the ffts >>>> and multiply with the respective twiddle factors to and apply the radix 3 >>>> stage. Can anyone help me with the C coding regarding it. Suppose that I >>>> have done the coding for three 512 sub transforms . >>>> Now I want to go to the radix 3 stage.
>>> For any purpose other then homework, use FFT size of 2048 and pad data >>> with zeroes.
>> Unless the data is periodic in 1536 samples.
> Then resample 1536 into 4096
Hmm. Easier than resampling to 2048 I suppose. But the radix 3 step isn't that hard to do, is it? -- glen
Reply by Vladimir Vassilevsky April 27, 20132013-04-27
On 4/25/2013 12:49 PM, glen herrmannsfeldt wrote:
> Vladimir Vassilevsky <nospam@nowhere.com> wrote: >> On 4/25/2013 11:57 AM, coolboy03 wrote: >>> I just want to know how can we implement the FFT of size 1536. > >> "how can _we_ implement..." >> India ? > >>> With reading >>> the literature I came to know that we do it by splitting 1536 into three >>> block of 512 and then take their fft. In the end we combine all the ffts >>> and multiply with the respective twiddle factors to and apply the radix 3 >>> stage. Can anyone help me with the C coding regarding it. Suppose that I >>> have done the coding for three 512 sub transforms . >>> Now I want to go to the radix 3 stage. > >> For any purpose other then homework, use FFT size of 2048 and pad data >> with zeroes. > > Unless the data is periodic in 1536 samples.
Then resample 1536 into 4096 VLV
Reply by Rick Lyons April 27, 20132013-04-27
On Thu, 25 Apr 2013 11:57:55 -0500, "coolboy03" <95038@dsprelated>
wrote:

>I just want to know how can we implement the FFT of size 1536. With reading >the literature I came to know that we do it by splitting 1536 into three >block of 512 and then take their fft. In the end we combine all the ffts >and multiply with the respective twiddle factors to and apply the radix 3 >stage. Can anyone help me with the C coding regarding it. Suppose that I >have done the coding for three 512 sub transforms . Now I want to go to the >radix 3 stage. >
Hello coolboy03, I don't know if it would be of any use to you but you might take a look at: http://www.dsprelated.com/showarticle/63.php It might help. Ya' never know. [-Rick-]
Reply by willi April 25, 20132013-04-25
"coolboy03" <95038@dsprelated> wrote in message 
news:3o-dnTO9FNoO_eTMnZ2dnUVZ_h-dnZ2d@giganews.com...
>I just want to know how can we implement the FFT of size 1536. With reading > the literature I came to know that we do it by splitting 1536 into three > block of 512 and then take their fft. In the end we combine all the ffts > and multiply with the respective twiddle factors to and apply the radix 3 > stage. Can anyone help me with the C coding regarding it. Suppose that I > have done the coding for three 512 sub transforms . Now I want to go to > the > radix 3 stage. > >
Not in C but matlab: function Y = dft_mixedradix(x, N1, N2) % N1*N2 point DFT. % Y = dft_mixedradix(x, N1, N2); N = numel(x); mx = reshape(x, N1, N2); % x -> matrix: N1xN2 in column-major order mn = (0:N1-1)' * (0:N2-1); tw = exp(-1i * 2 * pi / N .* mn); % twiddlefactor Y1 = fft(mx.', N2).'; Y2 = Y1 .* tw; Y = fft(Y2, N1).'; Y = Y(:); % Test: % x = randn(1536,1); % y1 = fft(x); % y2 = fft_mixedradix(x, 3, 512); % plot([y1-y2]);grid If you have Matlab/octave you should be able to run and test the above and then convert it to C. To get best performance don't use 2d-arrays, use a 1d-array instead and index with appropriate stride. Best rgds --
Reply by Eric Jacobsen April 25, 20132013-04-25
On Thu, 25 Apr 2013 11:57:55 -0500, "coolboy03" <95038@dsprelated>
wrote:

>I just want to know how can we implement the FFT of size 1536. With reading >the literature I came to know that we do it by splitting 1536 into three >block of 512 and then take their fft. In the end we combine all the ffts >and multiply with the respective twiddle factors to and apply the radix 3 >stage. Can anyone help me with the C coding regarding it. Suppose that I >have done the coding for three 512 sub transforms . Now I want to go to the >radix 3 stage.
Is there a reason to not just do a DFT of length 1536? If this is for a sim or analysis a DFT of that length can be computed pretty quickly these days. Implementation in code of a DFT of any length is far simpler than the tricks that need to be employed to get such a length with FFTs. Eric Jacobsen Anchor Hill Communications http://www.anchorhill.com
Reply by glen herrmannsfeldt April 25, 20132013-04-25
Vladimir Vassilevsky <nospam@nowhere.com> wrote:
> On 4/25/2013 11:57 AM, coolboy03 wrote: >> I just want to know how can we implement the FFT of size 1536.
> "how can _we_ implement..." > India ?
>> With reading >> the literature I came to know that we do it by splitting 1536 into three >> block of 512 and then take their fft. In the end we combine all the ffts >> and multiply with the respective twiddle factors to and apply the radix 3 >> stage. Can anyone help me with the C coding regarding it. Suppose that I >> have done the coding for three 512 sub transforms . >> Now I want to go to the radix 3 stage.
> For any purpose other then homework, use FFT size of 2048 and pad data > with zeroes.
Unless the data is periodic in 1536 samples. -- glen