数字信号处理大作业

更新时间:2024-03-20 02:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字信号处理大作业

班级1316029 学号13160299009 姓名 陈志豪

一. 要求

本次作业要求对一段音乐进行处理,该音乐包含了蜂鸣噪声,根据该段音乐,我们需处理以下问题:

1. 利用matlab软件对audio1211.wav音频信号进行数字信号采样,分别对采样后的信号进行时/频域分析,并提供仿真图和分析说明;

2. 设计合理的数字滤波器,滤去音频信号中的蜂鸣音,给出详细设计流程,并提供频域仿真图和分析说明;

3. 将数字滤波后的数字信号转换成wav格式音频文件

二.分析

(1)通过播放所给音乐文件,很明显能听出wav文件中包含蜂鸣噪音,所以我们应该先分析频谱。在matlab下可以用函数wavread/audioread读入语音信号进行采样,我们可以通过wavread得到声音数据变量x和采样频率fs、采样精度nbits,在读取声音信号之后,利用读出的采样频率作为参数,这段音频读出的采样精度为16,fs为44100hz,所以我们将此后采集时间、fft的参数设置为fs,也就是44100hz。最后我们通过plot函数绘制出了音频信号与时间的关系图pic1,使用fft函数进行fft处理。处理后的信号频谱pic2,如下所示

图1.音频信号与时间的关系图

从图1横坐标我们看到t在9-10s之间截止,与我们在音乐播放器中显示的时间一致。

图2.fft之后得到的频域分析结果

图3.噪声读取

图2为运用fft后得到的处理结果,可以从中读取到,在293.7hz、4671hz附近幅值突然增大,可以确定为噪声干扰。所以我们应该针对频率附近进行滤波。如果针对性进行滤波处理,应该使用低通滤波器进行处理,去除这部分的噪音。之后需要选定滤波器并进行程序设计,在4671hz附近进行滤波,去除蜂鸣杂音。

(2)我们需要对蜂鸣音进行除去,自然需要用到滤波器。所以第二步我们需要设计滤波器并给出详细流程。在第一问的频谱分析中,通过FFT我们已经知道噪音所在,所以我们需要针对这个问题设计参数。

在这里我们选用巴特沃斯低通滤波器进行处理,我们需要设定好的参数有通带边界频率、阻带边界频率、通带最大衰减和通过阻带的最小分贝数(由buttord在matlab定义得)。我们要对于4671hz进行滤波,所以我们选定的两个边界频率应该分别大于和小于这一频率,将通带最大衰减和分贝数进行略微调整,之后用buttord函数进行计算,求得滤波器阶数和3db截止频率,用butter函数得到低通滤波器系统函数的系数。这部分计算程序由附录中的testbutter.m文件中给出。在工作区可以读取我们需要的值带入butter中处理。

之后通过testbutter.m计算得到的3db截止频率和阶数构造的系统函数进行滤波。这部分程序我们在lvbo.m文件中给出。我们先用wavread进行采样,得到了信号、采样率和采样位数x、fs和nbits。之后利用这些采样得到的分量进行滤波处理。由之前的testbutter我们可以得到阶数和3db截止频率。在处理过程中,我们对由testbutter所得代入的参数进行了微调。之后在程序中我们绘制时间与采集音频信号的关系图如下:

图4.处理前后的对比

从处理后的图像我们可以看出,我们定义处理后的音频信号为y,它的音频信号与时间的关系明显比最初提取的x信号波形规整的多,表现了滤波器起到了不错的效果。

三. 总结

在这次设计作业中,我学习了很多关于滤波器的知识,使用matlab完成了这次滤波大作业。虽然成功的滤除了蜂鸣音,但是使用低通滤波器后,从音频效果中还是能听出一些正常的音乐频率分量被滤除,整体音色有了少许变化。这可能是因为滤波器设计不够严谨精确所致,虽然进行了设计参数的微调,但还是将一部分不该滤除的分量也过滤掉了。相信经过更深入的学习后,以后能对滤除噪音有更好的理解,更准确的滤除掉噪音部分。

频谱分析代码

clc; clear;

[x,fs,Nbits]=wavread('audio1221.wav'); N=length(x); t=(0:N-1)/44100; figure(1) plot(t,x);

xlabel('时间'); ylabel('幅度'); title('pic1');

f=44000*(0:N-1)/N; figure(2)

plot(f,abs(fft(x))*2/N); title('pic2'); %sound(x,fs);

滤波处理去除蜂鸣,并保存处理后的音乐

clear all; clc;

[x,fs,nbits]=wavread('audio1221.wav');%读出信号,采样率和采样位数。 sigLength=length(x); Y = fft(x,sigLength);

f=fs*(1:sigLength)/sigLength; stor=Y(1); Y(1)=0;

absY=abs(Y);

figure(1)

subplot(2,2,1);plot(f,absY);xlabel('频率(Hz)');grid on axis([0,f(end)/2,0,500]); t=(0:sigLength-1)/fs;

subplot(2,2,2);plot(t,x);xlabel('时间(s)');grid on y1=x; Y0=Y;

%设计巴特沃斯低通滤波器

[b,a]=butter(14,0.106,'low');

y=filter(b,a,x);%用设计的滤波器进行滤波 Y=fft(x,sigLength); Y(1)=0;

absY=abs(Y); figure(1);

subplot(2,2,3);plot(f,absY);xlabel('频率(Hz)');grid on axis([0,f(end)/2,0,500]);%确定坐标范围 t=(0:sigLength-1)/fs;

subplot(2,2,4);plot(t,y);xlabel('时间(s)');grid on sound(y,fs,nbits);

wavwrite(y,fs,nbits,'audio1211proc.wav');

本文来源:https://www.bwwdw.com/article/lr58.html

Top