哪位大神帮小弟写一段MATLAB提取语音信号共振峰程序

哪位大神帮小弟写一段MATLAB提取语音信号共振峰程序,第1张

function [fmt] = seekfmts1(sig,Nt,fs,Nlpc)

if nargin<4, Nlpc = round(fs/1000)+2end

ls=length(sig) % 数据长度

Nwin = floor(ls/Nt) % 帧长

for m=1:Nt,

lpcsig = sig((Nwin*(m-1)+1):min([(Nwin*m) ls]))% 取来一帧信号

if ~isempty(lpcsig),

a = lpc(lpcsig,Nlpc)% 计算LPC系数

const=fs/(2*pi) % 常数

rts=roots(a)% 求根

k=1 % 初始化

yf = []

bandw=[]

for i=1:length(a)-1

re=real(rts(i)) % 取根之实部

im=imag(rts(i)) % 取根之虚部

formn=const*atan2(im,re)% 计算共振峰频率

bw=-2*const*log(abs(rts(i)))% 计算带宽

if formn>150 &bw <700 &formn<fs/圆冲2 % 满足条件方能成共振峰和带宽

yf(k)=formn

bandw(k)=bw

k=k+1

end

end

[y, ind]=sort(yf) % 排序

bw=bandw(ind)

F = [NaN NaN NaN] % 初始化

F(1:min(3,length(y))) = y(1:min(3,length(y)))% 输出最多三个

F = F(:)% 按列输出

fmt(:,m)=F/(fs/2) % 归一化频率

end

end

from 《matlab在语音信号猜腔慎分析与穗敬合成中的应用》

比如你要处理的信号叫x(n),是一个N点的序列。

理想低通滤波器最简单,先对x(n)做FFT,得到频域特性X(k),然后把高频部分的数据改为0,最后在用IFFT变换转换到时域,就是理想滤波了,因为高频完全被抹穗谈游掉了,而低频信息丝毫不变。

其他滤波器就不能这样赖皮猜销的做了,因为理想滤波器必须有无限多个抽头才能达到“高频完全被抹掉了,而低频信息丝毫不变”的效果。实际中是不可能的。其他滤波器就是根据你要的阶数先设计出滤波器的时域冲击响应h(n),再用filter( )函数让信侍歼号通过这个滤波器,这样来实现

这样可以么?


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12380946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存