华工【数字信号处理】(DSP)实验二 数字信号处理应用实例

一.用FFT实现有限长序列的线性卷积:
给定两个序列x=[2,1,1,2],h=[1,-1,-1,1]
1、直接计算两个序列的线性卷积;
2、用FFT实现线性卷积,并和1的结果对比分析。

clear 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)的波形及频谱。播放这两个音频信号,感觉前后声音的变化

close 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、系统的频率响应的幅度响应和相位响应

close 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的两个零点

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值