Similarity of two .wav files - unsure about the returned error.

I
isabellewilliams · Dec 31, 2020 · 2K views
Question
Hi, I'm wanting to use correlation to see how similar an original sound and one I synthesized from it are. I was advised to use the resample function however, due to lack of knowledge in MATLAB I'm looking for a little help to gain my metric as I'm just not understanding things. I have attached the audio files if anyone could please help me out a little?   clear, clc, close all % get a section of the sound file [x, fs] = audioread('Machine_Gun.wav'); % load an audio file x = x(:, 1); % get the first channel N = length(x); % signal length t = (0:N-1)/fs; % time vector [y, fs] = audioread('Dry_Synthesized_Machine_Gun.wav'); % load an audio file y = y(:, 1); % get the first channel n = length(y); % signal length T = (0:n-1)/fs; data = [x y]; correlation = corrcoef(data); This was my failed attempt and i got the below error message: Error using horzcat Dimensions of arrays being concatenated are not consistent. Error in test (line 12) data = [x y];
Expert Answer
Profile picture of Kshitij Singh
Kshitij Singh PhD Expert
Answered Aug 16, 2026
Error using horzcat
Dimensions of arrays being concatenated are not consistent.
data = [x y];
This means the x and y have a different number of elements. Then a horizontal concatenation cannot work, because matrices must be rectangular.
You have mentioned resample already, which allows to adjust the sizes of the vectors. interp1 would be fine also. But this would change the frequency of the signal. Maybe cropping or appending zeros is better:
 
% get a section of the sound file
[x, fsx] = audioread('Machine_Gun.wav');   % load an audio file
[y, fsy] = audioread('Dry_Synthesized_Machine_Gun.wav');   % load an audio file
x = x(:, 1);      % get the first channel
y = y(:, 1);      % get the first channel

nx = length(x);   % signal length
ny = length(y);   % signal length

yPad  = y;
yCrop = y;
xPad  = x;
xCrop = x;
if nx > ny
    yPad(nx) = 0;
    xCrop    = xCrop(1:ny);
elseif nx < ny
    xPad(ny) = 0;
    yCrop    = yCrop(1:nx);
end

c1 = corrcoef(xPad, yPad);
c2 = corrcoef(xCrop, yCrop);
100% Run Guarantee 3-Hour Fast-Track Delivery

Need a Custom Version or Complete Simulation for This Problem?

Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.

Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!