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( )函数让信侍歼号通过这个滤波器,这样来实现
这样可以么?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)