基于MATLAB语音信号处理去噪毕业设计(含源文)

基于MATLAB对语音信号的处理

自己录制一段语音或音乐信号,进行傅里叶变换,用通频带小于信号带宽的带通滤波器去除高频和低频,然后将滤波后的信号进行时域恢复,比较与原声在时域上有何差别。

回答六个问题:

  1. 使用的信号处理软件是 ?
  2. 语音信号的时域波形(截屏贴图)?
  3. 语音信号的频谱(截屏贴图),并说明语音信号的频带范围是多少 ?
  4. 带通滤波器的通频带(频谱)(截屏贴图),并说明通频带是多少 ?
  5. 输出信号的频谱(截屏贴图),并说明输出信号的频带范围是多少 ?
  6. 输出信号的时域波形(截屏贴图),并说明和最初的时域波形相比有什么变化,为什么 ?

我的回答

因为我信号与系统的课基本都是自己跟着mooc学的, 所以在布置上机作业的时候有点懵, 全程都是翻阅网上相关资料. 现将我的思路汇总一下.

应该用什么软件?

这个问题我问了ChatGPT, 它是这样说的.

问: 如果我想自己录制一段语音或音乐信号,进行傅里叶变换,用通频带小于信号带宽的带通滤波器去除高频和低频,然后将滤波后的信号进行时域恢复,比较与原声在时域上有何差别。应该用哪个信号处理软件?

答:

您可以使用许多不同的信号处理软件来完成这个任务,其中一些是免费的,而其他一些则需要购买许可证。
以下是一些常用的信号处理软件:
MATLAB:MATLAB是一种广泛使用的数学软件,它具有强大的信号处理功能,包括傅里叶变换、滤波器设计和时域重建等。MATLAB还有许多开源的信号处理工具箱,可以方便地完成各种信号处理任务。
GNU Octave:GNU Octave是一个免费的、开源的MATLAB兼容软件,它也具有强大的信号处理功能,包括傅里叶变换、滤波器设计和时域重建等。
Python:Python是一种流行的编程语言,具有广泛的信号处理库,如NumPy、SciPy和matplotlib。这些库提供了许多信号处理功能,包括傅里叶变换、滤波器设计和时域重建等。
Audacity:Audacity是一种免费的、开源的音频编辑软件,具有许多信号处理功能,包括傅里叶变换、滤波器设计和时域重建等。Audacity还具有用户友好的界面和易于使用的工具,可以方便地完成许多不同的音频处理任务。
无论您选择哪种软件,都应该具备实现您所需的信号处理功能所必需的工具和库。同时,您还需要了解信号处理的基础知识和技能,才能有效地完成这个任务。

因为只对MATLAB有基础, 所以我选择MATLAB来解决这个问题,在这里我不禁要感叹, MATLAB真的是什么都能干, 除了生孩子.

通过查CSDN和MATLAB官方文档,我差不多搞清楚了具体是用什么函数和函数的具体用法. 我用到了以下有关于本题的函数, 具体的用法还需要大家去自行查阅.

  • audioread //读取本机的音频文件, **但不一定是wav文件, 我使用的是flac后缀文件
  • soundsc //播放音频的函数
  • fft //快速傅里叶变换 , **但是我不懂所谓"快速"傅里叶变换和傅里叶变换两者之间的区别
  • 工具箱命令: fdatool //用来生成滤波器的, **好像是很新手的方法, 大佬都是自己写(?

参考文献

MATLAB音频信号处理(一):函数简易用法(audioread,sound函数)

Matlab 音频信号处理_matlab音频​编辑

什么是带通滤波器, 带通滤波器通频带是什么?

简单来说, 带通滤波器是让信号的某个频率区间的信号分量通过, 而其他频率的信号就被过滤了. 所以对带通滤波器来说就有一个能通过的最大频率( fH )和能通过的最小频率( fL ). 事实上我们观察带通滤波器的函数, 在 fH 和 fL 之外的信号并不是全为零, 还有个很小的区间是有值的. 这个我们在MATLAB中会用到.

参考文献我们需要从模电的角度去理解通频带, 滤波器的本质其实就是一个电路, 这个电路中存在着记忆元件, 那必然会有自身的性质, 这个自身的性质就包括了"通过滤波器的最大振幅". 类似于RLC电路的最大谐振频率.

如何用MATLAB写出自己想要的滤波器代码?

语音信号的时域波形如下图中第一张图所示.

语音信号的频带范围约为 0-22.0kHz,

输出信号的频带范围约为 0-22.0kHz 绝大部分集中在7.28-13.8kHz, 输出信号的频谱如下图中第四张图所示.

与最初的时域波形相比, 歌曲的绝大部分都被滤波掉了, 这是因为这首歌主要在低频区, 在滤波的过程中给滤掉了.但是歌曲只保留了第二, 三, 四, 八, 九节拍. 这是因为这些节拍中有相当一部分中频的音乐. 从而经过滤波之后仍有保留.输出信号的时域波形如下图中的第三张图所示.

结果可视化

滤波器通频带约为8.99-12.3kHz(最大幅度约为11.4kHz)

滤波器通频带

本文到此结束, 希望能帮到你.

思考了一下还是把源码贴出来, 希望能换取大家的赞同或者是喜欢, 这对我真的是很大的鼓励.

%% MATLAB对语音信号处理%采集音乐信号Fs = 44100;                    %采样频率, 我选择与后续中的fs保持一致samples1 = [1,10*Fs];          %仅对歌曲的前十秒进行采样[audio_data, fs] = audioread('Untitled.flac',samples1);L = length(audio_data);

% 听一听该音频% soundsc(audio_data, fs);% 从一个工科软件中听到自己最喜欢的音乐,真的有点感动.

%绘制时域图figure('Name','Original');tt = (1 : L) * 1/fs;         %时间(纵坐标)subplot(4, 1, 1);plot(tt, audio_data);grid;title('时域图');xlabel('时间(s)');ylabel('Amp');

%频域分析L = 2^nextpow2(L); % 先从原始信号长度确定下一个 2 次幂的新长度,用尾随零填充信号以改善 fft 的性能Spectrum = fft(audio_data,L); % 快速傅里叶变换,转换为频域f_x = fs*(0:(L/2))/L; % 定义频域,即变换横坐标量纲为频率mag_FFT_audio_data = abs(Spectrum / L); % 取幅值,并归一化

subplot(4, 1, 2);plot(f_x,mag_FFT_audio_data(1 : L/2+1)) title('频域图');xlabel('频率(Hz)');ylabel('mag');

% 带通滤波器  (由fdatool生成)Fstop1 = 7200;            % First Stopband FrequencyFpass1 = 9600;            % First Passband FrequencyFpass2 = 12000;           % Second Passband FrequencyFstop2 = 14400;           % Second Stopband FrequencyDstop1 = 0.001;           % First Stopband AttenuationDpass  = 0.057501127785;  % Passband RippleDstop2 = 0.0001;          % Second Stopband Attenuationdens   = 20;              % Density Factor

% Calculate the order from the parameters using FIRPMORD.[N, Fo, Ao, W] = firpmord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 1 ...

                          0], [Dstop1 Dpass Dstop2]);

% Calculate the coefficients using the FIRPM function.b  = firpm(N, Fo, Ao, W, {dens});Hd = dfilt.dffir(b);

%进行滤波filtered_audio_data = filter(Hd,audio_data);subplot(4, 1, 3);plot(tt, filtered_audio_data);grid;title('滤波后的时域图');xlabel('时间(s)');ylabel('Amp');

%对滤波之后的信号进行频域分析Filtered_Spectrum = fft(filtered_audio_data,L); % 快速傅里叶变换,转换为频域%f_x = fs*(0:(L/2))/L; % 定义频域,即变换横坐标量纲为频率Filtered_mag_FFT_audio_data = abs(Filtered_Spectrum / L); % 取幅值,并归一化

subplot(4, 1, 4);plot(f_x,Filtered_mag_FFT_audio_data(1 : L/2+1)) title('滤波之后频域图');xlabel('频率(Hz)');ylabel('mag');

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值