一.用FFT实现有限长序列的线性卷积:
给定两个序列x=[2,1,1,2],h=[1,-1,-1,1]
1、直接计算两个序列的线性卷积;
2、用FFT实现线性卷积,并和1的结果对比分析。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21clear all; close all; x = [2,1,1,2]; h = [1,-1,-1,1]; nx = length(x); nh = length(h); %第一问 %直接计算线性卷积 y = conv(x,h) %第二问 %重叠相加法计算线性卷积 x0 = zeros(1,nx+nh-1); x0(1:nx)=x(1:4); h0 = zeros(1,nx+nh-1); h0(1:nh)=h(1:4); y0 = fftfilt(x0,h0) %两种计算方法的差异 delta_y = y0-y
实验结果:
结果分析:
图1-1中y为直接线性卷积的结果,y0为补领后采用重叠相加发(fftflit)的结果,二者相等.
二、两个音频信号“Female.wav”and “male.wav”二选一,进行如下实验:
1、读出所给音频信号x(t),确定该音频信号的采样率;画出该音频信号的时域波形和频谱图;
2、对音频信号人为加噪声,回放音频信号,感觉和原来有什么不同?
3、对加噪声后的信号,用滑动平均滤波器进行滤波(用重叠相加法fftfilt实现),得到滤波后的音频信号f(t);
4、对比原信号x(t)和滤波后音频信号f(t)的波形及频谱。播放这两个音频信号,感觉前后声音的变化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55close all; clear all; [x,fs] = wavread('a_Female.wav'); nx = length(x); sound(x); %采样频率fs = 16000; X = fft(x); Y = abs(fftshift(X)); %图一,音频时域和频域 figure subplot(211) plot(x) title('音频时域') subplot(212) plot(Y) title('音频频域') %图二 figure %噪声方差 sigma = 0.05; r = normrnd(x,sigma); nr = length(r); sound(r); R = fft(r); YR = abs(fftshift(R)); subplot(211) plot(r) title('音频时域(加噪声)') subplot(212) plot(YR) title('音频频域(加噪声)') %图三 nw = 10;%窗长 w = ones(1,nw); r0 =zeros(1,nr+nw-1); w0 = zeros(1,nr+nw-1); r0(1:nr) = r(1:nr); w0(1:nw) = w(1:nw); f = fftfilt(r0,w0); sound(f); F=fft(f); YF=abs(fftshift(F)); figure subplot(211) plot(f) title('音频时域(滤波)') subplot(212) plot(YF) title('音频频域(滤波)')
结果分析:
首先通过设定噪声的方差调整噪声的影响,此代码中设定为sigma=0.05.实验过程中尝试过将sigma=1,0.1,0.01.sigma=1时基本全是噪声且很响;sigma=0.1时,原声被噪声影响也较大;sigma=0.01时基本没影响;最终选择为0.05.
实验过程中一次听三段音频(原音频,加噪声音频和滤波后音频),结果是基本能听清滤波后的信号.
通过对比图2-1,2-2,2-3,也可以看出重叠相加法在能滤掉高频的噪声.
三、 一LTI系统的系统函数如下:
1、分解成2阶系统的级联;
2、分解成1阶系统的级联;
3、画零极点分布图;(要求分别用zplane(b,a)和zplane(z,p)画)
4、系统的频率响应的幅度响应和相位响应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32close all; clear all; num = [0.1,0.12,0.02]; den = [1,-0.2,2.42,-1.312,0.64]; [z,p,k]=tf2zp(num,den) sos=zp2sos(z,p,k) [sos, G]=tf2sos(num,den) %图三 figure subplot(211) zplane(num,den) title('zplane(num,den)') %由于此算法是先化成正次幂,会含有z=0的两个零点 subplot(212) zplane(z,p) title('zplane(z,p)') %由于此算法是直接算负次幂,会漏掉Z=0的两个零点 %图四 N=1000; [H,f]=freqz(num,den,N); figure subplot(211) plot(abs(H)) title('幅度相应') subplot(212) plot(angle(H)) title('相位相应')
结果分析
sos=zp2sos(z,p,k)
算法1是先将分子分母化成正次幂,会含有z=0的两个零点
[sos, G]=tf2sos(b,a)
算法2是直接算负次幂,会漏掉Z=0的两个零点
最后
以上就是闪闪寒风最近收集整理的关于华工【数字信号处理】(DSP)实验二 数字信号处理应用实例的全部内容,更多相关华工【数字信号处理】(DSP)实验二内容请搜索靠谱客的其他文章。
发表评论 取消回复