LPC线性预测分析
线性预测分析matlab程序
注意:程序只支持单声道wav文件,可以自行录制一句话。
Levinson-Durbin算法:
S为信号向量,P为预测阶数
% Levinson-DurbinËã·¨
function a = LD(s, P)
N = length(s); %Ò»Ö¡ÓïÒô³¤¶È
% Çó×ÔÏà¹Ø¾ØÕór(j),j = 0:P;
for j = 0 : P
r(j+1) = sum(s(1:N-j).*s(j+1:N));
end
a = zeros(1, P);
E = r(1);
for i = 1 : P
temp = 0;
for j = 1 : i-1
temp = temp + a(j) * r(i-j+1);
end
ki = (r(i+1) - temp) / E;
a(i) = ki;
a_temp = a; %Êý¾Ý½»²æʹÓ㬷ÀÖ¹Êý¾Ý¸üдíÎó
for j = i-1 : -1: 1
a(j) = a_temp(j) - ki * a_temp(i-j);
end
E = (1 - ki * ki) * E;
End
Matlab主程序:
clear all, close all,
% ¶ÁÐźÅ
[speech, fs, nBits] = wavread('speech.wav');
%[speech, fs, nBits] = wavread('a4.wav');
P = 10;
% »ÓïÒô²¨ÐÎ
figure(1);
subplot(2,2,1);plot(speech);title('ÔʼÓïÒô');
subplot(2,2,2);plot(abs(fft(speech)));title('ÔʼÓïÒôƵÆ×');
% 1. ²ÎÊýÉèÖÃ
winSize = floor(0.025 * fs); % Ö¡³¤25ms,Ò»Ö¡8000*0.025¸öµã¹²200¸öµã
nFrame = floor(length(speech) / winSize); % ¼ÆËãÖ¡Êý
speech = filter([1,-0.94], 1, speech);
subplot(2,2,3);plot(speech);title('Ô¤¼ÓÖØÓïÒô');
subplot(2,2,4);plot(abs(fft(speech)));title('Ô¤¼ÓÖØÓïÒôƵÆ×');
% Ô¤ÏÈ·ÖÅäÄÚ´æ
a = zeros(1, nFrame*P);
err = zeros(1,length(speech));
frameData = zeros(1,P+winSize);
% ººÃ÷´°
hamwin = hamming(2*P+winSize)';
for m = 1:nFrame
% È¡Ò»Ö¡Êý¾Ý
startPos = (m-1) * winSize + 1;
endPos = startPos + winSize - 1;
ai_start = (m-1) * P +1;
ai_end = ai_start + P - 1;
if m == 1
frameData(P+1:P+winSize) = speech(startPos:endPos)';
else
frameData = speech(startPos - P:endPos)';
end
% ¼ÓººÃ÷´°
frameData = frameData .* hamwin(1:P+winSize);
a(ai_start:ai_end) = LD(frameData(P+1:P+winSize), P);
%Îó²îÊä³ö
for i = 1 : winSize
err(startPos+i) = frameData(P+i) - sum(a(ai_start:ai_end).*frameData(P+i-1:-1:P+i-P));
end
buildspeech(startPos:endPos) = filter(1,[1,-1*[a((m-1)*P+1:m*P)]],err(startPos:endPos));
buildspeech(startPos:endPos) = buildspeech(startPos:endPos) ./ hamwin(P+1:P+winSize); %È¥ººÃ÷´°
end
% È¥¼ÓÖØ
buildspeech = filter(1, [1,-0.94], buildspeech);
%дÊý¾ÝÎļþ
wavwrite(err,fs,nBits,'error.wav');
wavwrite(buildspeech,fs,nBits,'buildspeech.wav');
figure(2);
subplot(2,1,1);plot(err);
subplot(2,1,2);plot(abs(fft(err)));
figure(3);
subplot(2,1,1);plot(buildspeech);
subplot(2,1,2);plot(abs(fft(buildspeech)));
wavplay(buildspeech,fs,'async');
相关文章
- ABP源码分析十五:ABP中的实用扩展方法
- ABP源码分析一:整体项目结构及目录
- 全面解读文本情感分析任务
- jQuery源码分析系列(35) : Ajax - jsonp的实现与原理
- jQuery 2.0.3 源码分析Sizzle引擎 - 编译函数(大篇幅)
- 中国大数据市场规模分析及预测
- Redis API的原子性分析
- vue框架,数据展示和分析,报告管理界面
- nova分析(8)—— nova-compute
- 惊呆了!我用 Python 可视化分析和预测了 2022 年 FIFA世界杯
- ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测
- Algorithm:数学建模大赛(CUMCM/NPMCM)之数学建模(经验/技巧)、流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价)、论文写作(意义/摘要/关键词/问题重述和模型假设/建
- DL之Keras:基于Keras框架建立模型实现【预测】功能的简介、设计思路、案例分析、代码实现之详细攻略(经典,建议收藏)
- 【ESN-PSO】基于PSO的回波状态网络参数分析,用于时间序列预测(Matlab代码实现)
- 数学建模学习(63):2022美赛单变量深度学习LSTM 时间序列分析预测
- SPSS大学生毕业生就业问题分析
- 懂分析、会预测,你见过这样的华为云DAS吗?
- 【CSS】浮动 ④ ( 浮动布局案例 - 电商布局模块 | 案例分析 | 布局测量摆放 | 浮动布局代码示例 )
- 爬虫日记(76):Scrapy的命令行源码分析二
- 爬虫日记(76):Scrapy的命令行源码分析
- 应用层协议系列(两)——HTTPserver之http协议分析
- 第二人生的源码分析(六十六)使用Expat XML解析器的例子
- 【2021 高校大数据挑战赛-智能运维中的异常检测与趋势预测】1 赛后总结与分析
- 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 Baseline
- 惊呆了!我用 Python 可视化分析和预测了 2022 年 FIFA世界杯
- DL之Keras:基于Keras框架建立模型实现【预测】功能的简介、设计思路、案例分析、代码实现之详细攻略(经典,建议收藏)
- Android的Input流程分析(好文)