Group delay noise in minimum phase impulse response
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have recorded an impulse response of a speaker driver unit. I load this impulse response into Matlab. I then recreate the minimum phase using Hilbert transformation, however i get some group delay, say about 100 samples at some frequencies, which is more than i would expect from a speaker driver unit.
I then use some smoothing, in order to reduce the group delay, but i can't seem to get much below 10 samples group delay, without smoothing the hell out of the measured data.
Can i somehow avoid this group-delay which to me looks like somekind of noise. I don't see how a speaker driver unit can have 100 samples group delay between say 1000Hz and 1001Hz. Maybe im wrong.
I have attached a zip file (see link below) with the matlab .m file and the txt file containing the impulse response. Please study the group-delay in fvtool. http://dl.dropbox.com/u/2119565/Matlab_kode.zip
%Fase test
clear all; close all; clc;
Fs = 48000;
%%load measured data
imp1 = load('4inch_mid_imp.txt');
impRe = imp1(:,2); %impulse response, real.
impIm = imp1(:,3); %impulse response, imaginary.
imp = impRe() + impIm()*i; %Complex impulse response, rectangular form
gate = 50; % gate time in [ms]
x = impRe(1:(Fs/1000)*gate); % Load real part of impulsresponse
fvtool(x)
X = abs(fft(x));
X = X(1:(length(X)/2)+1);
% Smooth
X = smooth(X,20,'sgolay');
X = [X; flipud(X(1:end-1))];
x = ifft(X);
[xf, x] = rceps(real(x)); % Hilberttransformation to calculate minimum phase
fvtool(x);
%manual group delay calculation to check that fvtool is not bugging
phase = angle(fft(x));
phase = phase(1: (length(phase)/2) + 1);
for i = 1:length(phase)-1;
GD(i) = -(phase(i+1)-phase(i))/((Fs/2)/length(phase));
end
GD = (GD / (2*pi)) * Fs; %omregn delay fra rad til samples
semilogx(GD);
3 Kommentare
Antworten (2)
Daniel Shub
am 27 Okt. 2011
What is your SNR for the impulse response. How far was the speaker from the microphone? What do the first ~200 samples look like in the time domain. I think a little noise at the onset in the time domain could really screw up the minimum phase representation. Have you tried zeroing out the initial segment?
4 Kommentare
Siehe auch
Kategorien
Mehr zu Antennas, Microphones, and Sonar Transducers 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!