php课本第九章运行结果,教材第九章程序pr9_3_1报错

博主在尝试将一种求根法应用于自己的共振峰程序时遇到错误,程序在处理一段鼾声音频时无法输出具体频率和带宽,而在另一段音频上运行正常。问题可能出现在分帧处理或功率谱计算环节。同时,博主询问PSD图是否等同于LPC传递函数lpcar2pf绘制的功率谱,并问及噪声的共振峰通常选取数量。
摘要由CSDN通过智能技术生成

一、首先谢谢老师!问题二按您说的以后解决了,但是我把程序段应用到自己编的程序时出错了, 我的共振峰程序选用的是pr9_3_2的求根法,程序报错是:

Attempted to access U_log(NaN); index must be a positive integer or logical.

Error in test2 (line 95)

P(k)=U_log(m+1);clear;

我的语音是一段鼾声,共振峰找出来有两个,但没法输出具体频率和带宽,走到P(k)=U_log(m+1);clear;就停了。

用另一段具有四个共振峰的音频测试时是成功的。

以下是我自己编的前期处理,不知道是否在这里出了问题,您可以帮我看下吗?包括257帧的问题也找不出来。

clc;

close all;

[FileName,PathName]=uigetfile('*.wav');                %interactive read speech data

dir=[PathName,FileName];                               %speech path dir为文件路径

[y_sound,Fs,bit]=wavread(dir);                         %将音频内容存于y_sound中

y_sound=y_sound(:,1);                                  %考虑到有些音频为双声道,取第一列数据

y_sound2=filter([1 -.99],1,y_sound);        % 预加重

wavplay(y_sound2);

y_length=length(y_sound2);

T=0

19b0fe3299812d8066e982a21c3cbca5.gif1/Fs)

19b0fe3299812d8066e982a21c3cbca5.gify_length-1)/Fs; %声音信号的长度,因为画时域图时默认用采样点数做横轴,故现计算出信号的时间长度。T=1/Fs.0~长度减一,因为以0开头。

%%%%%%%%%%%%分帧%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wlen=160;                                             % 设置帧长  0.02s*8000=200   10~30ms

inc=80;                                               % 设置帧移  0.01s*8000=80     10~20ms

y_frame=enframe(y_sound,wlen,inc)';                   % 分帧,行列互换

fn=size(y_frame,2);                                   % 求帧数

%%%%%%%%%画功率谱图%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

win = hamming(wlen);                                  %信号加窗

y=y_frame(:,3);

nfft=256;                                           %选择其中一帧

[PSD, f] = pwelch(y, win, wlen/2,nfft, Fs, 'onesided');     % [PSD, f] = pwelch(y_sound, win, 256, y_length, Fs, 'onesided');

%[PSD,F] = pwelch(data,windows窗函数,noverlap分段平均时重合的部分(默认50%重合),nfft是fft的点数,fs); % PSD (Power Spectral Density ,Vrms^2/Hz)

figure;

plot(f,10*log(PSD),'k');title('语音信号功率谱图');xlabel('频率/Hz');ylabel('幅值/dB');

grid on;

%%%%%%%%线性预测分析%%%%%%%%%%%%%%%%%%%%%%%%%%

p=12;                                   % LPC的阶数

ar=lpc(y,p);                            % 线性预测系数,数量为p+1; 已经取好一帧数据  法二: y=x(8001:8000+L);

est_x=filter([0 -ar(2:end)],1,y);       % 用LPC求预测估算值   filter(分子,分母,输入序列)分子/分母=滤波系数      在ar前加了一个负号,因为用lpc函数求出的ar系数差一个“-”号,所以用了-ar(2:end)。 H(z)输入为全极点模型,可写成有理分式,b都为0;

err=y-est_x;                            % 求出预测误差

二、请问由PSD画出的功率谱图和用LPC传递函数lpcar2pf画出的功率谱图是一样的吗?

三、噪声的共振峰一般选取几个呢。

再次感谢老师!麻烦您了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值