필터 지우기
필터 지우기

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

조회 수: 4 (최근 30일)
Taylor Gray
Taylor Gray 2019년 4월 11일
댓글: Taylor Gray 2019년 4월 13일
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];

채택된 답변

Jan
Jan 2019년 4월 11일
편집: Jan 2019년 4월 11일
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);
  댓글 수: 3
Jan
Jan 2019년 4월 12일
Which "result" is this?

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Multirate Signal Processing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by