標題: 利用MATLAB求解聲信號共振峰 [打印本頁]
作者: huanglinran 時間: 2018-3-13 16:12
標題: 利用MATLAB求解聲信號共振峰
x=sheng_500co2_2;
fs=62500;
u=filter([1 -.99],1,x); % 預加重
wlen=length(u); % 幀長
p=12; % LPC階數
a=lpc(u,p); % 求出LPC系數
U=lpcar2pf(a,256); % 由LPC系數求出頻譜曲線
freq=(0:256)*fs/512; % 頻率刻度
df=fs/512; % 頻率分辨率
U_log=10*log10(U); % 功率譜分貝值
subplot 211; plot(u,'k'); % 作圖
axis([0 wlen -0.5 0.5]);
title('預加重波形');
xlabel('樣點數'); ylabel('幅值')
subplot 212; plot(freq,U,'k');
title('聲道傳遞函數功率譜曲線');
xlabel('頻率/Hz'); ylabel('幅值');
[Loc,Val]=findpeaks(U); % 在U中尋找峰值
ll=length(Loc); % 有幾個峰值
for k=1 : ll
m=Val(k); % 設置m-1,m和m+1
m1=m-1; m2=m+1;
p=Loc(k); % 設置P(m-1),P(m)和P(m+1)
p1=U(m1); p2=U(m2);
aa=(p1+p2)/2-p; % 按式(9-3-4)計算
bb=(p2-p1)/2;
cc=p;
dm=-bb/2/aa; % 按式(9-3-6)計算
pp=-bb*bb/4/aa+cc; % 按式(9-3-8)計算
m_new=m+dm;
bf=-sqrt(bb*bb-4*aa*(cc-pp/2))/aa; % 按式(9-3-13)計算
F(k)=(m_new-1)*df; % 按式(9-3-7)計算
Bw(k)=bf*df; % 按式(9-3-14)計算
line([F(k) F(k)],[0 pp],'color','k','linestyle','-.');
end
fprintf('F =%5.2f %5.2f %5.2f %5.2f\n',F)
fprintf('Bw=%5.2f %5.2f %5.2f %5.2f\n',Bw)
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |