How can i add PSNR, MSError and SNR to my ready code?

Illustration
Mert Sari - 2024-03-14T15:02:55+00:00
Question: How can i add PSNR, MSError and SNR to my ready code?

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.  

Expert Answer

Profile picture of Kshitij Singh 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

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!