xcorr command makes mistake at 10^-5 order.

조회 수: 2 (최근 30일)
Mustafa Duran
Mustafa Duran 2023년 9월 25일
답변: Pratyush 2023년 9월 26일
function t = xcoor_time_interval(s1, s2, Fs, tit, plot_wanted)
%XCOOR_TİME_İNTERVAL Summary of this function goes here
% Detailed explanation goes here
% Xcoor is put cross correlation of two signals
[c,lags] = xcorr(s1,s2);
% If it wanted xcoor is plotted
if plot_wanted
figure
plot(lags,c);
title(tit);
grid on
end
[~,iLag] = max(abs(c));
t = -(1/Fs)*(lags(iLag));
end
This was my function and main function is:
clc;
clear all;
close all;
addpath('functions');
% Import audio file
filename = '481583__malatestiniccom__gun-3.wav';
% Get audio signal and signals sampling frequancy in Hz
[s1,Fs] = audioread(filename);
s1 = s1(:,1);
s2 = delayseq(s1, -0.00120612644267, Fs);
s3 = delayseq(s1, 0.00102887528457, Fs);
s4 = delayseq(s1, -0.00023602278035, Fs);
s5 = delayseq(s1, 0.00003558800237, Fs);
% Fs = 44100;
% w = 10;
%
% x1 = 0:1/Fs:1;
% x2 = x1 + 0.00120612644267;
% x3 = x1 - 0.00102887528457;
% x4 = x1 + 0.00023602278035;
% x5 = x1 - 0.00003558800237;
%
% s1 = sin(2*pi*x1);
% s2 = sin(2*pi*x2);
% s3 = sin(2*pi*x3);
% s4 = sin(2*pi*x4);
% s5 = sin(2*pi*x5);
plot_wanted = input("Should I plot the figures[true/false]: "); % Determine function should be plot the figure
% if plot_wanted
% figure
% plot(s1);
% hold on
% plot(s2);
% hold on
% plot(s3);
% hold on
% plot(s4);
% hold on
% plot(s5);
% end
% Get time difference by using xcoor refernce is s1 signal
t12 = xcoor_time_interval(s1, s2, Fs, 's1-s2', plot_wanted);
t13 = xcoor_time_interval(s1, s3, Fs, 's1-s3', plot_wanted);
t14 = xcoor_time_interval(s1, s4, Fs, 's1-s4', plot_wanted);
t15 = xcoor_time_interval(s1, s5, Fs, 's1-s5', plot_wanted);
% t12 = vpa(-0.00120612644267,12);
% t13 = vpa(0.00102887528457,12);
% t14 = vpa(-0.00023602278035,12);
% t15 = vpa(0.00003558800237,12);
% t12 = -0.0012;
% t13 = 0.0010;
% t14 = -2.2676e-04;
% t15 = 4.5351e-05;
and like it is shown here the xcorr command makes mistake at the 10^-5 order and it effects my solution much. How can i solve that?

채택된 답변

Pratyush
Pratyush 2023년 9월 26일
I understand that 'xcorr' command is not accurate enough at 10^-5 order.
The discrepancy you're experiencing with the `xcorr` command at the 10^-5 order may be due to the limited precision of floating-point arithmetic. To mitigate this issue, instead of using the `xcorr` function, you can try using other cross-correlation methods that might provide better accuracy. One such method is the Fourier Transform-based cross-correlation (`xcorr_fft`). You can also use the Variable Precision Arithmetic (VPA) toolbox in MATLAB to increase the precision of your calculations. See if it helps improve the accuracy of your solution.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Correlation and Convolution에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by