时域卷积实现音频滤波(matlab实现).docx
实验一 时域卷积徐学政 201206020023【实验内容】给定一段音频信号1.wav与三个离散时间系统,其单位脉冲响应分别为:h1[n]=sin(K1n)/πnh2[n]=-sin(K2n)/πnh3[n]=sin(K3n)/πn-sin(K4n)/πn其中,K1、K2、K3、K4均为常数参数。2.wav、3.wav、4.wav分别是以此音频信号为输入的三个系统的输出。观察输出音频的变化,自行调整参数进行实验,分析参数变化与输出音频间的关系。【实验目标】理解一维时域空间中的时不变卷积的计算公式使用Matlab对给定的音频信号与系统响应进行卷积处理,观察并分析处理后的信号通过三个信号,分别实现低通滤波,高通滤波,带通滤波。【实验要求】记录调节好的卷积函数系数,以及存储下来的合成语音。并给出调节参数的历程和调节的思路。【实验上交材料】调节好的参数,最终的卷积函数,合成后的语音信号;调节过程的中间结果与思路记录。【提高实验】将原信号与输出信号变换到频域观察其不同,并指出其原因及物理意义【实验原理】通过系统函数h1[n]=sin(K1n)/πn,实现低通滤波。理想低通滤波器的频率响应:进行傅里叶反变换,得到:通过系统函数h2[n]=-sin(K2n)/πn,实现高通滤波。理想高通滤波器的频率响应:显然,进行傅里叶反变换,得到:通过系统函数h3[n]=sin(K3n)/πn-sin(K4n)/πn,实现带通滤波。理想带通滤波器的频率响应:显然,其中,其中,进行傅里叶反变换,得到:综上所述,每个h(t)函数均有三个参数需要考虑,幅度A,频率,零时刻的值【实验过程】读取音频文件,得到输入数据序列(以低通滤波器为例)[Y,fs]=audioread('1.wav');%读取音频文件,得到数据和采样率Length=size(Y);%得到音频数据的长度data=Y(1:Length,1)';初始化h函数时间序列、采样率,设定参数,给极限点赋值,其中h函数采用了延时处理,以保留信号的能量,使效果更优。N=2048;%设定h函数数据点数hfs=1000;%设定h函数采样率n=0:N-1;%初始化数据序列t=n/hfs;%初始化时间序列tt=(n-N/2)/hfs;%得到延时的时间序列k=100;%设定参数k,决定截止频率A=1.1;%设定参数A,决定频谱幅度h=A*(sin(k*pi*tt))./(pi*tt);%设定h函数h(N/2+1)=0;%极限点赋值进行卷积运算,得到输出的音频,并保存。y=conv(data,h);%输入音频序列与h函数卷积,得到输出序列y利用FFT,得到输入,h函数,输出三个数据序列的频谱,以指导参数调节function magy=myfft(y,fs)%绘制信号频谱l=size(y);N=l(2);ffty=fft(y);magy=abs(ffty);%得到幅度magy=magy/(N/2);%换算真实幅度magy(1)=magy(1)/2;n=0:N-1;f=n*fs/N;%换算真实频率s=size(f);plot(f(1:floor(s(2)/2)),magy(1:floor(s(2)/2)));%绘制频谱xlabel('f(HZ)');ylabel('A');调用该函数,得到三幅频谱:信号在时域上的卷积等于频域相乘,通过频域上的矩形窗达到滤波的效果。调节参数k,改变截止频率,观察三个频谱,找到最佳的参数k以低通滤波器为例展示调节过程:k取40:k取70:k取100:【实验结果】低通滤波器滤波器类型h(t)表达式参数取值低通A=1.1k=40h(0)=0高通滤波器滤波器类型h(t)表达式参数取值高通A=3k=700h(0)=1000带通滤波器滤波器类型h(t)表达式参数取值带通A=1.2k1=550k2=400h(0)=0【实验代码】低通滤波器h1function h1%低通滤波器[Y,fs]=audioread('1.wav');%读取音频文件,得到数据和采样率Length=size(Y);%得到音频数据的长度data=Y(1:Length,1)';N=2048;%设定h函数数据点数hfs=1000;%设定h函数采样率n=0:N-1;%初始化数据序列t=n/hfs;%初始化时间序列tt=(n-N/2)/hfs;%得到延时的时间序列k=40;%设定参数k,决定截止频率A=1.1;%设定参数A,决定频谱幅度h=A*(sin(k*pi*tt))./(pi*tt);%设定h函数h(N/2+1)=0;%极限点赋值figure;%开启绘图窗口,两行三列,依次是%|1|h函数时域图像|2|输入音频时域图像|3|输出音频时域图像| %|4|h函数频域图像|5|输入音频频域图像|6|输出音频频域图像|subplot(2,3,1)