zoukankan      html  css  js  c++  java
  • Matlab实现均匀量化

    Matlab实现均匀量化

    首先读入一个音频文件的前200个点,如果音频通道大于1则只取一个通道,滤掉其余的
    得到音频文件的最大值和最小值,最大值和最小值的差除以2的4次方即16得到量化电平的端点间隔。
    从最小值开始每次加量化电平端点间隔进行量化,最大值之上补一个边界,方便判断。

    1. Mid Riserd 量化方法
      遍历量化区间,如满足某一区间,则取其区间的中点进行量化,并进行下一个点
    2. Mid Tread量化方法
      遍历量化电平正负半个端点间隔,如满足该区间,则取该量化端点

    输出两者和原来信号进行对比分析。

    实现效果

    运行效果图:
    红色的是原始声音信号的波形
    蓝色的是4 bits量化后的波形

    1

    2

    代码实现

    clear all
    clc
    % 量化位数
    n_bits = 4;
    % 读入原始文件的左声道前200个点
    WAV = wavread('road.wav', 200);
    WAV = WAV( : ,1);
    figure;
    plot(WAV, 'r');hold on
    % 设置量化电平参数
    MAX_VALUE = max(WAV);
    MIN_VALUE = min(WAV);
    MID_VALUE = (MAX_VALUE - MIN_VALUE) / 2^n_bits;
    for i = 1 : 2^n_bits + 1
       m(i) = MIN_VALUE + MID_VALUE * (i - 1); 
    end
    %% Mid Riser的量化方法
    WAV1 = WAV;
    for i = 1 : 200
       for j = 1 : 2^n_bits
          % 取分界点的中点
          if WAV1(i) >= m(j) && WAV1(i) <= m(j+1)
             WAV1(i) = (m(j) + m(j+1)) / 2;
             break
          end
       end
    end
    plot(WAV1, 'b');hold off % 输出并对比
    title('Mid Riser');
    %% Mid Tread的量化方法
    figure;
    plot(WAV, 'r');hold on
    WAV2 = WAV;
    for i = 1 : 200
       for j = 1 : 2^n_bits
          % 取某一分界点
          if WAV2(i) >= (m(j) - 1/2 * MID_VALUE) && WAV2(i) <= (m(j) + 1/2 * MID_VALUE)
             WAV2(i) = m(j);
             break
          end
       end
    end
    plot(WAV2, 'b');hold off % 输出并对比
    title('Mid Tread');
    
  • 相关阅读:
    泛型
    Math类
    Static关键字
    Java最新面试问答整理
    Jenkins显示语言切换为中文(最终解决办法)
    eclipse中导入SVN项目步骤
    Xshell连接不上虚拟机Linux系统
    SQLYog执行SQL脚本提示:错误代码: 1067
    Web应用三种部署方式的优缺点
    web应用配置虚拟路径映射方式一配置不成功问题解决办法
  • 原文地址:https://www.cnblogs.com/wsine/p/4670503.html
Copyright © 2011-2022 走看看