基于预测方法的音频信号编码
%读取音频文件
[in,fs]=audioread( 'D:\CloudMusic\test.mp3' );
%读取左声道,
%截取左声道音频的一部分进行分帧
%在本程序中是截取了左声道的第576001个样值到1152000个样值
%这样可以保证分帧时每一帧的数据都是满的
in_left=in(:,1);
in_left=in_left(576001:1152000) ;
left=enframe(in_left,576,576) ;
%设置预测系数矩阵
C=[0,0,0;0,0,1;0,0,2;0,0,3;0,1,0;0,1,1;0,1,2;0,1,3;0,2,0;0,2,1;0,2,2;0,2,3;
    0,3,0;0,3,1;0,3,2;0,3,3;1,0,0;1,0,1;1,0,2;1,0,3;1,1,0;1,3,1;1,1,2;1,1,3;
    1,2,0;1,2,1;1,2,2;1,2,3;1,3,0;1,3,1;1,3,2;1,3,3;2,0,0;2,0,1;2,0,2;2,0,3;
    2,1,0;2,1,1;2,1,2;2,1,3;2,2,0;2,2,1;2,2,2;2,2,3;2,3,0;2,3,1;2,3,2;2,3,3;
    3,0,0;3,0,1;3,0,2;3,0,3;3,1,0;3,1,1;3,1,2;3,1,3;3,2,0;3,2,1;3,2,2;3,2,3;
    3,3,0;3,3,1;3,3,2;3,3,3;];
[m,n]=size(left);
%对每一帧进行操作
%取前100帧,分别对每一帧进行IPC编码
for i=1:100
    %s中储存编码码字
    s='';
    %nbit代表当前编码位
    nbit=1;
    %p为当前帧的过去祥值矩阵
    p=guoqujuzhen(left(i,:));
    %求取当前帧所有样值的所有预测样值
    pre=C*p;
    %E为误差矩阵,用于保存- -帧样值的所有误差
    E=zeros(64,n);
    for j=1:n
        E(:,j)=left(i,j);
    end
    %disp(E);
    E=E-pre;
    %求出误差最小值及所在行号I
    [m,I]=min(sum(abs(E),2));
    %e的第工行即为误差最小的行%参数k的估计
    e=E(I,:);
    %误差扩展
    e=e*2^15;
    %一帧中所有预测误是差扩展求和
    AbEror=sum(abs(e));
    %求取Ricce编码的参数k
    k=0;
    N=576;
    if N<AbsError
        k=k+1;
        IN=N*2;
    end
    %对每一个预测误差进行Rice编码
    for j=1:length(e)
        en=e(j);
        %符号位编码
        if en>0
            s(nbit)= '1';
            nbit=nbit+1;
        else
            s(nbit)='0';
            nbit=nbit+1;
        end
        %预测误差职绝对值Rice编玛
        en=abs(en);
        %必预测误差的二进制编码
        low=dec2bin(en);
        %连零位的编码
        char sang1=0;
        sang1=length(low)-k;
        if sang1~= '0'
            for m=1:sang1
                s(nbit)='0';
                nbit=nbit+1;
            end
        else
        end
        %分隔位编码
        s(nbit)='1';
        nbit=nbit+1;
        %预测误差的二进制低k位
        for m=length(low)-k+1:length(low)
            s(nbit)=low(m);
            nbit=nbit+1;
        end
    end
    %提前创建好输出文件output.txt,将压缩编码写入
    fid=fopen('D:\Users\ZK_HOME\Desktop\Test4\an1.txt','a' );
    fwrite (fid,s);
    fclose (fid);
end

function p = guoqujuzhen(x)
p = zeros(3,576);
for i = 1:3
    for j = i+1;length(x)
        p(i,j)=x(j-i);
    end
end
end
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇