假設兩個平穩訊號 $\bold$ 和 $\bold$ ,如果 $x\left(t+\tao\right)= y\left(t\right)$ ,則可通過互相關求 $\tao$ 。
clcclear
close
% 實現 xcorr 函式
% 基本設定
t = 1; % [s] 總時間長度
fs = 5000; % [hz] 取樣頻率
t = 0:1/fs:t; % [s] 時間座標
n = length(t); % 訊號個數
% 訊號生成
tm = [ t(1:n) - t , t(2:n) ]; % 相關結果的時間延遲座標軸
td1 = 0.2*t; % x 訊號時間延遲
td2 = 0.3*t; % y 訊號時間延遲
noise = rand(1,2*n); % 生成了兩倍時間 t 長度的雜訊 [0,1]雜訊
x = noise(1+round(td1*fs):n+round(td1*fs))-0.5*ones(1,n);
y = noise(1+round(td2*fs):n+round(td2*fs))-0.5*ones(1,n);
% 求取互相關
z1 = xcorr(x,y); % matlab 自帶函式
[~,i1] = max(abs(z1));
z2 = zeros(1,n); % 自編函式
for n = 1:length(tm)
z2(n) = sum( x( max(1,n-n+1):min(n,n) ).*y( max(1,n-n+1):min(2*n-n,n) ) );
end[~,i2] = max(abs(z2));
%--------------------計算說明--------------------%
% case1: | case2: %
% .n | .2*n-n %
% y: .......... | y: .......... %
% .n-n+1 | .1 %
% .n | .n %
% x: .......... | x: .......... %
% .1 | .n-n+1 %
err = z1-z2; % 兩種演算法的差
% 繪圖
% 比較 conv xcorr
% 例子
a = ones(1,12);
b = 0:4;
c = xcorr(a,b);
d = conv(a,b);
%繪圖subplot(2,2,1)
plot(a,『.-『)
ylim([ -0.1 5.1 ])
xlim([ 0.9 12.1])
title(『a = ones(1,12)『)
xlabel(『n『)
ylabel(『amp『)
subplot(2,2,2)
plot(b,『.-『)
ylim([ -0.1 5.1 ])
xlim([ 0.9 12.1])
title(『b = 0:4『)
xlabel(『n『)
ylabel(『amp『)
subplot(2,2,3)
plot(c,『.-『)
ylim([ -0.1 15.1 ])
xlim([ 0.9 25.1])
title(『xcorr 結果『)
xlabel(『n『)
ylabel(『amp『)
subplot(2,2,4)
plot(d,『.-『)
ylim([ -0.1 15.1 ])
xlim([ 0.9 25.1])
title(『cone 結果『)
xlabel(『n『)
ylabel(『amp『)
suptitle(『conv與xcorr對比『)
Matlab之xcorr函式的解釋
看了 matlab 關於xcorr 的help 文件沒搞清楚什麼意思,只夠看到一篇不錯的文章,通過簡單事例即可了解其應用。輸入的是乙個簡單一維序列 x 1,2 3 第一 預設注釋項,a,b xcorr x 通過該命令計算的結果為 a 3 8 14 8 3 b 2 1 0 1 2.下面介紹一下,該過程...
matlab中的xcorr 自相關函式
自 matlab中用於計算自相關函式的指令是xcorr.比如矩陣a 1 2 3 xcorr a 3.0000 8.0000 14.0000 8.0000 3.0000 自相關函式是訊號間隔的函式,間隔有正負間隔,所以n個長度的訊號,有2n 1個自相關函式值,分別描述的是不同訊號間隔的相似程度。比如,...
Matlab中fft函式的使用與原理
時域抽取基 2fft演算法 decimation in time,dit fft 頻域抽取基 2fft演算法 decimation in freqency,dif fft 序列長度n可表示為合數的fft 演算法 混合基 matlab說明文件 y fft x y fft x,n y fft x,n,d...