Hello everyone, I'm doing research on an assignment that does LPC compression to a Speech file. Here you see the code; clear all; clc; %TAKING INPUT WAVEFILE, a1 = 'C:\Users\user\Desktop\WAV\a1.wav'; [y, Fs] =audioread(a1); % x=wavrecord(,); %LENGTH (IN SEC) OF INPUT WAVEFILE, t=length(y)./Fs; sprintf('Processing the wavefile "%s"', a1) sprintf('The wavefile is %3.2f seconds long', t) %THE ALGORITHM STARTS HERE, M=10; %prediction order [aCoeff, pitch_plot, voiced, gain] = f_ENCODER(y, Fs, M); %pitch_plot is pitch periods synth_speech = f_DECODER (aCoeff, pitch_plot, voiced, gain); Additionally, I want this code to calculate PSNR, MSError and SNR. dis=numel(y)-numel(A2); A2=[A2,zeros(1,dis)]; PSNR = psnr(A2,y) MSError=mse(A2,y) SNR=snr(A2,y) I found such a code on the internet. But I don't know what I should write instead of "A2" or for the others.
Kshitij Singh answered .
2025-11-20
Here f_ENCODER code;
%ENCODER PORTION
%here, fs = sampling frequency
% aCoeff = LP coefficients
% pitch = pitch periods
% v = voiced or unvoiced decision bit
% g = gain of frames
function [aCoeff, pitch_plot, voiced, gain] = f_ENCODER(x, fs, M);
if (nargin<3), M = 10; end %prediction order=10;
%INITIALIZATION;
b=1; %index no. of starting data point of current frame
fsize = 30e-3; %frame size
frame_length = round(fs .* fsize); %=number data points in each framesize
%of "x"
N= frame_length - 1; %N+1 = frame length = number of data points in
%each framesize
%VOICED/UNVOICED and PITCH; [independent of frame segmentation]
[voiced, pitch_plot] = f_VOICED (x, fs, fsize);
%FRAME SEGMENTATION for aCoeff and GAIN;
for b=1 : frame_length : (length(x) - frame_length),
y1=x(b:b+N); %"b+N" denotes the end point of current frame.
%"y" denotes an array of the data points of the current
%frame
y = filter([1 -.9378], 1, y1); %pre-emphasis filtering
%aCoeff [LEVINSON-DURBIN METHOD];
[a, tcount_of_aCoeff, e] = func_lev_durb (y, M); %e=error signal from lev-durb proc
aCoeff(b: (b + tcount_of_aCoeff - 1)) = a; %aCoeff is array of "a" for whole "x"
%GAIN;
pitch_plot_b = pitch_plot(b); %pitch period
voiced_b = voiced(b);
gain(b) = f_GAIN (e, voiced_b, pitch_plot_b);
end