信号分析处理大作业报告+程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.设计方案如下
①利用MATLAB中的wavread命令来读入语音信号,将它赋值给某一向量。再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波。对于波形图与频谱图(包括滤波前后的对比图)都可以用MATLAB画出。
②由于音频信号是连续且长度未知,故可以采用N阶低通滤波器。滤掉低频部分的噪音,剩下的就是原信号了。
③将去噪后的信号写成wav格式的文件可以使用wavwrite函数。
2. 步骤
①录制一段歌曲,采用Matlab工具对此音频信号用FFT作谱分析。
②录制一段音频信号并命名为信xinhao1.wav存放在文件夹中。
③使用wavread函数读出此信号。
④用函数FFT进行傅里叶变换,得到波形图,幅值图,频谱图。
⑤加入一个随机高斯噪声,将原始信号与噪声叠加产生加噪之后的声音文件,得到xinhao2.wav文件。
⑥通过N阶低通滤波器对噪声语音滤波,在Matlab中,FIR 滤波器利用函数filter对信号进行滤波,得到xinhao3.wav文件。
首先通过MATLAB工具编程获取音频文件的原始信号波形,原信号幅值和原始信号频谱图如下:
然后通过加一个高斯噪声对其分析可得加噪声后信号波形,加噪声后幅值和加噪声后信号频谱图如下:
最后再通过N阶低通滤波器对噪声信号滤波,在Matlab中,FIR 滤波器利用函数filter
对信号进行滤波,从而得到滤波后信号波形,滤波后幅值和滤波后信号频谱图:
程序
[x]=wavread('C:\Users\h\Desktop\xinhao1.wav');
X=fft(x,2048);
figure(1)
fs=abs(X);
plot(fs);
xlabel('HZ');
ylabel('|Y(d)|');
subplot(2,2,1);
plot(x);
xlabel('HZ');
ylabel('|Y(d)|');
title('原始信号波形');
subplot(2,2,2);
plot(X);
xlabel('HZ');
ylabel('|Y(d)|');
title('原始信号幅值');
subplot(2,2,3);
plot(fs);
xlabel('HZ');
ylabel('|Y(d)|');
title('原始信号频谱');
figure(2)
N=length(x); %计算原始语音信号的长度
y1=0.05*randn(N,1); %加上一个高斯随机噪声
x1=x+y1;
x2=fft(x1,2048);
mt=abs(x1);
plot(mt);
xlabel('HZ');
ylabel('|Y(d)|');
subplot(2,2,1);
plot(x1);
xlabel('HZ');
ylabel('|Y(d)|');
title('加噪声后的波形');
subplot(2,2,2);
plot(x2);
xlabel('HZ');
ylabel('|Y(d)|');
title('加噪声后的幅值');
subplot(2,2,3);
plot(mt);
xlabel('HZ');
ylabel('|Y(d)|');
title('加噪声后的频谱');
ht=43000;
bits=16;
wavwrite(x1,ht,bits,'C:\Users\wentao\h\xinhao2.wav');%将加噪声的信号保存figure(3)
N=15;
wc=0.3;
[b,a]=butter(N,wc);
x3=fft(x);
fp=abs(x3);
y2=filter(b,a,x);
Y1=fft(y2);
subplot(2,2,1);
plot(y2);
xlabel('HZ');
ylabel('|Y(d)|');
title('滤波后信号的波形');
subplot(2,2,2);
plot(Y1);
xlabel('HZ');
ylabel('|Y(d)|');
title('滤波后信号的幅值');
subplot(2,2,3);
plot(fp);
xlabel('HZ');
ylabel('|Y(d)|');
title('滤波后信号的频谱');
wavwrite(y2,ht,bits,'C:\Users\h\Desktop\xinhao3.wav');%将滤波之后保存