matlab 十进制小数转为二进制 (-1到1) 音频数据处理

来源:互联网 发布:node.js入门视频教程 编辑:程序博客网 时间:2024/06/03 18:16


%%%%%%%%%%%%%%%%%                      假设为发送端发送
[data,FS]=audioread('C:\Users\WaiHornce\Desktop\101\AIR.wav'); % 将 WAV 文件转换成变量 

sound(data,FS);


t=linspace(0,length(data)/Fs-1/Fs,length(data))';
len = length(data);
 

N = 32;                                                                        %精度为N-2,其中前两位只是用来判断正负
base = zeros(len,N);
tmp = zeros(1,N);

  record=zeros(1,N);
  cntmax = N-2;
 
for i=1:1:len
   % tmp = dec8bin(data(i,1)); %将矩阵转换为2进制 
    count = 0;
    inum = data(i,1);
    intpart = floor(abs(inum));      %整数部分
    tmppart = inum - intpart;
    fracpart = abs(tmppart);         %小数部分
    if  inum < 0
        record(1) = 1;
        record(2) = intpart;
    else if inum >= 0
        record(1) = 0;
        record(2) = intpart;
        end
    end
   
    tmpfracpart = fracpart;
    while(count ~= cntmax)
        count = count+1;      %长度小于N-2
        tmpnum = tmpfracpart*2;
        record(2+count) = floor(tmpnum);
        tmpfracpart = tmpnum - floor(tmpnum);
    end
    tmp = record;
    for j=1:1:N
        base(i,j) = record(j);
    end
end

lenN = len*N;
tran  = reshape(base,lenN,1);




%%%%%%%%%%%%%%%%%%%%%%%               假设为接收端接收数据

recetran = reshape(simout(1:lenN),len,N);
rectmp =zeros(len,1);
for i=1:1:len
    order = 0.5;
    for j=3:1:N
        rectmp(i) = rectmp(i) + recetran(i,j)* order;
        order = order/2;
    end
    if recetran(i,1) == 1
        rectmp(i) = -rectmp(i);
    end
end

sound(rectmp,FS);









原创粉丝点击