logo资料库

音频信号分析与处理.pdf

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
实验三 音频信号的分析与处理 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 第 1 页,共 2 页 % 音频信号分析与处理 % 作者:长春理工大学电信学院 张圆星 %% 打开和读取音频文件 clear all; % 清除工作区缓存 [y, Fs] = audioread('jyly.wav'); % 读取音频文件 VoiceWav = y(300000 : 400000, 1); % 截取音频中的一段波形 clear y; % 清除缓存 hAudio = audioplayer(VoiceWav, Fs); % 将音频文件载入audioplayer SampleRate = 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);
14-5-9 下午7:42E:\MATLAB 文档\信号与系统\实验三...\audio.m 第 2 页,共 2 页 %% 设计RC滤波系统(二阶有源低通滤波器) w = f; Wc = 3000; % wc = 1/(RC),特征角频率 A0 = 1; % A0 = AVF < 3 Q = 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); % 将音频文件载入audioplayer play(hAudio); % 播放添加噪声后的声音 %% 结束
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 第 2 页,共 2 页 %% 判断绘图 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 %% 结束
) ( V 值 幅 音频时域波形图 0.5 1 时间(s) 单声道频谱振幅 1.5 2 0.5 0 -0.5 0 0.04 0.03 | ) f ( Y | 0.02 0.01 0 0 0.5 1 1.5 2 Frequency (Hz) 2.5 x 104
1 0.5 0 -0.5 -1 0 1 0.8 0.6 0.4 0.2 0 0 | ) f ( Y | 100KHz噪声信号 0.005 0.01 0.015 0.02 0.025 音乐和噪声频谱 0.5 1 1.5 2 Frequency (Hz) 2.5 x 104
c W w / 1.2 1 0.8 0.6 0.4 0.2 0 -0.2 0 0.04 0.03 c W w / 0.02 0.01 0 0 二阶有源低通滤波器 0.5 1 1.5 2 2.5 3 3.5 4 频率 滤波以后的频谱 4.5 x 104 0.5 1 1.5 2 频率 2.5 x 104
分享到:
收藏