1.系统基本原理分析
1.1系统设计要求
将WAV 格式的模拟音频信号转换为数字信号,WAV格式的文件自己选择。
下面是需要完成的具体部分:
Encoder: filter bank(32) Decoder: huffman decoding
DCT/quantization IDCT/inverse quantiser
Huffman coding inverse filter bank
课题的输出要求及结果:
- 读取 WAV 格式的文件(没有压缩过的)
- 用Encoder 完成信号的压缩
- 显示并对比经过压缩后的信号的存储空间减小了
- 用Decoder 完成信号的解码
- 在MATLAB 里经解码后的声音播放出来
1.2 系统设计方案
Encoder: filter bank(32) Decoder: huffman decoding
DCT/quantization IDCT/inverse quantiser
Huffman coding inverse filter bank
具体的理论分析与代码在2部分结合给出。
2.系统代码设计
·语音读取模块
语音读取的代码如下所示:
function [x,Fs,nbits] = func_readwav(resources);
[x,Fs,nbits]=wavread(resources);
sound(x,Fs,nbits);
其波形如下所示:
·滤波器与滤波器反变化
用窗函数法设计FIR滤波器组的基本思路为:
(1)根据所要求的分析频率范围和频率分辨率选择一组分析频率ωk及相对应的原型理想低通滤波器的截止频率ωck(k=0,1,…,L-1),L为滤波器组的通道数,得出理想带通滤波器组的复合频率响应。
(2)用窗函数法近似实现各个理想带通滤波器。实际的复合频率响应等于理想复合频率响应与设计窗的频率特性的卷积。在用窗函数法设计FIR滤波器时,还需要知道通带内的纹波幅度δ,它可以根据阻带衰减量As的要求来确定,通常的典型值为
As=-20lgδ=40∽60 (1)
如果选择Kaiser窗,参数β的计算公式为
当As >50时,β=0.1102(As-8.7);
当21<As <50时,β=0.5845(As-21)0.5+0.07886(As-21)。 (2)
滤波器的阶数为
M=(As-7.95)/14.36△F+1 3)
式中△F是归一化过渡带宽,即△F=△f•T,而
△f=△ω/2π (4)
过渡带宽△ω的选择根据对每个滤波器的频率分辨率要求来决定,必须满足限制条件
△ωk<2ωck (5)
如果各通道采用相同的设计窗,保证中心频率及带宽的选择能覆盖-π到π频率范围(不管滤波器的中心频率和带宽如何分布),那么最终得到的实际复合响应一定是理想的,即具有平坦幅度和线性相位。
首先计算各个通道下的滤波器H0,H1,H2,。。。。。H31。
然后分别进行滤波。得到各个通道下的滤波效果;
反滤波过程。
g0=-wrev(H(1,:));
g1=-wrev(H(2,:));
…………
首先对各个H,取逆。然后作为反滤波器函数G。
然后再次分别进行滤波从而得到各个通道下的滤波后的数据,然后将各个通道下的数据相加得到原始的信号。
load H.mat;
if select == 1
g0=-wrev(H(1,:));
g1=-wrev(H(2,:));
g2=-wrev(H(3,:));
g3=-wrev(H(4,:));
x_recon=filter(g0,1,datas(1,:))+filter(g1,1,datas(2,:))+filter(g2,1,datas(3,:))+filter(g3,1,datas(4,:));
end
if select == 0
x_recon = datas;
end
注意,由于本系统采用32子通道的话将耗费大量的仿真时间,因此,本系统暂时采用的4通道的仿真模式。其滤波器组的仿真结果如下所示;
【采用32个通道的时候,仿真时间超级长,所以先给你做出基本的东西,如果没什么问题,改为32个通道就OK。】
·DCT与IDCT
我们在这里使用MATLAB内部的dct函数。这里就不多做介绍了。
这里比较简单,就是MATLAB自带的函数,dct和idct两个函数。