How to verify the discrete-time convolution theorem with Matlab

12 Ansichten (letzte 30 Tage)
moyu
moyu am 4 Jun. 2023
Bearbeitet: Harsh Kumar am 8 Jun. 2023
My idea is to first get the time-domain convolution result of the output signal y1, and then perform fft on it to get the y1_f spectrum. Then I get the spectrum x1_f of the input signal and the frequency response h1_f, the product of the two should be equal to y1_f. But the results I get are very unsatisfactory.The picture is as follows:

Antworten (2)

Harsh Kumar
Harsh Kumar am 4 Jun. 2023
Bearbeitet: Harsh Kumar am 8 Jun. 2023
Hi moyu,
As per my understanding ,you are using two different methods to determine the Fast Fourier Transform of a function but it does not gave the same results .
The potential cause of the mismatch of above results is the missing "scaling" factor when you are calculating x1_f from h1_f x y1_f. In FT the multiplication property states that ,
FT (x(t)∗y(t)) ⟷ (1/2π) X(ω).Y(ω)
Here 1/2π is the scaling factor which is 1/N in case of DTFT/fft .
So,
The correct equation may be rewritten as :
x1_f= 1/N* h1_f * y1_f where * is simple multiplication not convolution operator.
  1 Kommentar
moyu
moyu am 5 Jun. 2023
Thanks! I just find out that the wrong result is indeed caused by the sacling factor. However I want to verify that the discretetime Fourier transform of convolution of two sequences in time domain is equivalent to multiplication of their discrete-time Fourier transforms. In this case, scaling factor should be '1' instead of '1/2π' or '1/N'.

Melden Sie sich an, um zu kommentieren.


Paul
Paul am 4 Jun. 2023
Hi moyu,
Linear convolution in the frequency domain using fft requires zero padding the sequences before taking the FFTs and multiplying. If the sequences are each of length N, the FFTs should be zero padded to at least 2*N-1. Here's an example.
N = 10;
rng(100)
x1 = rand(1,N);
h1 = rand(1,N);
y1 = conv(x1,h1);
x1fft = fft(x1,2*N-1);
h1fft = fft(h1,2*N-1);
y1f = ifft(x1fft.*h1fft);
% verify that y1 and y1f are "the same"
max(abs(y1-y1f))
ans = 4.4409e-16
  3 Kommentare
Paul
Paul am 5 Jun. 2023
The factor of 2/N was incorrect as well. As you can see in the correct code, linear convolution is achieved by zero padding the FFTs to an appropriate length AND not using any scale factors on the FFTs, as computed by Matlab's implementation of fft.
"I want to get the true spectrum of the signal, "
Not sure what "true spectrum" means in this context, nor which signal is being referenced. In any event, I thought the question was about convolution. Is the desire to get the true spectrum a new part of the problem?
moyu
moyu am 5 Jun. 2023
Sorry, my statement is not accurate. What I need is the accurate amplitude of the spectrum, So I multiply the factor(You can see details in 'https://dsp.stackexchange.com/questions/48049/understanding-where-the-constant-2-n-comes-from-in-fourier-transformation'). Of course not using any scale factors on the FFTs is also right.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Fourier Analysis and Filtering finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by