作业在这里存一下,需要代码的拿去用,应该写的挺清楚了。

实验要求

  1. 在Matlab软件平台,利用函数wavrecord函数录制一段语音,采样频率fs=10000Hz,长度为5s。用sound函数播放声音。用wavread对语音信号进行采样,记住采样频率和采样点数。  或者在Python环境下,利用Pyaudio语音处理包实现录音。

  2. 语音信号的频谱分析

    首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到语音信号的频谱特性 。

  3. 加入单频噪声

    原始的语音信号加上一个高频余弦噪声,频率为4kHz。画出加噪后的语音信号时域和频谱图,与原始信号对比,可以很明显的看出区别。

  4. 加入高斯白噪声

    调用matlab的randn函数生成高斯分布的白噪声,将产生的高斯白噪声叠加在录制的语音信号上。画出加噪后的语音信号时域和频谱图,与原始信号对比,可以很明显的看出区别。

  5. 比较加噪前后语音信号的波形及频谱

    在一个窗口同时画出加噪前后的波形及频谱。

  6. 回放语音信号

    在Matlab中,函数sound可以对声音进行回放。感觉加噪前后的声音有变化。或者利用Python的工具回放加噪的声音 。

代码及结果

  1. 语音信号采样

使用audiorecorder进行采样,采样频率Fs=10000Hz,采样时常t=5s,使用audiowrite将声轨保存。

Fs=10000; %采样频率
t=5; %采样时长
% 采集音频
recObj = audiorecorder(Fs,8,1);
disp('Start speaking.')
recordblocking(recObj, 2);
disp('End of Recording.');
% 获取录音数据
myRecording = getaudiodata(recObj);
% 播放声轨
sound(myRecording,Fs);
% 绘制录音数据波形
plot(myRecording);
%存储语音信号
filename = 'wave.wav';
audiowrite(filename,myRecording,Fs);
  1. 语音信号的频谱分析
clear;clc;
%读取信号
[origin_signal,fs] = audioread('wave.wav');  %读取音频文件,pyr为信号,fs为采样频率
t = length(origin_signal)/fs; %计算音频长度
sample_points=[1/fs:1/fs:t]; %计算采样点横坐标
freq_signal=fft(origin_signal); %计算频谱信号
freq_signal=fftshift(freq_signal); %频谱搬迁
%绘制原始信号时域波形
subplot(211);
plot(sample_points,origin_signal);
title('Time domain')
xlabel('Time/s');
ylabel('Amplitude');
%绘制原始信号时域波形
subplot(212);
plot([-fs:1:fs-1]/2,abs(freq_signal));
title('Frequency domain')
xlabel('Frequency/Hz');
ylabel('Amplitude');

结果如图所示:

  1. 加入单频噪声

    加入了一个振幅0.2,频率为4000Hz的余弦信号,可以观察到时域中叠加了一个高频余弦信号,幅度谱中在±4000Hz处有明显的频率分量。

clear;clc;
%读取信号
[origin_signal,fs] = audioread('wave.wav');  %读取音频文件,pyr为信号,fs为采样频率
t = length(origin_signal)/fs; %计算音频长度
sample_points=[1/fs:1/fs:t]; %计算采样点横坐标
%加入单频噪声
cos_fs=4000; %余弦信号频率
cos_noise=0.01*cos(2*pi*cos_fs*sample_points);%添加振幅0.01余弦信号
cos_noise=cos_noise';
signal_with_cos_noise=origin_signal+cos_noise; %叠加噪声
sound(signal_with_cos_noise,fs); %播放,有刺耳蜂鸣
freq_signal=fft(signal_with_cos_noise); %计算频谱信号
freq_signal=fftshift(freq_signal); %频谱搬迁
%绘制信号时域波形
subplot(211);
plot(sample_points,signal_with_cos_noise);
title('Time domain')
xlabel('Time/s');
ylabel('Amplitude');
%绘制信号时域波形
subplot(212);
plot([-fs/2:1/t:fs/2-1/t],abs(freq_signal));
title('Frequency domain')
xlabel('Frequency/Hz');
ylabel('Amplitude');

结果如图所示:

  1. 加入高斯白噪声

    加入了信噪比为10比1的高斯白噪声,可以观察到时域上出现了嘈杂的噪声信号,频谱上每个频率分量都有所增加。

clear;clc;
%读取信号
[origin_signal,fs] = audioread('wave.wav');  %读取音频文件,pyr为信号,fs为采样频率
t = length(origin_signal)/fs; %计算音频长度
sample_points=[1/fs:1/fs:t]; %计算采样点横坐标
%加入高斯白噪声
[signal_with_gauss_noise,noise]=noisegen(origin_signal,10); %添加十比一信噪比的高斯白噪声
sound(signal_with_gauss_noise,fs); %播放,声音嘈杂
freq_signal=fft(signal_with_gauss_noise); %计算频谱信号
freq_signal=fftshift(freq_signal); %频谱搬迁
%绘制信号时域波形
subplot(211);
plot(sample_points,signal_with_gauss_noise);
title('Time domain')
xlabel('Time/s');
ylabel('Amplitude');
%绘制信号时域波形
subplot(212);
plot([-fs/2:1/t:fs/2-1/t],abs(freq_signal));
title('Frequency domain')
xlabel('Frequency/Hz');
ylabel('Amplitude');

  1. 比较加噪前后语音信号的波形及频谱

可以从结果中看到,绿色信号添加了高频余弦信号,表现出很多高频周期信的噪声,频谱中明显观察到在±4000Hz处有两个尖峰。红色信号为高斯白噪声,看上去嘈杂无规律,在频谱中增加了每个频率分量的成分。原信号使用蓝色,由于颜色被覆盖看不清楚,在放大后可看到细节。

clear;clc;
%读取信号
[origin_signal,fs] = audioread('wave.wav');  %读取音频文件,pyr为信号,fs为采样频率
t = length(origin_signal)/fs; %计算音频长度
sample_points=[1/fs:1/fs:t]; %计算采样点横坐标
freq_signal=fft(origin_signal); %计算频谱信号
freq_signal=fftshift(freq_signal); %频谱搬迁%加入单频噪声
cos_fs=4000; %余弦信号频率
cos_noise=0.01*cos(2*pi*cos_fs*sample_points);%添加振幅0.01余弦信号
cos_noise=cos_noise';
signal_with_cos_noise=origin_signal+cos_noise; %叠加噪声
freq_signal_cos=fft(signal_with_cos_noise); %计算频谱信号
freq_signal_cos=fftshift(freq_signal_cos); %频谱搬迁%加入高斯白噪声
[signal_with_gauss_noise,noise]=noisegen(origin_signal,20); %添加十比一信噪比的高斯白噪声
freq_signal_gauss=fft(signal_with_gauss_noise); %计算频谱
freq_signal_gauss=fftshift(freq_signal_gauss); %频谱搬迁
%绘制原始信号时域波形
subplot(211);
title('Time domain')
xlabel('Time/s');
ylabel('Amplitude');
plot(sample_points,origin_signal,'b');
hold on;
plot(sample_points,signal_with_cos_noise,'g');
hold on;
plot(sample_points,signal_with_gauss_noise,'r');
hold on;
%绘制原始信号时域波形
subplot(212);
title('Frequency domain')
xlabel('Frequency/Hz');
ylabel('Amplitude');
plot([-fs/2:1/t:fs/2-1/t],abs(freq_signal),'b');
hold on;
plot([-fs/2:1/t:fs/2-1/t],abs(freq_signal_cos),'g');
hold on;
plot([-fs/2:1/t:fs/2-1/t],abs(freq_signal_gauss),'r');
hold on;

结果如图所示:

总体:

细节:

  1. 回放语音信号
sound(origin_signal,fs); %播放原声轨
sound(signal_with_cos_noise,fs); %播放带有高频余弦信号的声轨
sound(signal_with_gauss_noise,fs); %播放带有高斯白噪声的声轨

加入高频余弦信号后,除了本身的录音外,还有非常刺耳的蜂鸣声。

加入高斯白噪声后,声音变得嘈杂,降低信噪比至一定程度后,原本的声轨靠人耳就难以分别了。

FFT频谱分析(matlab代码)相关推荐

  1. 时域波形分析和频谱分析matlab代码

    1 简介 基于Matlab软件平台研究了不同的数字滤波器对污染的语音信号的去噪效果.对比了加入噪声前后的语音信号的时域与频域图.仿真实验结果表明:4种滤波器中切比雪夫I型滤波器对加入噪声后的语音信号的 ...

  2. matlab fft谱分析实验报告,基于matlab的fft频谱分析及应用实验报告.docx

    基于matlab的fft频谱分析及应用实验报告 实验三用FFT对信号进行频谱分析 一实验目的 1能够熟练掌握快速离散傅立叶变换的原理及应用FFT进行频谱分析的基本方法:2了解用FFT进行频谱分析可能出 ...

  3. 如何优雅地进行频谱分析—— 一行代码实现绘制MATLAB频谱、功率谱图

    之前的文章里讲了关于信号频谱.能量谱的相关理论和MATLAB编程实现方法: Mr.看海:信号频域分析方法的理解(频谱.能量谱.功率谱.倒频谱.小波分析) Mr.看海:频域特征值提取的MATLAB代码实 ...

  4. matlab函数 无限冲激响应滤波器,MATLAB代码 有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器...

    MATLAB有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器设计 附MATLAB代码 摘要 文章设计了一个数字信号处理仿真实验,产生一个信号,其频率成分为f1和f2,并对其进行理想采样,采样 ...

  5. matlab白噪声频谱分析,matlab软件进行光谱频谱分析的方法

    在MATLAB软件平台进行频谱分析并对所采集的语音信号加入干扰噪... clear allx=0:2*pi/100:2*pi; y=sin(2*pi*5*x)+0.2*randn(1,101); yy ...

  6. matlab加速度转化为位移,加速度转换成位移的matlab代码及说明

    加速度转换成位移的matlab代码及说明 由测量的加速度离散数据数据转化成位移数据一般不直接在时域进行积分处理,而是由时域转换成频域在频域中进行二次积分再转化到时域中得到位移结果. 相关matlab处 ...

  7. emd,eemd,vmd,频谱图,分解图对比matlab代码

    作为自己学习的一个记录吧. 对这个信号进行实验,其中公式是截图截的,懒得改了,f1就是s1. 对这个s信号进行分解.下面开始代码操作: 原始信号生成:运行该段代码,生成一个s.mat数据,并作图. c ...

  8. ASK调制的matlab代码

    记录一个完整ASK调制过程的matlab代码. %E5_1_AskMod.m function [ASK2,ASK2_filter,ASK4,ASK4_filter]=E5_1_AskMod(Len, ...

  9. SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)

    合成孔径雷达发射信号以线性调频信号(LFM)为基础,目前大部分合成孔径雷达都是LFM体制,为了减轻雷达重量也采用线性调频连续波(FMCW)体制:为了获得大带宽亦采用线性调频步进频(FMSF)体制. ( ...

最新文章

  1. 公司成立两周年感言_对我的副项目成立一周年的一些反思
  2. 你的微服务敢独立交付么?
  3. 20以内混合加减法100题_一年级数学20以内加减法混合运算练习题,寒假练习巩固!...
  4. PPT 下载 | 神策数据算法专家:推荐系统的实践与思考(上)
  5. Java进阶高级程序员必备:深入浅出springboot+深入Java虚拟机
  6. 1.9编程基础之顺序查找 05 最大值和最小值的差
  7. 社交电商为什么这么火
  8. Alex 的 Hadoop 菜鸟教程: 第7课 Hbase 使用教程
  9. arduino雨滴传感器和舵机控制
  10. matlab cic设计,CIC滤波器设计
  11. 国内遥感卫星资源综述
  12. 无线通信设备安装工程概预算编制_祁东设备安装工程施工承包-设计安装_天霖工程...
  13. matlab 蜗杆轮廓,基于MATLAB的直廓环面蜗杆的可视化
  14. 天地图矢量数据下载_关于离线地图数据的下载、更新以及删除的方法
  15. 三维点云预处理之点云去噪
  16. 我要偷偷的学Python,然后惊呆所有人(第四天)
  17. 使用注册表关闭Windows 10 Defender
  18. 华为机试题:求偶数个复数的平均值
  19. SQL Server数据分析面试题(202008)
  20. 信捷PLC的C语言程序写法例子

热门文章

  1. STM32连接机智云(踩雷日记)
  2. 犹抱琵琶半遮面--探究直播系统源码的真面目
  3. python时间格式化_python格式化时间
  4. 非标框架(5)-轴参数类
  5. 36进制--Java
  6. R语言入门——数据读写
  7. 基于JavaWEB+MySQL的二手闲置物品交易网站系统
  8. 坪山计算机学院,深圳电脑培训、坪山办公文员Office办公速成培训
  9. 【PS素材】手绘浪漫水彩花卉英文字母设计素材
  10. IMEI码查询[*#06#-手机串号查询]--你的手机到底是翻新机还是正品行货