实验目的

  1. 音频信号实验
    产生两段音频信号,将声音信号进行傅立叶变换,将时域信号转为频域信号,并分别查看两段信号变化后的幅频特性,然后将两段频域信号线性叠加,合成新的频域信号,最后将此频域信号进行反傅立叶变换得到时域信号。
  2. DFT实验
    掌握DFT(FFT)对时域离散信号进行频谱分析的方法。
  3. 滤波器的设计
    掌握窗口函数法设计FIR数字滤波器的原理和方法

实验原理

音频信号实验

利用matlab实现音频的读取,快速傅立叶变换,频域序列的叠加,傅立叶反变换。
核心函数为
wavrecord() 通过设备获取音频信号
wavread() 将音频文件读入
wavplay() 播放wav格式的音频时域信号
fft() 离散快速傅立叶变换
ifft() 离散快速傅立叶凡变换

2. DFT实验

DFT变换的公式为
$x(k)=\sum_{n=0}^N x(n)e^{-j kn{2\pi/N}}, k=0, 1, 2, ...N-1$ (1)
反变换的形式为
$x(n)=(1/N)\sum_{k=0}^N-1x(k)e^{jkn2\pi/N}, n=0, 1, 2, ..., N-1$(2)
Matlab 中计算DFT(FFT)的函数为fft() 反函数为ifft()
fft()函数的说明
通过查看说明文档,fft函数共有四种形式
Y = fft(x)
Y = fft(X, n)
Y = fft(X, [], dim)
Y = fft(X, n, dim)
Y = fft(x)返回向量x的离散傅立叶变换,如果x是个矩阵,那么返回每一行的离散傅立叶变换。
Y = fft(X, n) 返回n点的离散傅立叶变换。
ifft()函数的说明
y = ifft(X)
y = ifft(X, n)
y = ifft(X, [], dim)
y = ifft(X, n, dim)
y = ifft(…, ‘symmetric’)
y = ifft(…, ‘nosymmetric’)
y = ifft(X) 返回向量x的离散傅立叶反变换,如果x是个矩阵,那么返回每一行的离散傅立叶反变换。
y = ifft(X, n) 返回n点的离散傅立叶反变换。

3. 滤波器的设计

a. 窗函数法设计FIR数字滤波器
设欲设计的滤波器的理想频域相应为$H_d(e^{jw})$ ,单位脉冲响应为 则$$h_d(n)=1/2\pi \int_{-\pi}^{\pi}H_d(e^{jw})dw$$根据给定的$H_d(e^{jw})$求出$h_d(n)$一般是无限长且非因果的。为了得到一个因果的有限长的滤波器$h(n)$ ,需要设计一个窗口函数$w(n)$对 $h_d(n)$进行截断处理
$h(n)=h_d(n)w(n)$

于是$h(n)$就是十几设计FIR滤波器的单位脉冲响应,其频域相应 $H(e^{jw})$为
$H(e^{jw})=\sum_{n=0}^{N-1}e^{-jwn}$
其中N为窗口$w(n)$的长度。窗口函数的形状和窗口长度N决定了窗口函数法设计出的FIR滤波器的性能。

实验内容及结果分析

音频信号实验

第一步,读入音频信号,并播放获取的信号代码如下

1.  [x1,FS1,NBITS1]=wavread('./sunhao1.wav'); %文件在当前文件夹
2.  wavplay(x1);
3.  pause(2);
4.  [x2,FS2,NBITS2]=wavread('./sunhao2.wav');
5.  wavplay(x2);
6.  pause(2);
7.  figure
8.  subplot(2,1,1),plot(x1);
9.  subplot(2,1,2),plot(x2);  

两段音频文件的时域图谱为

第二步,声音信号进行离散傅立叶变换,对应代码如下

1.  y1=x1(:,1); y2=x2(:,1);
2.  N=min(length(y1),length(y2));
3.  z1=fft(y1,N); z2=fft(y2,N);
4.  k=0:N-1; wk=2*k/N;
5.  figure; subplot(2,1,1);
6.  stem(wk,abs(z1),'linewidth',2);
7.  title('(a) 音频1的幅频特性图');xlabel('omiga/pi');ylabel('幅度');grid
8.  subplot(2,1,2); stem(wk,abs(z2),'linewidth',2);
9.  title('(b) 音频2的幅频特性图');xlabel('omiga/pi');ylabel('幅度');grid  

两段声音的幅频特性图谱

从图中可以看出在低频和高频处幅度较大,其他频率部分幅度较低,且相对平缓。
最后,将两段频域信号进行叠加,叠加后的序列再进行反傅立叶变换到时域信号。

DFT实验

第一部分
对矩形序列分别进行不同点的快速傅立叶变换,令 x=[1, 1, 1, 1]对x分别进行N=8,N=16, N=32的fft变换

结果如图所示,(a)和(b)子图表示的是N=8时的fft的幅度和相位特性图,(c)和(d)子图表示的是N=16时的fft的幅度和相位特性图;(e)和(f)子图表示的是N=32时的fft的幅度和相位特性图。可以看出N越大图形提供的信息越完整。
第二部分,对余弦序列进行快速傅立叶变换。

图中(a)和(b)子图表示的是N=8时的fft的幅度和相位特性图,(c)和(d)子图表示的是N=16时的fft的幅度和相位特性图;(e)和(f)子图表示的是N=32时的fft的幅度和相位特性图。虽然看不出明显的差别。

滤波器的设计

窗函数法设计线性相位FIR滤波器
(1) 数字滤波器的性能要求:临界频率$w_0$,滤波器单位脉冲响应长度N
(2) 根据性能要求,合理选择单位脉冲响应$h(n)$的奇偶对称性,从而确定理想频率响应 $H_d(e^{jw})$的幅频特性和相频特性。
(3)求理想单位脉冲响应$h_d(n)$ 。在实际中,可对 $H_d(e^{jw})$按M(M远远大于N)点等距采样,并对其求IDFT得 $h_M(n)$,用 $h_M(n)$代替 $h_d(n)$。
(4) 选择适当的窗函数$w(n)$ ,根据 $h(n)=h_d(n)w(n)$求所需设计的FIR滤波器单位脉冲响应。
(5) 求 $H(e^{jw})$,分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述操作,直至得到满意结果。
常见的窗函数有以下几种形式

窗函数 旁瓣峰值幅度/dB 过度带宽 阻带最小衰减/dB
矩形窗 -13 4π/ N -21
三角形窗 -25 8π/ N -25
汉宁窗 -31 8π/ N -44
哈明窗 -41 8π/ N -53
布莱克曼窗 -57 12π/ N -74
凯塞窗(a=7.865) -57 10π/ N -80

用窗口函数设计数字滤波器。
函数fir1()

1.  b = fir1(n, Wn)
2.  b = fir1(n, Wn, ‘ftype’)
3.  b = fir1(n, Wn, window)
4.  b = fir1(n, Wn, ‘ftype’, window)
5.  b = fir1(… , ‘nomalization’) 

b = fir1(n, Wn)返回6dB截止频率为Wn的n阶(单位脉冲响应h(n)长度N=M+1)FIR低通(Wn为标量)滤波器系数向量b,默认选用哈明窗。当Wn是一个向量时,滤波器是带通滤波器。
fir1() 应用传统的线性相位方法设计滤波器。它可以设计标准的低通滤波器,高通滤波器,带通滤波器和傣族滤波器。该函数默认的初始化的滤波器的回馈大小中心值是0dB。
ftype有如下几种形式
‘high’ 高通滤波器具有Wn的截频.
‘stop’ 带阻滤波器,如果Wn=[w1, w2], 带阻的频率值被限制在区间之间。
‘DC-1’ 为多带滤波器设置第一个带。
‘DC-0’ 为多带滤波器设计阻带。
设计低通滤波器的演示程序如下:

实验拓展

设计低通滤波器,用正弦曲线 $f(t)=2sin(2\pi 20t) + 4sin(2\pi 60t)$来测试滤波效果。
代码如下

1.  t = 0:0.01:2;
2.  f =2*sin(2*pi*20*t)+4*sin(2*pi*60*t);  %原始图像
3.  N = 11;                %滤波器节点个数
4.  wc = 0.5;              %归一化截止频率
5.  hd = fir1(N,wc,'low'); % 基于加窗函数的FIR滤波器设计
6.  ft = conv(f,hd);
7.  figure(1)
8.  plot(abs(fft(f)));
9.  title('原始信号f');
10. figure(2)
11. plot(abs(fft(ft)));
12. title('滤波后信号ft'); 


如图所示(a)图表示原始图像,(b)图表示低通滤波后的图像,原始图像的函数原型为
。可以看到50-150之间两段频率较高的峰值部分被滤波器滤掉,剩下低频部分。

总结

在学习方法上,我有这点体会:学习工科,重在物理意义的理解。对于任何知识点,首先要尝试去理解这个知识点所表达的物理意义是什么,不要一开始就掉进了数学推导的茫茫大海中。先抓住主干,再去考量细节分支,最后再补充特殊情况。这是学习一个已经较为系统的知识的比较好的方法。若一开始从各种细节做起,则会茫然无头绪。
针对数字信号处理这门课程(目前只看到了DFT, FFT,后面的各种滤波器神马的还没有看。所以只拿DFT,FFT 说事儿。),我认为主干是这样的:每个信号都有一个频域特性,我们可以使用各种数学方法来观察信号的频域特性,不同的数学方法观察到的频域特性可能有所不同。这些数学方法包括:傅里叶变换(FT),离散时间傅里叶变换(IDFT),离散傅里叶变换(DFT)和快速傅里叶变换(FFT)。在这四中数学处理方法中,只有DFT 和FFT 是可以在计算机中处理的,因为DFT和FFT是数值化的计算方法,而FT 和 IDFT是积分的计算方法。

附录

下面是实验过程中的代码

%#### 音频信号实验
%Step1 输入音频信号
%####
[x1,FS1,NBITS1]=wavread('./sunhao1.wav');
wavplay(x1);
pause(2);
[x2,FS2,NBITS2]=wavread('./sunhao2.wav');
wavplay(x2);
pause(2);
figure
subplot(2,1,1),plot(x1);
subplot(2,1,2),plot(x2);
%####
%Step2 输入音频信号
%####
y1=x1(:,1);
y2=x2(:,1);
N=min(length(y1),length(y2));
z1=fft(y1,N);
z2=fft(y2,N);k=0:N-1;
wk=2*k/N;
figure;
subplot(2,1,1);
stem(wk,abs(z1),'linewidth',2);
title('(a) 音频1的幅频特性图');xlabel('omiga/pi');ylabel('幅度');grid
subplot(2,1,2);
stem(wk,abs(z2),'linewidth',2);
title('(b) 音频2的幅频特性图');xlabel('omiga/pi');ylabel('幅度');gridz3=z1+0.3*z2;
z4=ifft(z3);
wavplay(z4);
%FIR 实验
xn = [1 1 1 1];
X_8 = fft(xn, 8);
X_16 = fft(xn, 16);
X_32 = fft(xn, 32);
figure('name', '矩形序列的fft频谱');k = 0 : 7;
wk = k * 2 / 8;
subplot(3, 2, 1); stem(wk, abs(X_8), 'LineWidth', 2);
title('(a)8点DFT的幅频特性图'); xlabel('oumege / pi'); ylabel('幅度'); grid on;
subplot(3, 2, 2); stem(wk, angle(X_8), 'LineWidth', 2);
title('(b) 8点DFT的相频特性图');grid on; xlabel('oumege / pi');ylabel('相位'); axis([0, 2, -3.5, 3.5]);k = 0 : 15; wk = 2 * k / 16;
subplot(3, 2, 3); stem(wk, abs(X_16), 'LineWidth', 2);
title('(c) 16点的幅频特性图'); xlabel('oumege / pi'); ylabel('幅度'); grid on;
subplot(3,2, 4); stem(wk, angle(X_16), 'LineWidth', 2);
title('(d) 16点的相频特性图'); grid on; xlabel('oumege / pi'); ylabel('相位');
axis([0, 2, -3.5, 3.5]);k = 0 : 31; wk = 2 * k / 32;
subplot(3, 2, 5); stem(wk, abs(X_32), 'LineWidth', 2);
title('(c) 32点的幅频特性图'); xlabel('oumege / pi'); ylabel('幅度'); grid on;
subplot(3,2, 6); stem(wk, angle(X_32), 'LineWidth', 2);
title('(d) 32点的相频特性图'); grid on; xlabel('oumege / pi'); ylabel('相位');
axis([0, 2, -3.5, 3.5]);clear all; n = 0 : 50;
xn = cos(pi / 4 * n);
X_4 = fft(xn, 4);
X_8 = fft(xn, 8);
X_16 = fft(xn, 16);
figure('name', '余弦序列的频谱');k = 0 : 3; wk = 2 * k / 4;
subplot(3, 2, 1); stem(wk, abs(X_4), 'LineWidth', 2);
title('(c) 4点的幅频特性图'); xlabel('oumege / pi'); ylabel('幅度'); grid on;
subplot(3,2, 2); stem(wk, angle(X_4), 'LineWidth', 2);
title('(d) 4点的相频特性图'); grid on; xlabel('oumege / pi'); ylabel('相位');
axis([0, 2, -3.5, 3.5]);k = 0 : 7; wk = 2 * k / 8;
subplot(3, 2, 3); stem(wk, abs(X_8), 'LineWidth', 2);
title('(c) 8点的幅频特性图'); xlabel('oumege / pi'); ylabel('幅度'); grid on;
subplot(3,2, 4); stem(wk, angle(X_8), 'LineWidth', 2);
title('(d) 8点的相频特性图'); grid on; xlabel('oumege / pi'); ylabel('相位');
axis([0, 2, -3.5, 3.5]);k = 0 : 15; wk = 2 * k / 16;
subplot(3, 2, 5); stem(wk, abs(X_16), 'LineWidth', 2);
title('(c) 16点的幅频特性图'); xlabel('oumege / pi'); ylabel('幅度'); grid on;
subplot(3,2, 6); stem(wk, angle(X_16), 'LineWidth', 2);
title('(d) 16点的相频特性图'); grid on; xlabel('oumege / pi'); ylabel('相位');
axis([0, 2, -3.5, 3.5]);
%拓展实验
t = 0:0.01:2;
f =2*sin(2*pi*20*t)+4*sin(2*pi*60*t);
N = 11;                %滤波器节点个数
wc = 0.5;              %归一化截止频率
hd = fir1(N,wc,'low'); % 基于加窗函数的FIR滤波器设计
ft = conv(f,hd);
figure(1)
subplot(1, 2, 1); plot(abs(fft(f)));
%title('原始信号f');
%figure(2)
subplot(1, 2, 2); plot(abs(fft(ft)));
%title('滤波后信号ft');

数字信号处理实验(二)相关推荐

  1. 数字信号处理实验二:数字语音信号与频谱分析

    文章目录 一.实验目的 二.实验过程与结果 1.数字音频信号的频谱分析 2. 数字音频信号的频谱分析 3. 数字和弦音频信号的生成 三.结果分析与实验结论 1.读数字音频信号的频谱分析 2.数字和弦音 ...

  2. 数字信号处理实验二:DFT的共轭对称性及应用

    实验目的 1.掌握实序列的DFT共轭对称性的特点: 2.学习应用实序列DFT的共轭对称性构建频域序列以保证时域序列为实数的方法: 实验原理 1.DFT的共轭对称性 其中: 2.有限长实序列的DFT的共 ...

  3. 数字信号处理 | 实验二 MATLAB z换和z逆变换分析+求解差分方程+求解单位冲击响应+求解幅频相频特性曲线+求解零极点

    1.实验目的 (1)掌握离散时间信号的z变换和z逆变换分析 (2)掌握MATLAB中利用filter函数求解差分方程: (3)掌握MATLAB中利用impz函数求解单位冲击响应h(n); (4)掌握M ...

  4. Matlab验证dtft共轭性质,数字信号处理实验4重点.docx

    深 圳 大 学 实 验 报 告 课程名称: 数字信号处理实验 实验项目名称: 实验4 学院: 信息工程学院 专业: 电子信息工程 指导教师: 陈佳义 报告人: 学号: 班级: 实验时间: 11.12 ...

  5. 奇数点偶数点fft的matlab,电子科大 数字信号处理实验2_FFT的实现

    电 子 科 技 大 学 实 验 报 告 学生姓名:Shrimp 学 号: 指导教师: 一.实验室名称:数字信号处理实验室 二.实验项目名称:FFT 的实现 三.实验原理: 一.FFT 算法思想: 1. ...

  6. matlab fft谱分析实验报告,数字信号处理实验报告-FFT算法的MATLAB实现.doc

    数字信号处理实验报告-FFT算法的MATLAB实现.doc 数字信号处理 实验报告实验二FFT算法的MATLAB实现一.实验目的通过本实验的学习,掌握离散傅立叶变换的理论,特别是FFT的基本算法以及其 ...

  7. matlab数字信号处理实验报告,数字信号处理实验报告一 离散信号及其MATLAB实验...

    数字信号处理 离散信号及其MATLAB实验 南昌航空大学实验报告 2012 年 04 月 06 日 课程名称: 数字信号处理 实验名称: 离散信号及其MATLAB实现 班级: 090423班 学号: ...

  8. @数字信号处理实验1

    @数字信号处理实验1 #实验程序: %实验1:系统响应及系统稳定性 close all;clear all; %============================================ ...

  9. 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验(MATLAB版) 刘舒帆,费诺,陆辉 西安电子科技大学出版社 9787560620060...

    商品描述: 基本信息 书名:数字信号处理实验(MATLAB版) 原价:31.00元 作者:刘舒帆,费诺,陆辉 著 出版社:西安电子科技大学出版社 出版日期:2013-7-1 ISBN:97875606 ...

最新文章

  1. Makefile 选项 CFLAGS 、LDFLAGS 、LIBS
  2. Metasploit-MS17-010利用
  3. join,列表和字典用for循环的删除,集合,深浅拷贝
  4. 棱镜刘大澎:云时代的手游SDK接入
  5. .net生成随机字符串
  6. 为什么中国这么多高薪程序员,开发不出Java, Typescript, Python, Rust, Node.js这些基础设施?...
  7. 物联网ZigBee3.0协议E18-2G4U04B模块无线数据抓包调试的方法
  8. 因此,您是一名新软件工程师。 让我们面对一些事实,揭穿一些神话。
  9. qgraphicsitem 复制副本_删除/删除/替换QGraphicsTextItem中的选定文本
  10. android文件管理器项目,浅析Android文件管理器(项目一)
  11. 关闭报错_Cydia Impactor工具各种报错提示的解决方法!
  12. C 数据结构与算法 散列表
  13. access 的几种更新语句:update where 与 update join where
  14. 高等数学辅导讲义严选题辅导讲义(学习笔记)
  15. linux下golang protoc安装详细教程
  16. SuperMap矢量瓦片优化方案
  17. ifconfig 配置ip,netmask,gw
  18. 高等数学-微积分和线性代数
  19. 一支手可以代表多大的数呢? 2 的 19 次方。
  20. 安装andriod studio

热门文章

  1. 红包诞生到测试计划-一
  2. 嗯?你的VS2019运行黑框一闪而过嘛
  3. dp,dpi,px知识补充
  4. mysql必知必会的数据_MySQL必知必会--汇 总 数 据
  5. 初学Python,爬取王者荣耀英雄介绍及皮肤下载
  6. 有哪些网络推广方式,常见的网络推广方法有几种
  7. Axure 8.1.0.3372亲测可用授权码
  8. 面试回答问题太紧张,心理有点虚,面完就觉得自己蠢。怎么破!
  9. 图拉普拉斯矩阵的定义、推导、性质、应用
  10. 原来面试成功的程序员简历都是这样写的