您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页音频信号分析与处理

音频信号分析与处理

来源:华佗健康网


实验三 音频信号的分析与处理1

一、实验目的

1. 掌握音频信号的采集以及运用Matlab软件实现音频回放的方法;

2. 掌握运用Matlab实现对音频信号的时域、频谱分析方法; 3. 掌握运用Matlab设计RC滤波系统的方法;

4. 掌握运用Matlab实现对加干扰后的音频信号的进行滤波处理的方法;

5. 锻炼学生运用所学知识分析问题解决问题的能力,培养学生创新能力。 二、实验性质

设计性实验 三、实验任务 1. 音频信号的采集

音频信号的采集可以通过Windows自带的录音机也可以用专用的录制软件录制一段音频信号(尽量保证无噪音、干扰小),也可以直接复制一段音频信号,但必须保证音频信号保存为.wav的文件。

2. 音频信号的时域、频域分析

运用Matlab软件实现对音频信号的打开操作、时域分析和频域分析,并画出相应的图形(要求图形有标题),并打印在实验报告中(注意:把打印好的图形剪裁下来,粘贴到实验报告纸上)。 3. 引入干扰信号

在原有的音频信号上,叠加一个频率为100KHz的正弦波干扰信号(幅度自定,可根据音频信号的情况而定)。 4. 滤波系统的设计

运用Matlab实现RC滤波系统,要求加入干扰的音频信号经过RC滤波系统后,能够滤除100KHz的干扰信号,同时保留原有的音频信号,要求绘制出RC滤波系统的冲激响应波形,并分析其频谱。

14-5-9下午7:42E:\\MATLAB文档\\信号与系统\\实验三...\\audio.m

% 音频信号分析与处理

%% 打开和读取音频文件

clear all; % 清除工作区缓存[y, Fs] = audioread('jyly.wav'); % 读取音频文件

VoiceWav = y(300000 : 400000, 1); % 截取音频中的一段波形clear y; % 清除缓存

hAudio = audioplayer(VoiceWav, Fs); % 将音频文件载入audioplayerSampleRate = get(hAudio, 'SampleRate'); % 获取音频文件的采样率KHz

T = 1/SampleRate; % 计算每个点的时间,即采样周期SampLen = size(VoiceWav,1); % 单声道采样长度

%% 绘制时域分析图

hFig1 = figure('Units', 'normalized', 'Position', [0 0.05 0.49 0.85]);t = T: T: (SampLen* T);

subplot(2, 1, 1); % 绘制音频波形plot(t, VoiceWav); % 绘制波形title('音频时域波形图'); axis([0, 2.3, -0.5, 0.5]);

xlabel('时间(s)'); ylabel('幅值(V)'); % 显示标题

%% 傅里叶变换

subplot(2, 1, 2); % 绘制波形myfft(VoiceWav, SampleRate, 'plot'); % 傅里叶变换title('单声道频谱振幅'); % 显示标题xlabel('Frequency (Hz)');ylabel('|Y(f)|');

play(hAudio); % 播放添加噪声前的声音pause(3);

%% 引入100KHz的噪声干扰t = (0: SampLen-1)* T;

noise = sin(2 * pi * 10000 * t); % 噪声频率100Khz,幅值-1V到+1V

hFig2 = figure('Units', 'normalized', 'Position', [0.5 0.05 0.5 0.85]);subplot(2, 1, 1); % 绘制波形plot(t(1: 1000), noise(1: 1000));

title('100KHz噪声信号'); % 显示标题

noiseVoice = VoiceWav+ noise'; % 将噪声加到声音里面

hAudio = audioplayer(noiseVoice, Fs); % 将音频文件载入audioplayer

subplot(2, 1, 2); % 绘制波形[fftNoiseVoice, f] = myfft(noiseVoice, SampleRate, 'plot');title('音乐和噪声频谱'); % 显示标题

play(hAudio); % 播放添加噪声后的声音pause(3);

第 1 页,共 2 页

14-5-9下午7:42E:\\MATLAB文档\\信号与系统\\实验三...\\audio.m

%% 设计RC滤波系统(二阶有源低通滤波器)w = f;

Wc = 3000; % wc = 1/(RC),特征角频率A0 = 1; % A0 = AVF < 3Q = 1/(3 - A0); % 品质因素

H = A0* Wc^2 ./ ((j*w).^2 + Wc/Q * (j*w) + Wc^2); %二阶有源低通滤波器公式hFig3 = figure('Units', 'normalized', 'Position', [0 0.05 0.49 0.85]);subplot(2, 1, 1); % 绘制波形plot(w, H); % 显示标题title('二阶有源低通滤波器');xlabel('频率');ylabel('w/Wc');AfterFilter = fftNoiseVoice .* H'; % 滤波% AfterFilter = fftNoiseVoice;

%% 傅里叶逆变换

subplot(2, 1, 2); % 绘制波形

NFFT = 2^nextpow2(SampLen); % 根据采样求傅里叶变换的点f = SampleRate/2 * linspace(0,1,NFFT/2+1); % 计算频率显示范围plot(f, 2*abs(AfterFilter(1:NFFT/2+1))); % 绘制频域分析图title('滤波以后的频谱');xlabel('频率');ylabel('w/Wc');

clear Y H;

FilterVoice = fftshift(ifft(AfterFilter)); % 傅里叶逆变换FilterVoice = fftshift(FilterVoice);

FilterVoice = ((FilterVoice - max(max(FilterVoice)))/( max(max(FilterVoice)) ... - min(min(FilterVoice)) )) + 0.5; % 归一化clear AfterFilter w; % 清除缓存

hFig4 = figure('Units', 'normalized', 'Position', [0.5 0.05 0.5 0.85]);subplot(2, 1, 1); % 绘制右声道波形plot(t, FilterVoice(1:size(t,2), 1));title('傅里叶逆变换图');

xlabel('时间(ms)'); ylabel('幅值(V)'); % 显示标题

hAudio = audioplayer(FilterVoice, Fs); % 将音频文件载入audioplayerplay(hAudio); % 播放添加噪声后的声音

%% 结束

第 2 页,共 2 页

14-5-9下午7:43E:\\MATLAB文档\\信号与系统\\实验三...\\myfft.m

第 1 页,共 2 页

% 我的快速傅里叶变换函数

function [outFFT, Freq] = myfft(varargin)% 输入参数格式:

% 1. 需要FFT变换的向量% 2. 采样率SampleRate

% 3. 是否绘图,绘图‘plot‘,不绘图则不传递该参数% 4. 单边显示:'half',全部显示:'full'% 输出参数格式:% 1. 转换完成的向量% 2. FFT频率范围

%% 输出参数判断 switch nargin case 0 | 1,

error('Less argument in!'); case 2,

FFTVector = varargin{1}; SampleRate = varargin{2}; isplot = 0; case 3,

FFTVector = varargin{1}; SampleRate = varargin{2}; isplot = varargin{3}; plotmode = 'half'; case 4,

FFTVector = varargin{1}; SampleRate = varargin{2}; isplot = varargin{3}; plotmode = varargin{4}; otherwise

error('So many arguments in!'); end

%% FFT变换

SampLen = size(FFTVector,1); NFFT = 2^nextpow2(SampLen);

Y = fft(FFTVector, NFFT)/SampLen; f = SampleRate * linspace(0,1,NFFT);

%% 判断输出参数 if(nargout == 1) outFFT = Y;

elseif(nargout ==2) outFFT = Y; Freq = f; end

% 获取采样点

% 根据采样求傅里叶变换的点% 傅里叶变换

% 计算频率显示范围14-5-9下午7:43E:\\MATLAB文档\\信号与系统\\实验三...\\myfft.m

%% 判断绘图

if(strcmp(isplot, 'plot')) if(strcmp(plotmode, 'full'))

plot(f, abs(Y(1:NFFT))); % 绘制频域分析图 else

f = SampleRate/2 * linspace(0,1,NFFT/2+1); % 计算频率显示范围 plot(f, 2*abs(Y(1:NFFT/2+1))); % 绘制频域分析图 end

title('FFT频谱'); % 显示标题 xlabel('Frequency (Hz)'); ylabel('|Y(f)|'); end

%% 结束

第 2 页,共 2 页

音频时域波形图

0.5

幅值(V)0

-0.5

00.51

时间(s)单声道频谱振幅

1.52

0.04

0.03|Y(f)|0.02

0.01

0

00.51

Frequency (Hz)

1.522.5x 10

4

100KHz噪声信号

1

0.5

0

-0.5

-1

00.0050.010.0150.020.025

音乐和噪声频谱

10.80.60.40.20

|Y(f)|00.51

Frequency (Hz)

1.522.5x 10

4

二阶有源低通滤波器

1.210.8w/Wc0.60.40.20-0.2

0

0.5

1

1.5

2

频率滤波以后的频谱

0.04

2.5

3

3.5

4

4.5x 10

4

0.03w/Wc0.02

0.01

0

00.51

频率

1.522.5x 10

4

傅里叶逆变换图

0.5

0幅值(V)-0.5

-1

-1.5

00.51

时间(ms)

1.522.5

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务