⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wlpc.m

📁 Matsig is an object-oriented signal class library for MATLAB 6.5 and later. It implements a signal c
💻 M
字号:
function [a, e, g] = wlpc(x,m,varargin)% function [a, e] = wlpc(x,m,varargin)% WLPC(X,M) is the M'th order Weighted Linear Predictive Coding model of%        the input signal% WLPC(X,M,'STE') uses Short Time Energy weighting (default)% WLPC(X,M,'Teager',P) uses the Teager-Kaiser energy weighting with P'th%        order derivative estimates% WLPC(X,M,...,'mean',N) apply mean windowing to weighting function of%        length N (default, N=2*M)% WLPC(X,M,...,'lowpass',N,F) use lowpass filtering on weight with filter%        order N and cut-off frequency F (radians)% WLPC(X,M,...;'weightdelay',N) delay the weights by N (default, N=0)%% Outputs: a  model parameters%          e  residual energy%          g  gain%% References:% Y. Kamp, C. Ma and L. F. Willems. "Robust signal selection for linear% prediction analysis of voiced speech". Speech Communication, 12(1):69-81,% March 1982.% Tom Bäckström, Dec. 2005% check inputsnumin = nargin-2;if numin == 1 && iscell(varargin{1})    varargin = {varargin{1}{:}};    numin = length(varargin);endweightfn = 'ste';filterfn = 'mean';wdelay = 0;n = 2*m;while numin > 0    fn = upper(varargin{1});    varargin = {varargin{2:end}};    numin = numin-1;    switch fn        case 'STE'            weightfn = 'ste';        case 'TEAGER'            weightfn = 'teager';            p = varargin{1};             varargin = {varargin{2:end}};            numin = numin-1;        case 'MEAN'            filterfn = 'mean';            n = varargin{1};             varargin = {varargin{2:end}};            numin = numin-1;        case 'LOWPASS'            filterfn = 'lowpass';            n = varargin{1};             s = varargin{2};            varargin = {varargin{3:end}};            numin = numin-2;        case 'WEIGHTDELAY'            wdelay = varargin{1};            numin = numin-1;        otherwise            error(['Unknown keyword ' fn]);    endendif exist('m') && n+3 < m    error('Model order must be larger than filter order by 3');end% calculate weightsswitch weightfn    case 'ste'        w = x.^2;    case 'teager'        w = teager(x,p);    otherwise        error(['Unknown weighting function ' weightfn]);end% filter weightsswitch filterfn    case 'mean'        fw = conv(signal(ones(1,n),w.time.fs),w);    case 'lowpass'        fw = conv(signal(fir1(n,s),w.time.fs),w);    otherwise        error(['Unknown filtering function ' filterfn]);end% compensate for filter delayfw = shift(fw,-n/(2*x.time.fs));% weight delayfw = shift(fw,-wdelay/x.time.fs);% signal matrixx = trim(x,fw); % trim to same length as weight functionX = convmtx(x.s, m+1)';% trim weight fn to correct lengthfw = signal(fw.s(floor((length(fw.s)-length(x.s)-m)/2)+(1:length(x.s)+m)),fw.time.fs);% modified autocorrelation matrixR = X'*diag(fw.s)*X;% calculate modela = [1 zeros(1,m)]*inv(R);e = a(1);a = a/e; % normaliseg = sqrt(e);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -