您现在的位置:首页 >> 语音处理 >> 内容

基于平均不同分辨率的共振峰跟踪算法matlab仿真

时间:2022/12/12 22:42:35 点击:

  核心提示:A112包含程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5mamp9u

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

        共振峰轨迹的自动跟踪算法,其特点是不借助于其它的信息来源,仅仅是基于语谱图信息,来确定语谱图上前四个共振峰频率的位置和它们关于时间轴的轨迹.算法由三个层面构成;第一层面是进行频率分布的分析,以决定一个最佳的共振峰搜索起始位置;第二层面是采用双搜索算法,来跟踪随时间变化的共振峰轨迹;第三层面是解决某些冲突现象.

4.部分源码

function [fmap,pt2] = ftrack(y,fs)

bDisplay = 1;

Fsamps = 256; % sampling resolution in frequency dimension

Tsamps = round(length(y)/18000*256); % sampling resolution in time dimension

tmp_img1 = zeros(Fsamps,Tsamps);

ct = 0;

numiter = 8; % number of iterations to run. seemed like a good number

for i=2.^(8-8*exp(-linspace(1.5,10,numiter)/1.4)), 

    % Determine the time-frequency distribution at the current 

    fix(length(y)/round(i))

    round(i)

    [tmp_img1,ft1,pt1] = lpcsgram(y,fix(length(y)/round(i)),round(i),fs);

    % Get the dimensions of the output time-frequency image

    [M,N] = size(tmp_img1);

    % Create a grid of the final resolution

    [xi,yi] = meshgrid(linspace(1,N,Tsamps),linspace(1,M,Fsamps));

    % Interpolate returned TF image to final resolution

    tmp_img2 = interp2(tmp_img1,xi,yi);

    ct = ct+1;

    % Interpolate formant tracks and pitch tracks

    pt2(:,ct) = interp1([1:length(pt1)]',pt1(:),linspace(1,length(pt1),Tsamps)');

    ft2(:,:,ct) = interp1(linspace(1,length(y),fix(length(y)/round(i)))',Fsamps*ft1',linspace(1,length(y),Tsamps)')';

    % Normalize

    tmp_img3(:,:,ct) = tmp_img2/max(tmp_img2(:));

    if bDisplay,

        subplot(221);imagesc(tmp_img1);axis xy;

        subplot(222);imagesc(tmp_img2);axis xy;

        subplot(223);imagesc(squeeze(mean(tmp_img3,3)));axis xy;

        drawnow;

    end;

end

% Determine mean tfr image and formant track

tmp_img4 = squeeze(mean(tmp_img3,3));    % tfr   

ft3 = squeeze(nanmean(permute(ft2,[3 2 1]))); % 

if bDisplay,

    subplot(224);imagesc(tmp_img4);axis xy;

    hold on;

    plot(ft3,'y');

end;

% convert fmnts to image

tmap = repmat([1:Tsamps]',1,3);

idx = find(~isnan(sum(ft3,2)));

fmap = ft3(idx,:);

tmap = tmap(idx,:);

% filter formant tracks to remove noise

[b,a] = butter(9,0.1);

fmap = round(filtfilt(b,a,fmap));

pt3 = nanmean(pt2');

pt3 = (pt3-nanmin(pt3))/(nanmax(pt3)-nanmin(pt3));

% Rescaling is done after display code

if bDisplay,

    imap = zeros(Fsamps,Tsamps);

    ind = sub2ind(size(imap),fmap(:),tmap(:));

    imap(ind) = 1;

    tpts = tmap(:,1);

    figure;

    subplot(221);

    imagesc(imap);axis xy;hold on;

    plot(tpts,fmap(:,1),tpts,fmap(:,2),tpts,fmap(:,3));

    idx = [1:5]';

    plot(tpts(idx),fmap(idx,1),'.-',tpts(idx),fmap(idx,2),'.-',tpts(idx),fmap(idx,3),'.-');

    subplot(222);

    % Create a wider formant track

    anisomask = anisodiff(imap,6,50,0.01,1);

    imagesc(anisomask>0);axis xy;hold on;

    plot(tpts,fmap(:,1),tpts,fmap(:,2),tpts,fmap(:,3));

    idx = [1:5]';

    plot(tpts(idx),fmap(idx,1),'.-',tpts(idx),fmap(idx,2),'.-',tpts(idx),fmap(idx,3),'.-');

    subplot(223);

    imagesc(tmp_img4);axis xy;hold on;

    plot(tpts,fmap(:,1),'r',tpts,fmap(:,2),'r',tpts,fmap(:,3),'r');

    idx = [1:5]';

    plot(tpts(idx),fmap(idx,1),'.-',tpts(idx),fmap(idx,2),'.-',tpts(idx),fmap(idx,3),'.-');

    subplot(224);

    imagesc(tmp_img4.*(anisomask>0));axis xy;hold on;

    plot(tpts,fmap(:,1),'r-',tpts,fmap(:,2),'r-',tpts,fmap(:,3),'r-');

%    idx = [1:5]';

%    plot(tpts(idx),fmap(idx,1),'.-',tpts(idx),fmap(idx,2),'.-',tpts(idx),fmap(idx,3),'.-');

    plot(256*pt3,'y.-');

end;

% Rescale to Actual Formants and take the mean of pitch tracks

fmap = (fs/2)*(fmap/256);

pt2 = nanmean(pt2');

A112

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168