我们的第一个小项目,要求:
1.给出实验程序和仿真结果,并完成设计报告。
2.用计算机录制一段语音信号作为原始信号,采样频率fs=22.05kHz,数据位数N=16Bit,存入MATLAB工作空间,显示原始信号波形和频谱,并播放声音
3.给原始信号叠加噪声,频率为6kHz,显示波形和频谱,并播放声音
4.设计IIR滤波器消除噪声,显示波形和频谱,并播放声音
5.窗函数法设计FIR滤波器消除噪声,显示波形和频谱,并播放声音
6.课程第8周交设计报告
clc;
clear;
fs=22050,bits=1024;
[y,fs,bits]=wavread('E:\dwje.wav'); %y:语音数据;fs:采样频率;bits:采样点数
% sound(y,fs,bits); %话音回放
figure(1); %建立
subplot(2,1,1); %对图形窗口进行分割
plot(y);
xlabel('time n');ylabel('amplitude');title('原始信号波形');
y1=fft(y,1024); %fft就是把时域上的曲线变成频域上的曲线,所以fft变换后横坐标是频率
fx=fs*(0:511)/1024; %将横轴变为频率轴//此处出错
fy=abs(y1(1:512)); %将纵轴变为频率幅度轴
subplot(2,1,2);
plot(fx,fy);
xlabel('频率Hz');ylabel('幅度');title('原始信号频谱');
t=(0:length(y)-1)/fs;
d=[0.05*cos(2*pi*6000*t)]';
Y=y+d;
% sound(Y,fs,bits);
figure(2);
subplot(2,1,1);
plot(Y);
xlabel('time n');ylabel('amplitude');title('叠噪信号时域波形');
y2=fft(Y,1024); %将横轴变为频率轴
fy=abs(y2(1:512)); %将纵轴变为频率幅度轴
subplot(2,1,2);
plot(fx,fy);
xlabel('频率Hz');ylabel('幅度');title('叠噪信号频谱');
Ts=1/fs;
Wp=2*pi*5000/fs;Ws=2*pi*5500/fs;Rp=0.1;Rs=40; %通带最大衰减(db),阻带最大衰减(db)
Wp1=2/Ts*tan(Wp/2);Ws1=2/Ts*tan(Ws/2); %将模拟指标转换成数字指标
[N,Wn]=buttord(Wp1,Ws1,Rp,Rs,'s'); %选择滤波器的最小阶数(估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc)
[Z,P,K]=buttap(N); %创建Butterworth低通滤波器原型
[Bap,Aap]=zp2tf(Z,P,K); %将零极点增益转换为普遍分子,分母
[b,a]=lp2lp(Bap,Aap,Wn); %将普遍的分子和分母转换为以Wn为截止频率
[bz,az]=bilinear(b,a,fs); %用双线性变换法实现模拟滤波器到数字滤波器的
[H,W]=freqz(bz,az); %求频率响应
figure(3);
plot(W*fs/(2*pi),abs(H)); %绘制Butterworth低通滤波器频率响应曲线
grid;