matlab adpcm编码,求助 求G.721 ADPCM语音编码
程序运行不了 总是出错 求助!!!!!
%主程序
clc;clear;
coe=[1,0,1,0,0,0,0,0,0,0,0];
coe1=[0,0,0];
coe2=[0,0,0,0,0,0,0,0,0,0];
coe3=[0];
Dqk=zeros(1,7);%自适应你量化器输出
fid=fopen('speech1.txt');
a=fscanf(fid,'%e\n');
fclose(fid);
fid=fopen('spp.txt','wt');%存放解码输出波形
for i=1:size(a,1);
Slk=a(i);
[coe,coe1,coe2,coe3,Dqk]=adpcm(Slk,coe,coe1,coe2,coe3,Dqk);
fprintf(fid,'%f\n',coe2(5));
end
fclose(fid);
fid=fopen('spp.txt','rt');
b=fscanf(fid,'%e\n');
subplot(211);
plot(a);
subplot(212);
plot(b);
% 语音编解码子函数程序adpcm.m
function [coe,coe1,coe2,coe3,Dqk]=adpcm(Slk,coe,coe1,coe2,coe3,Dqk) %语音编解码函数
Yk_pre = coe2(1); %初值传递
Sek_pre = coe2(2);
Ik_pre = coe2(3);
Ylk_pre_pre = coe2(4);
Srk_pre = coe2(5);
Srk_pre_pre = coe2(6);
a2=coe2(7);
Tdk_pre =coe2(8);
Trk_pre =coe2(9);
Num=coe2(10);
coe2(10)=coe2(10)+1;
[Sek,coe] = Sek_com(Srk_pre,Srk_pre_pre,Dqk,coe); %自适应预测
Dk = Dk_com( Slk, Sek ); %采样值与其估值差值计算
Yuk_pre = yu_result( Yk_pre, wi_result(abs(Ik_pre)) ); %快速非锁定标度因子计算
if Yuk_pre<1.06
Yuk_pre=1.06;
else
if Yuk_pre>10.00
Yuk_pre=10.00;
end
end
Ylk_pre = yl_result( Ylk_pre_pre, Yuk_pre ); %锁定标度因子计算
Trk_pre = Trk_com( a2, Dqk(6), Ylk_pre ); %窄带信号瞬变判定
Tdk_pre = Tdk_com( a2 ); %单频信号判定
[Alk,coe1]= Alk_com( Ik_pre, Yk_pre ,coe1,Tdk_pre,Trk_pre);
%自适应速度控制与自适应预测
if Alk<0.0
Alk=0.0;
else
if Alk>1.0
Alk=1.0;
end
end
[Yk,coe3]=Yk_com(Ik_pre,Alk,Yk_pre,coe3); %量化阶距自适应因子计算
Ik = Ik_com( Dk, Yk ); %自适应量化并编码输出
Yk_pre = Yk;
Srk_pre_pre = Srk_pre;
Sek_pre = Sek;
Ylk_pre_pre = Ylk_pre;
Ik_pre = Ik;
coe2(1)= Yk;
coe2(6)= Srk_pre;
coe2(2)= Sek;
coe2(4)= Ylk_pre;
coe2(3)= Ik;
Dqk(1) = Dqk(2);
Dqk(2) = Dqk(3);
Dqk(3) = Dqk(4);
Dqk(4) = Dqk(5);
Dqk(5) = Dqk(6);
Dqk(6) = Dqk(7);
Dqk(7) = Dqk_com( Ik_pre,Yk_pre); %自适应逆量化器输出
Srk_pre = Srk_com( Dqk(7), Sek_pre); %重建信号输出
coe2(5)=Srk_pre;
%自适应速度控制与自适应预测子函数
function [h,coe1]=Alk_com(Ik_pre,Yk_pre,coe1,Tdk_pre,Trk_pre)
Dmsk_p2=coe1(1);
Dmlk_p2=coe1(2);
Apk_pre2=coe1(3);
Dmsk_p1=(1-2^(-5))*Dmsk_p2+2^(-5)*fi_result(abs(Ik_pre));
Dmlk_p1=(1-2^(-7))*Dmlk_p2+2^(-7)*fi_result(abs(Ik_pre));
coe1(1)=Dmsk_p1;
coe1(2)=Dmlk_p1;
if ((abs(Dmsk_p1-Dmlk_p1)>=2^(-3)*Dmlk_p1)|(Yk_pre<3)|(Tdk_pre==1))
Apk_pre1=(1-2^(-4))*Apk_pre2+2^(-3);
else
if (Trk_pre==1)
Apk_pre1=1;
else
Apk_pre1=(1-2^(-4))*Apk_pre2;
end
coe1(3)=Apk_pre1;
end
if Apk_pre1>=1
Alk=1;
else
Alk=Apk_pre1;
end
h=Alk;
%采样值与其估计值差值计算奇函数
function d=Dk_com(Slk,Sek);
Dk=Slk-Sek;
d=Dk;
%自适应逆量化器输出子函数
function f=Dqk_com(Ik,Yk)
if Ik>=0
Dqsk=0;
i=Ik;
else
Dqsk=1;
i=-Ik;
end
switch i
case 7
Dqlnk=3.32;
case 6
Dqlnk=2.91;
case 5
Dqlnk=2.52;
case 4
Dqlnk=2.13;
case 3
Dqlnk=1.66;
case 2
Dqlnk=1.05;
case 1
Dqlnk=0.031;
case 0
Dqlnk=-1000;
end
%归一化输出
Dqlk=Dqlnk+Yk;
Dqk=2^Dqlk;
if Dqsk==1
Dqk=-Dqk;
end
f=Dqk;
%自适应预测中f函数值计算子函数
function b=f_com(a)
if abs(a)<=0.5
b=4*a;
else
b=2*sgn_com(a);
end
%速度控制中F[I(k)]计算子函数
function w=fi_result(in)
switch in
case 0
fi=0;
case 1
fi=0;
case 2
fi=0;
case 3
fi=1;
case 4
fi=1;
case 5
fi=1;
case 6
fi=3;
case 7
fi=7;
end
w=fi;
%自适应量化并编码输出子函数
function f=Ik_com(Dk,Yk)
if Dk>0
Dsk=0;
else
Dsk=1;
end
if Dk==0
Dk=Dk+0.0001;
end
Dlk=log(abs(Dk))/log(2);
Dlnk=Dlk-Yk;
x=Dlnk;
a=10;
if Dlnk
Ik=0;
end
if -0.98<=Dlnk&Dlnk<0.62
Ik=1;
end
if 0.62<=Dlnk&Dlnk<1.38
Ik=2;
end
if 1.38<=Dlnk&Dlnk<1.91
Ik=3;
end
if 1.91<=Dlnk&Dlnk<2.34
Ik=4;
end
if 2.34<=Dlnk&Dlnk<2.72
Ik=5;
end
if 2.72<=Dlnk&Dlnk<3.12
Ik=6;
end
if Dlnk>=3.12
Ik=7;
end
if Dsk==1
Ik=-Ik;
end
f=Ik;
%自适应预测子函数
function [g,f]=Sek_com(Srk_pre,Srk_pre_pre,Dqk,coe)
a1_pre=coe(1);
a2_pre=coe(2);
b1_pre=coe(3);
b2_pre=coe(4);
b3_pre=coe(5);
b4_pre=coe(6);
b5_pre=coe(7);
b6_pre=coe(8);
Sezk_pre=coe(9);
p_pre2=coe(10);
p_pre3=coe(11);
%六阶零点预测器系数
b1=(1-2^(-8))*b1_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(6));
b2=(1-2^(-8))*b2_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(5));
b3=(1-2^(-8))*b3_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(4));
b4=(1-2^(-8))*b4_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(3));
b5=(1-2^(-8))*b5_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(2));
b6=(1-2^(-8))*b6_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(1));
%二阶极点预测器系数
Sezk=b1*Dqk(7)+b2*Dqk(6)+b3*Dqk(5)+b4*Dqk(4)+b5*Dqk(3)+b6*Dqk(2);
p_pre1=Dqk(7)+Sezk_pre;
if abs(p_pre1)<=0.000001;
a1=(1-2^(-8))*a1_pre;
a2=(1-2^(-7))*a2_pre;
else
a1=(1-2^(-8))*a1_pre+(3*2^(-8))*sgn_com(p_pre1)*sgn_com(p_pre2);
a2=(1-2^(-7))*a2_pre+2^(-7)*(sgn_com(p_pre1)*sgn_com(p_pre3)-f_com(a1_pre)*sgn_com(p_pre1)*sgn_com(p_pre2));
end
%自适应预测和重建信号计算器
coe(1)=a1;
coe(2)=a2;
coe(3)=b1;
coe(4)=b2;
coe(5)=b3;
coe(6)=b4;
coe(7)=b5;
coe(8)=b6;
coe(9)=Sezk;
coe(10)=p_pre1;
coe(11)=p_pre2;
g=(a1*Srk_pre+a2*Srk_pre_pre+Sezk);
f=coe;
%sgn_com函数
function b=sgn_com(a)
if a>=0.000001
b=1;
else
b=-1;
end
%重建信号输出子函数
function Srk=Srk_com(Dqk,Sek)
Srk=Dqk+Sek;
%单频信号判定子函数
function Tdk=Tdk_com(A2k)
if (A2k
Tdk=1;
else
Tdk=0;
end
Tdk=Tdk;
%窄带信号顺便判定子函数
function Trk=Trk_com(A2k,Dqk,Ylk)
if (A2kpow(24.2,Ylk))
Trk=1;
else
Trk=0;
end
Trk=Trk;
%量化器标度因子自适应wi的选取子函数
function J=wi_result(in)
switch in
case 0
wi=-0.75;
case 1
wi=1.13;
case 2
wi=2.56;
case 3
wi=4.00;
case 4
wi=7.00;
case 5
wi=12.38;
case 6
wi=22.19;
case 7
wi=70.13;
end
J=wi;
%量化阶矩自适应因子计算子函数
function [Yk,coe3]=Yk_com(Ik_pre,Alk,Yk_pre,coe3);
Yl_pre_pre=coe3;
Yu_pre=(1-2^(-5))*Yk_pre+2^(-5)*wi_result(abs(Ik_pre));
Yl_pre=yl_result(Yl_pre_pre,Yu_pre);
coe3=Yl_pre;
Yk=Alk*Yu_pre+(1-Alk)*Yl_pre;
%锁定标度因子计算子函数
function yl=yl_result(yl_pre,yu_now)
yl=(1-2^(-6))*yl_pre+2^(-6)*yu_now;
yl=yl;
%快速非锁定标度因子计算子函数
function yu=yu_result(y_now,wi_now)
yu=(1-2^(-5))*y_now+2^(-5)*wi_now;
yu=yu;
错误提示
??? Error using ==> plot
Vectors must be the same lengths.
Error in ==> d at 23
plot(a);
matlab adpcm编码,求助 求G.721 ADPCM语音编码相关推荐
- 已知函数和y值求自变量用matlab,matlab已知函数值求自变量,求助
思路是这样的:你得到最小的函数值后,把它带入你作图的方程反解自变量的值.我不知道你画的这个函数图像的方程什么,我用一个二次方程y=x.^2+x给你做示范:先做图:x=-10:0.1:10;y=x.^2 ...
- 关于ADPCM编码和PCM编码的wave文件通过Java进行相互转换
关于ADPCM编码和PCM编码的.wav文件通过Java进行相互转换 最近在做一个呼叫器的项目,中间碰到了点问题,就是呼叫器那边传过来的数据是ADPCM编码格式的,经过程序转换成.wav文件后可以在播 ...
- ADPCM编码和解码
ADPCM音频解码,其实放在这里有些不太合适. 在编写ZN-X开发板整板测试程序的后期,振南开始转向专注于ADPCM音频的解码算法.对于音视频的编解码,振南一直是很感兴趣的. VS1003录音向外输出 ...
- ADPCM编码与解码学习笔记·
ADPCM编码与解码学习笔记 一.前言 之前许多次说过,有空的时候写写博客,可是一直没有好好落实.由于工作的原因,经常会接触到一些音视频的编解码技术,而ADPCM就是我第一接触的音频编码技术.所以,本 ...
- MATLAB教程_11方程式求根_台大郭彦甫课程笔记
MATLAB教程_11方程式求根_台大郭彦甫课程笔记 一.符号寻根法(解析法) 1.使用sym()或syms()创建符号变量 2.符号根查找:solve() 3.解多重方程 4.求解用符号表示的方程 ...
- matlab绘制系统函数频率特性,7.6应用于离散系统的Matlab基本函数 7.7 求离散系统的时域响应 频率特性分析...
功能:求离散系统的单位阶跃响应. 格式: [c,t]=dstep(n,d) [c,t]=dstep(n,d,m) 说明: dstep函数可绘制出离散系统以多项式函数g(z)=n(z)/d(z)表示的系 ...
- java 奥运五环_[求助]求奥运五环 java代码
[求助]求奥运五环 java代码 求奥运五环 java小程序代码,急用!新手先谢过了! 搜索更多相关的解决方案: 奥运五环 java 代码 ----------------解决方案-------- ...
- Matlab计算微分方程曲线求导及过曲线上点的切线方程
Matlab计算微分方程曲线求导及过曲线上点的切线方程 求解f(x)=x^2一元二次方程上某点的切线方程并绘制出方程的切线图.点(4,f(4))是曲线方程f(x)上的一个点,求出该点的切线并绘制出来. ...
- matlab求解复杂隐函数,MATLAB复杂隐函数求解!求大神指导!
问题描述: MATLAB复杂隐函数求解!求大神指导! syms D1 D2 G1 G2 al E1 E2 Km w6 G1=10^(-5);G2=10^(-5); E1=2*(10^11);E2=2* ...
最新文章
- MySQL存储过程的创建及调用
- Andorid之BINDSERVICE的使用方法总结
- Feign接口 多线程问题
- Qt 编码问题QTextCodec
- 阅读《C陷阱与缺陷》的知识增量
- shell 批量生成随机文件
- C# 2.0泛型编程基础(1)
- 基于单片机的自动追日系统设计_电机太阳论文,关于基于Atmega32的主动式太阳能追日系统相关参考文献资料-免费论文范文...
- 华为路由交换工程师学习笔记汇总
- Vue+canvas 实现自定义文字样式转图片,文字与图片进行合成(内蒙古民族大学实习项目)
- 编译原理——将代码翻译成四元式序列
- 信息收集(OSINT)解释与实践-初
- 基于 ClickHouse OLAP 的生态:构建基于 ClickHouse 计算存储为核心的“批流一体”数仓体系...
- Maix Bit(K210) 裸机开发教程(六)摄像头使用
- 相机标定:像素焦距和毫米焦距的转换,根据内参计算FOV
- 电动汽车的新问题,保险公司赔不起,车主养不起
- ZDNS助力中国科技网启动RPKI路由验证,我国进入IP地址路由安全认证时代
- 宜信区块链|一篇干货文读懂宜信的区块链实践
- Git和SVN的优缺点/比较/区别
- SEO的心灵窗户:软文技巧
热门文章
- Linux编程——文件 IO操作【转】
- 【软件工程综合实践】简单工厂模式之蛋糕店(完整代码)
- 香蕉派BPI-QCar STEAM创客教育套装设计,兼容BPI:bit 与Micro:bit
- Untiy编辑器——Excel转Json工具
- 嵌入式计算机外接屏幕没反应怎么办,笔记本外接显示器的嵌入式扬声器没有声音...
- 【周总结】-2019年7月第一周
- 外键约束(foreign key,简称FK)
- 微信小程序开发之——用户登录-获取用户信息(5),意外收获字节跳动内部资料
- pycharm环境配置更改
- 有一种冷,叫做“冻关机”