IPB

Welcome Guest ( Log In | Register )

Computing a DCT using an FFT, Signal analysis
Mustardman
post Dec 9 2005, 06:40
Post #1





Group: Members
Posts: 25
Joined: 15-April 04
From: Australia
Member No.: 13509



I am trying to make sense of the output of the FFT when used to calculate a type-2 DCT (DCT-II). I managed to scrape together enough documentation that infomed me that, if I wanted to perform a DCT-II using an FFT algorithm, then the data should be arranged to be real even symmetric, with every even indexed data element set to zero.

No problem there. In addition, the outputs are correct, but half the expected value (I can see the output needs scaling by 2 to compensate for the fact that every second sample of the input is zero).

However, I am tyring to figure out how the output comes to be what it is?
In particular, where the zero comes from (term 4 & term 12) [counting from 0].


Input

Real : 0 x0 0 x1 0 x2 0 x3 0 x3 0 x2 0 x1 0 x0
Imag : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Output

Real : ya yb yc yd 0 -yd -yc -yb -ya -yb -yc -yd 0 yd yc yb
Imag : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

[grumble: looks good in fixed width font, but spaces are not turning out here]

In my real application, I am using a 16 point DCT, which equates to a 64 point FFT, but the above is representative.

Any hints?



PS: I know there are better ways of doing DCTs, but in my implementation, I only have access to an FFT routine.


Cheers,Owen.
Go to the top of the page
+Quote Post
 
Start new topic
Replies
oruanaidh
post Mar 30 2006, 21:04
Post #2





Group: Members
Posts: 1
Joined: 30-March 06
Member No.: 29012



% use FFT to commute DCT and then invert DCT using inverse FFT

x=1:6;

disp(x);

N=length(x);
d = dct smile.gif (x);

x2=[fliplr(x) x];
f=fft(x2);

n = 0:2*N-1;

shift=exp(-j*2*pi*(N-0.5)*n/(2*N));

f2 = real(f./shift);

d2 = f2(1:N)/sqrt(2*N);
d2(1)=d2(1)/sqrt(2);

disp(d)
disp(d2)

% now invert

d2(1)=d2(1)*sqrt(2);
d2=d2*sqrt(2*N);

f=[d2 0 -fliplr(d2(2:N))].*shift;
x2=ifft(f);

x=real(fliplr(x2(1:N)));
disp(x);
Go to the top of the page
+Quote Post

Posts in this topic


Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



RSS Lo-Fi Version Time is now: 24th July 2014 - 12:49