Synthesize windowed signal after LPC

4 views (last 30 days)
Abdullah Fahim
Abdullah Fahim on 7 Aug 2015
I am trying to check the functionality of lpc() function in matlab. So, - I read a wav file using audioread(), - Make blocks of 320 samples, with 50% overlap - Multiply each block by hamming window, - Get LPC coeff of each block by lpc() - Get LP Residual by inverse filter - Get back the original signal block by LPC coeff and LP Residual - Add the blocks together using overlap-add method.
However, the output is totally distorted. Not sure what is wrong with my code.
[yr,fr] = audioread('myaudio.wav');
initlen = length(yr); % Signal length
windowsize = 320;
overlapsize = 160;
framelength = 160;
blocks = ceil(initlen/framelength);
hammingwindow = hamming(windowsize);
extrazeros = (windowsize-framelength)/2;
yr_work = padarray(yr, extrazeros, 'pre'); % Pad zeros at the beginning
extrazeros = extrazeros + (blocks*framelength) - initlen;
yr_work = padarray(yr_work, extrazeros, 'post'); % Pad zeros at the end
est_yr = zeros(windowsize, blocks); % Array of processed blocks
for i=1:framelength:(blocks*framelength)
yr_w = yr_work(i:i+windowsize-1);
yr_w = yr_w.*hammingwindow; % apply Hamming window
a = lpc(yr_w, lpcorder);
res_yr_w = filter(a,1,yr_w); % LP Residual by inverse filter
est_yr(:, ceil(i/framelength)) = filter(1,a,res_yr_w);
end
% add blocks together
yd = zeros(initlen, 1); % final output
for i=1:blocks
arrstart = ((i-1)*framelength) + 1;
arrend = arrstart + framelength - 1;
yd(arrstart:arrend) = est_yr(overlapsize+1:end,i);
end

Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!