Forums

Signal processing help required

Started by phil...@nrc.ac.uk January 8, 2008
I am de-convolving A and B by the standard method of taking FFTs of both time signals and dividing FFT of B by FFT of A, then taking the iFFT of the result to get the de-convolved time signal. A is a time domain signal of 650 discrete data points and B is a time domain signal of 3500 discrete data points.

My question/problem is about the differing signal lengths, also getting my head around the theory. I am zero-padding both signals out to 4096 discrete data points before FFTs occur.

i. Is my matlab code (or more impotantly my process) correct to properly de-convolve these 2 signals?

ii. Can 2 signals of different lengths be successfully de-convolved?

iii. What is the correct length of the resultant de-convolved signal (H(t)), 1725 ns or some other length of time?
%% Read in data from the two files
A = xlsread('signal_A'); % signal A of length 650 data points (-15 -> 310 ns)
B = xlsread('signal_B'); % signal B of length 3500 data points (-20 -> 1705 ns)

%% Sampling time
Ts = 0.5*10^-9; % sample time is 0.5ns for both signals
t = 0:Ts:(Ts * 4095); % Not sure about this, it sets final signal length

%% FFT of A and FFT of B
A_freq = fft(A, 4096); % FFT of A, padding out to 4096 points
B_freq = fft(B, 4096); % FFT of B, padding out to 4096 points

%% Find channel response
H(f) = B_freq ./ A_freq; % Effective de-convolution

%% calculate ifft
H(t) = ifft( H(f) ); % this gives resultant time domain signal

plot (t,H(t))
What you are doing is essentially correct. Zero-Padding does not alter the structure of the problem in any way. However, deconvolution by dividing the FFT's is not always a good technique. If the signal in the denominator has values close to zero for a range of frequencies then the deconvolution will blow up and you will essentially end up with a lot of noise. A better way would be use least squares formulation with Tikhonov regularization. If you are loathe to doing this then you might consider using the inbuilt function deconvreg in matlab.

Regards
Gokul

----- Original Message ----
From: "p...@nrc.ac.uk"
To: m...
Sent: Monday, 7 January, 2008 10:22:58 AM
Subject: [matlab] Signal processing help required

I am de-convolving A and B by the standard method of taking FFTs of both time signals and dividing FFT of B by FFT of A, then taking the iFFT of the result to get the de-convolved time signal. A is a time domain signal of 650 discrete data points and B is a time domain signal of 3500 discrete data points.

My question/problem is about the differing signal lengths, also getting my head around the theory. I am zero-padding both signals out to 4096 discrete data points before FFTs occur.

i. Is my matlab code (or more impotantly my process) correct to properly de-convolve these 2 signals?

ii. Can 2 signals of different lengths be successfully de-convolved?

iii. What is the correct length of the resultant de-convolved signal (H(t)), 1725 ns or some other length of time?

%% Read in data from the two files

A = xlsread('signal_ A'); % signal A of length 650 data points (-15 -> 310 ns)

B = xlsread('signal_ B'); % signal B of length 3500 data points (-20 -> 1705 ns)

%% Sampling time

Ts = 0.5*10^-9; % sample time is 0.5ns for both signals

t = 0:Ts:(Ts * 4095); % Not sure about this, it sets final signal length

%% FFT of A and FFT of B

A_freq = fft(A, 4096); % FFT of A, padding out to 4096 points

B_freq = fft(B, 4096); % FFT of B, padding out to 4096 points

%% Find channel response

H(f) = B_freq ./ A_freq; % Effective de-convolution

%% calculate ifft

H(t) = ifft( H(f) ); % this gives resultant time domain signal

plot (t,H(t))
What you are doing is essentially correct. Zero-Padding does not alter the structure of the problem in any way. However, deconvolution by dividing the FFT's is not always a good technique. If the signal in the denominator has values close to zero for a range of frequencies then the deconvolution will blow up and you will essentially end up with a lot of noise. A better way would be use least squares formulation with Tikhonov regularization. If you are loathe to doing this then you might consider using the inbuilt function deconvreg in matlab.

Regards
Gokul

Thanks for the reply. I tried the deconv function in Matlab and it gave one of the files in the residual part of the deconv and a straight line in the other part (the result). It seems deconv doesn't work with my 2 files in their current form. Any advice?

As for the Tikhonov, I will maybe leave that to plan B as I don't know where to start even after some reading!!

Thanks,

Phil
In addition to the above question, I have a question on the same subject classified as follows:

I have two sets of data: (1)excitation time history obtained from a single point at sampling frequency 500Hz (vector), and (2)response time series measured at 4 points with sampling frequency (matrix).

First, how can I calculate and plot the FFT versus frequency of the time series data in MATLAB taking into consideration the different sampling frequency.

Secondly, I need some explanation/suggestion on how to determine the frequency response functions (FRFs) of the (Nx4) response matrix with respect to the excitation vectors, each of different sampling rate.

I appreciate your gesture.