数字信号处理实验(MATLAB)

假如想象 提交于 2019-12-23 21:42:36

1.语音信号处理

利用windous下的录音机或其他软件录制一段自己的语音(规定:语音内容为自己的名字,以wav格式保存,如wql.wav),时间控制再2秒之内,利用MATLAB提供的函数wavread(Matlab7.0版本,高版本采用audioread函数读取音频文件)对语音信号进行采样,提供sound函数对语音信号进行回放。
[y,fs,nbits]=wavread(file),
采样值放在向量y中,fs表示采样频率,nbits表示采样位数。Wavread的更多用法请使用help命令自行查询。
2)语音信号的频谱分析
利用fft函数对信号进行频谱分析
3)受白噪声干扰的语音信号的产生与频谱分析
①白噪声的产生:
N1=sqrt(方差值)×randn(语音数据长度,2)(其中2表示2列,是由于双声道的原因)
然后根据语音信号的频谱范围让白噪声信号通过一个带通滤波器得到一个带限的白噪声信号N2;
带通滤波器的冲激响应为:
hB(n)= 其中ωc1为通带滤波器的下截止频率,ωc2为通带滤波器的上截止频率。其中下截止频率由每个人的语音信号的最高频率确定
滤波器的长度N由滤波器的过渡带确定,一般不宜太小(大于1000),α=(N-1)/2;
②信号y通过低通滤波器,得到信号为x1
低通滤波器的冲激响应为:
其中的ωc1与上面的带通滤波器的下截止频率一致,滤波器的长度N也于上面的带通滤波器一致,α=(N-1)/2
③将N1加上x1得到一个受到噪声污染的声音信号
4)用IIR滤波器(采用双线性法设计)对受污染语音信号进行滤波
5)比较滤波前后信号的波形与频谱
6)回放滤波后的语音信号

程序:

clc;clear;close;
audioread('GJQ.wav');
[d,fs]=audioread('GJQ.wav');
sound(d,fs); //播放原声音
plot(d)
y=audioread('GJQ.wav');
Yk=fft(y);
figure(1);plot(abs(Yk));title('原始信号频谱');
M=2001; //滤波器长度
n=1:M;L=(M-1)/2;
wh=0.9;wl=0.3; //带通信号上下限
h2=wh*sinc(wh*(n-L))-wl*sinc(wl*(n-L));
h=wl*sinc(wl*(n-L));
H2k=fft(h2);
Hk=fft(h);
figure(2);plot(abs(H2k));title('H2k');
figure(3);plot(abs(Hk));title('HK');
c=5.9;%噪声的均方值要比语音信号的值大
N1=177151;%也可以通过求取length(y)直接得到N1
V=2;
x=sqrt(c)*randn(N1,V);%N1的长度取决于y的长度,数据长度与语音长度一致,V是维度,双通道是2,单通道是1
Xk=fft(x);
figure(4),plot(abs(Xk));title('Xk');
s1=fftfilt(h,y);
Ns=fftfilt(h2,x);
Nk=fft(Ns);
figure(5);plot(abs(Nk));title('Nk'); //噪声频谱图
y1=s1+Ns;
sound(y1,fs); //含噪音,比原声音大
Y1k=fft(y1);
figure(6),plot(abs(Y1k));title('Y1k'); //加噪语音频谱图
s=fftfilt(h,y1);
Sk=fft(s);
figure(7),plot(abs(Sk)),title('Sk');
fp=4500;fss=6000;rp=2;rs=30;
wp1=2*pi*fp/fs;% 求出通带数字角频率wp1
wss1=2*pi*fss/fs;% 求出阻带数字角频率wss1
op1=2*fs*tan(wp1/2)  ;
os1=2*fs*tan(wss1/2)  ; %预畸变处理,求出模拟角频率op1和os1
[N,wc]=buttord(op1,os1,rp,rs,'s') % 求出最小阶数N和截止频率wc
[z,p,k]=buttap(N);
[ba,aa]=zp2tf(z,p,k);  % 求出归一化模拟滤波器的分子分母系数ba和aa
[b,a]=lp2lp(ba,aa,wc);  % 求出截止频率为wc的模拟滤波器的分子分母系数b和a
[bz,az]=bilinear(b,a,fs);
[H,f]=freqz(bz,az);
ma=20*log10(abs(H));mp=angle(H)*180/pi;
figure(8);
subplot(2,1,1);plot(f/pi,ma)
subplot(2,1,2);plot(f/pi,mp)
s2=filter(bz,az,y1);
S2k=fft(s2);
figure(9);plot(abs(S2k));title('S2k');
sound(s2,fs);//消噪后的

2.信号分析

研究采样频率fc和数据持续时间Tp与频率分辨率的关系,首先给出不同的采样频率对于信号频谱分析的影响,包括满足采样定理和不满足采样定理的情况下,信号频谱的变换情况(至少2种数值的情况);其次选择在满足采样定理的情况下,在一定的Tp情况下,f1和f2相差多少的时候可以分辨出来(至少3种数值情况);最后在f1和f2不变的情况下,选择不同的Tp,看Tp在什么情况下,不能分辨2个信号的频谱(至少3种数值的情况),以上都可以与理论值相比较以验证理论的正确。

fc=1000;Tp=1;
t=0:1/fc:Tp;
f1=100;f2=200;
x=sin(2*pi*f1*t)+cos(2*pi*f2*t);
XK=fft(x);
plot(abs(XK));title('tp=1')

改变各个参数
其次选择在满足采样定理的情况下,在一定的Tp情况下,f1和f2相差多少的时候可以分辨出来(至少3种数值情况);
最后在f1和f2不变的情况下,选择不同的Tp,看Tp在什么情况下,不能分辨2个信号的频谱(至少3种数值的情况),以上都可以与理论值相比较以验证理论的正确。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!