first commit

This commit is contained in:
2024-09-05 12:45:40 +08:00
commit e148adef80
98 changed files with 2808 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
clc;clear all;close all;
warning('off')
%[x,fs,nbits]=wavread('tang1.wav'); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
global fs;
[x,fs] = audioread('tang1.wav'); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
%info = audioinfo('tang1.wav');
%nbits = info.BitsPerSample;
x = x / max(abs(x)); %<EFBFBD><EFBFBD><EFBFBD>ȹ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>[-1,1]
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
kl = round(1 / 500 * fs); %500Hz
kr = round(1 / 80 * fs); %80Hz
N = 3 * kr; %֡<EFBFBD><EFBFBD>
inc = round(fs / 100); %֡<EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>10ms
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
subplot(3, 1, 1);
plot(x);
axis([1 length(x) -1 1]) %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><EFBFBD>
xlabel('֡<EFBFBD><EFBFBD>');
ylabel('Speech');
legend('FrameLen = 552');
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>ѡ<EFBFBD>
subplot(3, 1, 2);
A = enframe(x, N, inc);
R = zeros(size(A));
l = zeros(1, size(R, 1));
f = zeros(1, size(R, 1));
Can = zeros(1, 10);
acCan = zeros(1, 10);
CostF = zeros(1, 10);
it = 0;
for n = 1:size(R, 1)
R(n, :) = autocorr(A(n, :), N - 1);
Can_ = Can;
CostF_ = CostF;
[acCan,Can] = findpeaks(R(n, kl:kr), 'MinPeakHeight', R(n, 1) * 0.25, 'MinPeakProminence', 0.9);
Can = Can + kl - 1;
sz = size(Can, 2);
if sz ~= 0
it = it + 1;
if it == 1
CostF = dist(acCan);
else
CostF = zeros(1, sz);
Path = zeros(1, sz);
CostT = diff(Can, Can_);
for j = 1:sz
[CostF(j), Path(j)] = min(CostF_ + CostT(j, :));
CostF = CostF + dist(acCan);
end
end
[~, l(n)] = min(CostF);
ff = f0(Can);
plot(n, ff, '.');
hold on;
f(n) = ff(l(n));
else
it = 0;
end
end
subplot(3, 1, 3);
f = medfilt1(f, 5);
stem(f, 'MarkerSize',3);
xlabel('֡<EFBFBD><EFBFBD>(n)');
ylabel('Ƶ<EFBFBD><EFBFBD>(Hz)');
function f = f0(Can)
global fs;
f = fs ./ Can;
end
function dis = dist(ac)
dis = -log(ac);
end
function df = diff(Can1, Can2)
n = size(Can1, 2);
m = size(Can2, 2);
df = zeros(n, m);
for i = 1:n
for j = 1:m
df(i, j) = abs(f0(Can1(i)) - f0(Can2(j)));
end
end
end

Binary file not shown.

Binary file not shown.