Sign in

username:

password:



Not a member?

Search speechcoding



Search tips

Subscribe to speechcoding



speechcoding by Keywords

ACELP | ADPCM | AMBE | AMR | AMR-NB | CELP | Codebook | DTMF | G.723 | G.726 | G.729 | GSM | Interpolation | LPC | LSF | LSP | MELP | PCM | Perceptual | Pitch | PSOL | QCELP | Quantization | SMV | VAD | Vocoder

Discussion Groups

Discussion Groups | Speech Coding | wiener filter implementation.

Technical discussions related to Speech Coding (all itu and other vocoders, ACELP, CELP, AMR, etc)

  

Post a new Thread

wiener filter implementation. - yajn...@gmail.com - May 23 8:41:25 2006



Hi,
I am currently working on a speech enhancement project. I am implementing a noise cancellation
system using Wiener filter.
>From what I read in the text books and from the net , I got the transfer function for the
filter as

h(f) = {psd(noisySignal) - psd(noiseSignal) }/psd(noisySignal).
I implemented this in matlab ,but the result was a highly distorted signal.
I have given my procedure, pls suggest me the right way of doing it,
Assumption:First few samples are from pure noise segment.

noise = noise.* hamming(FFT_SIZE)';
FN = fft(noise,FFT_SIZE); %FFT
psdN = (FN.*conj(FN)); % psd of noise.

signal = signal.*hamming(FFT_SIZE)';
FS = fft(signal,FFT_SIZE); %/FFT
psdS =  (FS.*conj(FS));

numrtr = psdS.-psdN;
denmntr = psdS;
coef = numrtr./denmntr;  % filter TF

% filtering
outF = FS.*coef;
out = ifft(outF,FFT_SIZE);
output = real(out);

Thanks in Advance,
Yajna.



(You need to be a member of speechcoding -- send a blank email to speechcoding-subscribe@yahoogroups.com )

RE: wiener filter implementation. - Huo Jiaquan - May 29 7:29:44 2006

I believe your problem lies in that your power
spectrum estimation is not reliable. If i were to do
it, I would average the psd's over a consecutive of
say L sliding windows. Check with standard routines
for doing psd estimation.

--- y...@gmail.comдµÀ:

> Hi,
> I am currently working on a speech enhancement
> project. I am implementing a noise cancellation
> system using Wiener filter.
> From what I read in the text books and from the net
> , I got the transfer function for the filter as
> 
> h(f) = {psd(noisySignal) - psd(noiseSignal)
> }/psd(noisySignal).
> I implemented this in matlab ,but the result was a
> highly distorted signal.
> I have given my procedure, pls suggest me the right
> way of doing it,
> Assumption:First few samples are from pure noise
> segment.
> 
> noise = noise.* hamming(FFT_SIZE)';
> FN = fft(noise,FFT_SIZE); %FFT
> psdN = (FN.*conj(FN)); % psd of noise.
> 
> signal = signal.*hamming(FFT_SIZE)';
> FS = fft(signal,FFT_SIZE); %/FFT
> psdS =  (FS.*conj(FS));
> 
> numrtr = psdS.-psdN;
> denmntr = psdS;
> coef = numrtr./denmntr;  % filter TF
> 
> % filtering
> outF = FS.*coef;
> out = ifft(outF,FFT_SIZE);
> output = real(out);
> 
> Thanks in Advance,
> Yajna.



(You need to be a member of speechcoding -- send a blank email to speechcoding-subscribe@yahoogroups.com )