Sign in

username:

password:



Not a member?

Search matlab



Search tips

Subscribe to matlab



matlab by Keywords

Atanh | Autocorrelation | Bandpass Filter | C++ | Conv | Database | Deconv | Excel | FFT | Filter | Filtering | FIR | Fourier Transfrom | FSK | Gaussian Noise | Haykin | IFFT | Image | Java | LFSR | LMS | LPC | MEX | OFDM | QPSK | Radix | Random | Sampling | Segmentation | Simulink | Visual Basic | Waveform | Wavelet

Discussion Groups

Discussion Groups | Matlab DSP | Building a impulse response function in MATLAB

Technical discussion about Matlab and issues related to Digital Signal Processing.

  

Post a new Thread

Building a impulse response function in MATLAB - arida permata - Jul 31 6:56:00 2003



Hi all,
I have builded a function of impulse response in matlab

from pole and zero functions I adopted from the internet

but I'm not so sure about the result....anyone can help me please ?

perhaps I made mistakes on the function…
The impulse response, h(n), of the weighted synthesis filter H(z)W(z)
=A(z/g1)/[A'(z)A(z/g2)] is computed each subframe. This impulse response is
needed for the search of adaptive and fixed codebooks. The impulse response
h(n), is computed by filtering the vector of coefficients of the filter
A(z/g1) extended by zeros through the two filters 1/A'(z) and 1/A(z/g2).
function h=impulse_res(fc,pc,no,cmp)

%cmp = codec mode in AMR system for choosing gamma values

(for example : 12.2 kbps )

%no=10 (the order of LPC)

%fc = the set vector of quantized LP coefficient A'(z) (size = 11x1)

%pc = the set vector of unquantized LP coefficient A(z)(size = 11x1)

%h = impulse response (size 40x1)
L=40; %L=size of each subframe(40 samples)

h=zeros(L,1);h(1)=1.0;

d1=zeros(no+1,1);

d2=zeros(no+1,1);

d3=zeros(no+1,1);
%for A(z/y1)

if (cmp==12.2)

gamma1=0.9;

else

gamma1=0.94;

end

pcexp2=bwex(gamma1,pc,no);

[d1,h]=zero(pcexp2,no,d1,h,L);
%for 1/A(z)

[d2,h]=pole(fc,no,d2,h,L);
%for 1/A(z/y2)

gamma2=0.6;

pcexp1=bwex(gamma2,pc,no);

[d3,h]=pole(pcexp1,no,d3,h,L);
----------------------------------------------------------

function pcexp = bwex( gamma, pc, no )
% SCALE PREDICTOR COEFFICIENTS TO SHIFT POLES RADIALLY INWARD

pcexp( 1:no+1, 1 ) = ( pc( 1:no+1 ) .* ( gamma .^ (0:no)' ) );
-----------------------------------------
function [ d, h ] = pole(pcexp, no, d, h, L )
if pcexp(1) ~= 1.0

fprintf( 'polefilt: bad coefficients\no');

end
for t = 1:L

d(1) = h(t) - sum( d(2:n+1) .* pcexp(2:n+1) );

d(2:n+1) = d(1:n);

h(t) = d(1);

end

-------------------------------------------

function [ d, h ] = zero( pcexp, no, d, h, L )
for t = 1:len

d(1) = h(t);

ar = sum( d(2:n+1) .* pcexp(2:n+1) );

d(2:n+1) = d(1:n);

h(t) = ar + ( d(1) * pcexp(1) );

end
-------------------------------------------------------------------
* Example
the inputs are :

fc = [1, -2.6668, 4.8836, -6.2675, 5.2687, -2.2201, -1.6791,

4.6678, -4.8297, 3.1372, -1.2942]’;

pc = [1, -9.113, 38.056, -95.897, 161.47, -189.84, 157.81, -

91.597, 35.525, -8.314, 0.89166]’;

no = 10 ;

cmp = 7.95;
the output is :

h =[ 1.0000

-0.4316

-3.0501

0.0726

6.2639

1.4851

-9.2364

-5.1018

9.4839

7.0807

-9.9621

-13.4065

-1.1086

5.2565

1.4810

-6.9308

-17.2031

-11.5825

15.7709

19.8724

-19.9871

-36.0993

9.3675

35.4143

-7.4783

-40.0359

-14.3673

8.2341

4.4951

5.3959

-14.8422

-50.8667

-7.5202

73.2907

18.7850

-99.2104

-43.5024

89.4611

34.5656

-87.3220];

_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE*
http://join.msn.com/?page=features/junkmail




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