首页 > 其他分享 >【共振峰跟踪】通过平均不同分辨率的方法跟踪共振峰,基于时频lpc的频谱图的MATLAB仿真

【共振峰跟踪】通过平均不同分辨率的方法跟踪共振峰,基于时频lpc的频谱图的MATLAB仿真

时间:2022-10-10 15:33:50浏览次数:51  
标签:fmap tmp .- idx tpts plot 跟踪 lpc 共振


1.软件版本

MATLAB2021a
2.本算法理论知识

        通过平均不同分辨率的方法跟踪共振峰,基于时频lpc的频谱图。此外,它还决定了语音信号的基音轮廓。

3.核心代码

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');

4.操作步骤与仿真结论

【共振峰跟踪】通过平均不同分辨率的方法跟踪共振峰,基于时频lpc的频谱图的MATLAB仿真_语音增强

【共振峰跟踪】通过平均不同分辨率的方法跟踪共振峰,基于时频lpc的频谱图的MATLAB仿真_跟踪共振峰_02

 

【共振峰跟踪】通过平均不同分辨率的方法跟踪共振峰,基于时频lpc的频谱图的MATLAB仿真_语音增强_03

5.参考文献

[1]杨凌, 杨海波, 高新春. 基于跟踪共振峰的语音增强算法[J]. 电子与信息学报, 2009(10):5.

D201

6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:​​订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码​

标签:fmap,tmp,.-,idx,tpts,plot,跟踪,lpc,共振
From: https://blog.51cto.com/u_15815923/5743801

相关文章

  • 使用OpenTelemetry进行端到端跟踪
    作者/NicolasFränkel来源/翻译外网无论您是否实现微服务,您的系统很可能由多个组件组成。最直接的系统可能由反向代理、应用程序和数据库组成。在这种情况下,监控不仅是一......
  • OpenCV 图像分割、视频人像跟踪、计算视频帧的PSNR 、SSIM【3】
    图像分割测试CodeforImageSegmentationwithDistanceTransformandWatershedAlgorithmcd效果如下:计算视频帧的PSNR、SSIM这个代码感觉对于超分重建PSNR计算还......
  • OpenCV 光流计算跟踪、图像镜像翻转处理【4】
    基于颜色分布的连续自适应均值漂移【跟踪】算法(camshiftalgorithm)有兴趣了解这个算法可以自行检索该算法相关文献:​​例如:基于Camshift算法的小球跟踪​​脚本运行输入​​......
  • CVPR2022论文速递(2022.4.11)!共12篇!跟踪/transformer/对比学习等
    整理:AI算法与图像处理CVPR2022论文和代码整理:https://github.com/DWCTOD/CVPR2022-Papers-with-Code-Demo欢迎关注:​大家好,  最近正在优化每周分享的CVPR论文,目前考虑......
  • 用收缩损失(Shrinkage Loss)进行深度回归跟踪
    Winteriscoming!看过冰与火的你应该很熟悉这句,有兴趣的可以去好好观赏一番。但是今天我和大家说的是目标跟踪的内容,如果在这部美剧使用了目标跟踪的技术,又是另一个结局。言......
  • 利用TRansformer进行端到端的目标检测及跟踪(附源代码)
    计算机视觉研究院专栏作者:Edison_G现存的用检测跟踪的方法采用简单的heuristics,如空间或外观相似性。这些方法,尽管其共性,但过于简单,不足以建模复杂的变化,如通过遮挡跟踪。公......
  • 大盘点 | 2020年两篇目标跟踪算法最佳综述
    作者丨cynthiayawain编辑丨极市平台导读 我们对2020年全部计算机视觉综述论文进行了分方向梳理,本文为第四篇,目标跟踪方向。引言在过去的一年中,计算机视觉领域出现了许多优......
  • 事件相机特征跟踪-模板跟踪方法
    ​1、前言由于事件相机不能提供完整的图像,所以最初的特征跟踪依赖传统相机的数据。本推送介绍事件相机特征检测与跟踪的一篇较早的工作:FeatureDetectionandTrackingwith......
  • 事件相机特征跟踪-概率数据关联法
    1、前言在特征跟踪时,有一个重要的概念是数据关联(DataAssociation)。所谓数据关联,可以理解为:哪些数据是由同一个源产生?对于传统图像而言,我们可以计算特征的描述子,进行匹配从......
  • 事件相机特征跟踪-EKLT方法
    1.前言本推送介绍另一种特征跟踪方法,来自论文:”EKLT:AsynchronousPhotometricFeatureTrackingUsingEventsandFrames”。从基本思路上来说,也是对模板进行跟踪,但与​​......