近代数字信号处理实验-DFT分析信号的频谱

article/2025/8/10 2:16:02

一、实验目的

(1)掌握利用DFT近似计算不同类型信号频谱的原理和方法。

(2)理解误差产生的原因及减小误差的方法。

(3)培养学生自主学习能力,以及发现问题、分析问题和解决问题的能力。

二、知识点及背景知识

(1)利用DFT分析连续信号的频谱,DFT参数  

(2) 声音包括语音、乐音、噪音等。乐音发音物体有规律地振动而产生的具有固定音高的音,如音乐中的1(Do)、2(Re)、3(Mi)。按照音高顺次排列的一串乐音就是音阶,如大家熟悉的1(Do )2(Re)3(Mi) 4(Fa)5(So)6(La)7(Si)就是音阶。乐音由不同频率的正弦信号构成,其最简单的数学模型是cos(2pft),如C大调音阶各乐音对应的频率如下表:

乐音

1

2

3

4

5

6

7

对应频率

261.63

293.66

329.63

349.23

392

440

493.88

三、研讨内容

1.利用DFT分析x(t)=Acos(2pf1t)+Bsin(2pf2t)的频谱,其中f1=200Hzf2=220Hz。分析题目,给出合适的DFT参数,并对实验结果进行分析,讨论窗口的长度和窗口的类型对谱分析有何影响。

 (1)A=B=1; (2)A=1,B=0.1。

  • 代码:

A = 1;B =0.1;f1 =200;f2 = 220;

t = [0:0.001:0.5];

y = A*cos(2*pi*f1*t)+B*sin(2*pi*f2*t);

subplot(2,2,1);plot(t,y);title('原始信号');

axis([0,0.5,-2,2])

y2 = fftshift(fft(y));

fs = linspace(-1000/2,1000/2,length(y));

subplot(2,2,2);plot(fs,abs(y2));title('原始频谱')

bm = blackman(length(y));

win = y.*bm';

subplot(2,2,3);plot(t,win);axis([0,0.5,-2,2]);

title('加blackman窗后信号')

subplot(2,2,4);

win_fft = fftshift(fft(win));

fs = linspace(-1000/2,1000/2,length(win));

plot(fs,abs(win_fft));

title('加blackman窗后频谱')

  • 结果:

A=B=1

      A=1,B=0.1

   

 

  • 分析:

实验中DFT点数为信号长度,从图中可以看出,blackman窗的频谱泄露要比矩形窗(原始带限信号)的小。

  • 代码:

w0 = 12*pi/64;w1 = 13*pi/64;

k = 0:63;L =64;

xk = cos(w0*k)+1*cos(w1*k);plot(xk);

xk_f = fftshift(fft(xk,L));f1 = (0:L-1)/L;

figure(1);plot(f1,abs(xk_f));title('64点DFT')

k = 0:127;L =128;

xk = cos(w0*k)+1*cos(w1*k);

xk_f = fftshift(fft(xk,L));f1 = (0:L-1)/L;

figure(2);plot(f1,abs(xk_f));title('128点DFT')

k = 0:511;L =512;

xk = cos(w0*k)+1*cos(w1*k);

xk_f = fftshift(fft(xk,L));f1 = (0:L-1)/L;

figure(3);plot(f1,abs(xk_f));title('512点DFT')

  • 结果:

 

  • 分析:

64点DFT时,两个谱峰混在一起,无法分辨出来;128点DFT时,两个谱峰依旧混在一起,无法分辨出来;512点DFT时,两个谱峰分离开了。因为DFT是对离散信号频谱DTFT的等间隔抽样,DFT点数越多,谱线间隔越小,频谱会显示更多的细节,也就能够区分出相邻的谱峰了。

3.(*)利用DFT分析音阶信号yueyin1.wav的频谱。要求读取该信号的抽样频率,获得时域抽样点数N,确定信号的持续时间以及合适的DFT点数,并根据谱分析的结果,判断是什么调的音阶。

C大调对应频率

乐音

1

2

3

4

5

6

7

对应频率

261.63

293.66

329.63

349.23

392

440

493.88

  • 代码:

[y,fs] = audioread('yueyin1.wav')%y为时域抽样点数,fs为抽样频率8000Hz

N = length(y);L = N

FFT = fftshift(fft(y,L));Wsam = 2*pi*fs

W = (-Wsam/2+(0:L-1)*Wsam/L)/(2*pi)

plot(W,abs(FFT));axis([0,600,0,1000]);title('yueyin1幅度谱')

  • 结果:

  • 分析:

从图中可以看出,yueyin1对应的是C大调。实验中得出,信号抽样频率为8KHz,抽样点数32000点,从而计算出信号持续时间为32000/8000=4S,这与播放器显示的时长一致。本实验中采取的DFT点数为信号时域点数。

(1)利用DFT分析和弦信号hexian1.wav频谱,确定构成该和弦是哪几个乐音(即什么频率分量)

  • 代码:

[y,fs] = audioread('hexian1.wav');

N = length(y);L = N

FFT = fftshift(fft(y,L));Wsam = 2*pi*fs;W = (-Wsam/2+(0:L-1)*Wsam/L)/(2*pi)

figure(1);plot(W,abs(FFT));axis([-500,500,0,1500]);title('hexian1幅度谱')

plot(W,abs(FFT));axis([0,600,0,1000]);title('yueyin1幅度谱')

  • 结果:

 

  • 分析:

与乐音表对比,该和弦应该是由2、5、6乐音组成。

(2)若乐曲全音符的持续时间为0.2s, 16分音符,从理论上分析利用DFT分析其乐音构成会出现什么问题?设计实验验证一下你的判断,并给出解决问题的方案。

  • 代码:

%0.2s的16分音符

N=100;L=1024;f1=100;f2=200;f3=300;

fs=1000;ws=2*pi*fs;

T=1/fs;t=(0:(N-1))*T;

y=cos(2*pi*f1*t)+cos(2*pi*f2*t)+cos(2*pi*f3*t);

Y=fftshift(fft(y,L));w=(-ws/2+(0:L-1)*ws/L)/(2*pi);

figure(2);subplot(2,1,1);plot(w,abs(Y));

axis([-350,350,0,80]);title('矩形窗截短后幅度谱');

wh = (hann(N))';y = y.*wh;

Y2 = fftshift(fft(y,L))

subplot(2,1,2);plot(w,abs(Y2));axis([-350,350,0,50]);title('hann窗截短后频谱')

  • 结果:

 

  • 分析:

  • 代码:

[y,fs] = audioread('yueyin2.wav')

ws = 2*pi*fs;N = length(y);L = N

w = (-ws/2+(0:L-1)*ws/L)/(2*pi);Y = fftshift(fft(y,L))

plot(w,abs(Y));axis([0,2500,0,1100]);title('yueyin2频谱')

for i =1:8

   k=y((i-1)*4000+1:i*4000)

   yueyin(k,i,ws)

end

%yueyin.m

function f = yueyin(y,i,ws)

    Y =fftshift(fft(y))

    N = length(y)

    L = N

    w = (-ws/2+(0:L-1)*ws/L)/(2*pi)

    subplot(2,4,i)

    plot(w,abs(Y))

    axis([200,2100,0,1000])

    title(i)

end

  • 结果:

​​​​​​​

 

 

  • 分析:

不能直接确定各乐音的频谱组成,因为频谱不包含时间信息,不能确定各乐音的频谱构成。解决方法:将乐音信号按时间分为八小段,再对每一小段进行谱分析,得到相应的频谱如上图所示。

从上图可以得到各个乐音谐波分量,1-7(i)的频率依次呈递增趋势。


http://chatgpt.dhexx.cn/article/twwVfQyw.shtml

相关文章

Matlab中利用FFT实现信号频谱搬移

目录 Matlab中利用FFT实现信号频谱搬移只有实部的频谱搬移只有虚部的频谱搬移复函数下的频谱搬移 Matlab中利用FFT实现信号频谱搬移 在fft的理论中,fft的频移特性表示为: 也就是说,要想对信号f(t)实现频域的频谱搬移&…

转|周期矩形脉冲信号频谱及特点

周期矩形波信号及其频谱 如图所示信号为脉冲宽度τ,脉冲幅度A,周期为T的周期矩形脉冲信号。 上述周期矩形脉冲信号的傅里叶系数推导可参考占空比任意方波的傅里叶级数展开最终化简可得到下面的表达式。 由此式可得知,该信号频谱谱线大致按照…

用Matlab求余弦信号的频谱

如果你是电子信息类专业的学生,一定对频谱这个词听过无数次了,当然求频谱的方法之一就是可以采取快速傅里叶的方法,今天来给大家介绍一种用Matlab对余弦信号求频谱的实际操作。 第一步:构建原始余弦信号 Matlab代码如下&#xf…

2、信号与频谱

2.1、概述 信号传输的实质:信息传输的过程就是信号变换和处理的过程。如何观察信息传输过程中信号发生了什么变化? 一种方法是在时域 观察信号波形的变化,另一种方法是在频域观察信号频谱的变化。最常见的基本信号:正弦信号。 2…

matlab画信号频谱

为了让大学生活充实一点,多学点东西,我选修了《数字信号处理》。现在充实得不要不要的。 clc close all clear%参数设置% Fs 1000; % Sampling frequency T 1/Fs; % Sampling period L 1500; …

利用DFT分析信号频谱【信号与系统二】

利用DFT分析信号频谱 1. 利用FFT分析信号频谱2. 产生一个淹没在噪声中的信号x(t),分析信号的频谱3. 利用有限项分析三角波信号4. 利用频域分析方法,重新对第一次实验时的含噪信号进行滤波处理5. 通过频谱分析,识别电话拨号音的电话号码6. 试着…

信号与系统(3)——周期矩形脉冲信号频谱及特点

周期矩形脉冲 如图所示信号为脉冲宽度τ,脉冲幅度A,周期为T的周期矩形脉冲信号。 傅里叶变换推导 上述周期矩形脉冲信号的傅里叶系数推导方式如下: 由此式可得知,该信号频谱谱线大致按照采样函数(Sa(t))…

冲激信号的卷积性质采样信号频谱的周期性延拓

文章目录 1. 冲激信号的卷积2. 性质:3. 仿真验证: 1. 冲激信号的卷积 由冲激信号的卷积性质可知:冲激信号具有显像性。 任何信号对单位冲激函数的卷积等于该信号本身,那么单位冲激函数就相当于是一种“显像”信号,当冲激函数对冲激…

Matlab使用fft画出信号频谱(详细注释)

做雷原作业,需要对信号进行频谱分析,网上一搜太乱了,很多不是我想要的,特此整理。 DSP还没学到fft,就不对fft原理进行详细解释了,直接上代码。 fs500;%采样率 f15;%信号频率 f210;%信号频率 T1;%时宽1s nr…

连续信号频域分析:功率信号的频谱与能量信号频谱密度

频域分析: 周期信号非周期信号频谱(离散)频谱密度(也称频谱,连续)功率谱密度能量谱密度 周期信号and非周期信号幅度谱都是偶函数。 一、功率(周期)信号的频谱 认为周期信号为功率信号、非周期信号为能量 信号 1.1周期信号的虚指数/三角傅里…

FFT_频谱分析(数字信号处理)

~~ 如果有什么问题可以在我的个人博客留言 ,我会及时回复。欢迎来访交流 ~~ FFT_频谱分析(数字信号处理) (一)实验原理 用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时…

数字信号处理(matlab)——FFT对信号频谱分析

FFT频谱分析法 频谱分辨率D FFT能够实现的频率分辨率是2pi/N 要求2pi/N≤D 误差主要来自于用FFT做频谱分析时,得到的是离散谱,但是信号是连续谱,只有当N较大时,离散谱的包络才能逼近离散谱,因此N要大一些。 为了方便读…

matlab信号频谱分析FFT详解

前言 做OFDM通信少不了频谱分析,基带信号DA后的频谱,以及基带数字上变频后的DA信号都要频谱分析。我觉得其实做任何工程都是这样,先规定实施方案,然后仿真成功,再实际开发,不过也可以一边开发,…

信号与频谱

身为一名通信专业出生的我,居然淡忘了信号的基本知识,今天带大家回顾一下,通俗易懂。 信号(singal)简介 我们在生活中经常遇到信号。比如说,股票的走势图,心跳的脉冲图等等。在通信领域,无论是的GPS、手机…

【信号与系统】笔记(3-2)信号的频谱与傅里叶变换(一图看懂傅里叶变换)

Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性! 文章目录 一图看懂傅里叶变换前言一、周期信号的频谱1、周期信号频谱的相关概念2、周期信号频谱的特点3、谱线的结构与波形参数的关系 二、非周期信号的频谱…

信号频谱

2019独角兽企业重金招聘Python工程师标准>>> 频谱是指一个时域的信号在频域下的表示方式,可以针对信号进行傅里叶变换而得,所得的结果会是以分别以幅度及相位为纵轴,频率为横轴的两张图,不过有时也会省略相位的信息&am…

晋南讲堂之持久层框架ORM简介

1. 什么是ORM? ORM全称 Object/Relation Mapping,即对象/关系映射,它完成了面向对象语言到关系型数据库的映射,作用是把对持久化对象(POJO,Plain Old Java Object)的保存、修改、删除等操作转换成对数据库的操作,是两者…

持久层框架的比较Hibernate与 MyBatis 胡俊铭

最近网上 看到很多人质疑....现在好多Web项目用了MyBatis,没感觉MyBatis好到哪里了,从开发效率上讲,不管是Hibernate的反向工程,还是自动建表,关联映射都比MyBatis方便得多。难道仅仅是因为运行速度,Hibernate也有缓存啊。或者,二者适用场合不同,再或者,MyBatis就是比…

一起来学SpringBoot(七)持久层框架

springboot具有非常棒的持久层框架支持,下面我将介绍我用过的三种持久层框架进行简述使用。 由于这里操作的都是一张表,这里贴出通用的yml和建表语句 切记这里使用的是mysql8 ,5.8之前的朋友请修改后缀去掉com.mysql.cj.jdbc.Driver 中的cj。…

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Obje…