使用matlab进行回声处理(三重回声)-数字信号处理课设

这篇具有很好参考价值的文章主要介绍了使用matlab进行回声处理(三重回声)-数字信号处理课设。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一、系统设计要求

1.录制一段声音信号,作为原音频信号,生成频域与时域图形,观察与分析其时域 与频域图形。

2.对该音频信号进行时域处理,并且实现对该声音信号添加第一层回声。

3.对该音频信号再继续一次进行时域处理,实现对该声音信号添加第二层回声。

4.将三段音频信号进行合成,比较该声音信号与原音频信号时域和频域的差别, 保存合成的音频。

5.对该声音信号进行时域或者频域处理,消除该添加回声的语音信号的回声。

6.比较原始声音信号与去除回声后的声音信号的频域和时域差别,并通过人耳辨 别原音频,加入回声的音频和去除回声的音频三段音频的区别。

二、系统设计方案

getaudiodata函数,matlab,信号处理,开发语言,音频

第一步:用 getaudiodata()函数录制一段音频生成并观察其时域和频域图形,再对其 时域频域进行处理。

第二步:添加回声。通过补零矩阵增加回声,且分别将原音频分别进行衰减系数为 0.6 倍和 0.4 倍的缩放,而后将三段音频结合在一起,使得得到音频有一层原声,两层 回声,且从原声到回声一层比一层音量小,得到处理后的声音信号就是有回声的声音 信号,绘制并观察有回声的声音信号的频域时域图形。

第三步:通过 z 域分析得到转换公式,对修改后声音信号时域进行处理。将添加的 回声消除,得到消除回声音频,再次绘制并观察新的声音信号的时域频域图形。

第四步:将三个时域频域图形进行对比,并把三段音频分别播放,用人耳进行区分 其差距

 三、代码实现

1.录制音频代码:

%%%录制音频
clear all
clc
fs=44100;
music=audiorecorder(fs,16,1);
disp('请输入空格并回车开始采集原始信号')
in=input('');
%创建一个保存音频信息的对象,它包含采样率,时间和录制的音频信息等等。
%44100表示采样为44100Hz
%16为用16bits存储,2为两通道即立体声(也可以改为1即单声道)。
recordblocking(music,7);
%开始录制,此时对着麦克风说话即可,录制时间为7秒。
myspeech=getaudiodata(music,'int16');
%得到数字矩阵存储的刚录制的音频信号。
plot(myspeech);
%% save file
filename='myspeech.wav';
audiowrite(filename,myspeech,fs);

2.对录制音频进行采集处理:

%%%%对音频采集处理
clear
[x,fs] = audioread('myspeech.wav');%音乐信号
%输出频率
fs
%音乐语音信号分声道处理
x1=x(:,1);

3.画出录制音频信号时域频域波形图

%画音乐信号时域图
n1=length(x1);%length取音乐数列长度即元素个数
figure(1);
subplot(2,1,1);
t1=(0:(n1-1))/fs;
plot(t1,x1);
axis([0,5,-1,1]);%%设置坐标轴范围
xlabel('时间t');
ylabel('幅度');
title('原音频音乐信号时域波形');
X1=fft(x1,n1);
subplot(2,1,2);
f3=0:fs/n1:fs*(n1-1)/n1;
plot(f3,abs(X1));
axis([0,44100,0,6000]);
xlabel('频率f');
ylabel('幅度');
title('原音频音乐信号频谱波形');

getaudiodata函数,matlab,信号处理,开发语言,音频

 

4.增加回音(这里我加了两重回音)

% %音乐信号的回音
x11=x1;%截取部分
x11=x11';%因为输出为一列所以要转置成一行
geshu=length(x11);
N2 = 20000;
int0=zeros(1,N2);%1行20000列的零矩阵
temp1=[x11,int0,int0];%原始声音
temp2=[int0,0.6*x11,int0];%第一层的回声是原始0.6倍
temp3=[int0,int0,0.4*x11];%第二层的回声是原始0.4倍
hui=temp1+temp2+temp3;%三重声音相加实现回声
N=length(hui);  %回音序列的长度
% sound(hui,fs);%播放回音音乐

5.画出回声波形,并保存回声为音频文件

%%%画回声波形
figure(2);
subplot(2,1,1);
t1=(0:(N-1))/fs;
plot(t1,hui);
axis([0,4.5,-1,1]);
xlabel('时间');
ylabel('幅度');
title('音频回声信号时域波形');
X2=fft(hui,N);
subplot(2,1,2);
f3=0:fs/N:fs*(N-1)/N;
plot(f3,abs(X2));
axis([0,44100,0,6000]);
xlabel('频率f');
ylabel('幅度');
title('音频回声信号频谱波形');
audiowrite('音频回声.wav',hui,fs);%保存回声整体为声音文件

getaudiodata函数,matlab,信号处理,开发语言,音频

 

6.消除回声

%%消除回声
% N = 20000;
chang=N2+geshu;
L = length(hui);
y = zeros(1, L);%与回声长度相同的零序列
for  k = 1:L
    if  k>N2 && k<=chang              %%%消除第一层回声
        y(k) = hui(k) - 0.6*x11(k-N2);
   else
        y(k) = hui(k);
    end
    if k>2*N2                      %%%消除第二层回声
        y(k)=y(k)-0.4*x11(k-2*N2);
    end
end
N3 = length(y);
audiowrite('消除回声.wav',y,fs);%%保存为消除回声音频文件

四、展望

       本项目在日后的学习中,应对其进行用户体验感以及完善其功能的更新,设计 GUI 界面使得整个系统操作更加便捷,采用多线程的方式进行编程,增加整个系统能够完 成的功能,后续将更新出既能导入本身存在的音频,又可以重新录制音频进行增加回 声,消除回声以及绘制相关音频信号的时域频域波形图的功能,同时可以设定相关的 回声信号衰减系数,自定义的完成回声信号的添加使用,并将这些功能在 GUI 界面上 体现出来,使得用户体验感更好,操作更加便捷,将项目发挥的更好。文章来源地址https://www.toymoban.com/news/detail-778773.html

到了这里,关于使用matlab进行回声处理(三重回声)-数字信号处理课设的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数字信号处理】带通采样定理及其MATLAB仿真

    按照奈奎斯特采样定理(低通采样),采样频率 f s f_{s} f s ​ 要大于等于信号中最高频率 f m a x f_{max} f ma x ​ 的2倍,才可以保证采样后的数字信号通过DAC转换后,可以无失真的恢复为原信号。然而,如果信号的频率分布在某一有限频带上,并且信号的最高频率 f m a x f_{max} f

    2024年02月16日
    浏览(49)
  • 【数字化处理】仿生假体控制中肌电信号的数字化处理研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 文献

    2024年02月12日
    浏览(45)
  • 数字信号处理实验---LSI系统的分析 Matlab代码

    1.试用Matlab计算其幅频特性和相频特性,并绘图。 代码: n = 0:10; %定义采样点n w = [0:1:500]*2*pi/500; % [0,pi]轴被分成1002个点 x1 = power(0.9*exp(1i*pi/3),n); %定义输入序列 x2 = exp(-1i*n); %定义一个系统的冲激响应 x = zeros(1,length(w)); %定义空数组存储系统的频域响应 for i=1:length(x1)     x=x

    2024年01月15日
    浏览(46)
  • 信号处理之FIR数字滤波器(Matlab仿真)

            数字滤波器的作用是滤除不感兴趣的信号,留下想要的信号。数字滤波器可分为无限脉冲响应(IIR)数字滤波器、有限脉冲响应(FIR)数字滤波器两种,两者各有优缺点,其中FIR数字滤波器因其具有良好的线性相位特性受到广泛应用,线性相位是指信号中各频率成分的相对

    2024年02月03日
    浏览(51)
  • matlab数字信号处理实验(5)时域采样与频域采样

    一、实验目的 1、理解时域采样理论与频域采样理论; 2、掌握模拟信号采样前后频谱的变化,以及如何选择采样频率才能使采样后的信号 不丢失信息; 3、掌握频率域采样会引起时域周期化的原因,频率域采样定理及其对频域采样点数 选择的指导作用; 4、对信号在某个表示

    2024年02月07日
    浏览(44)
  • 数字信号处理-10-并行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并进行了仿真验证。 FIR滤波器的结构形式时,介绍了直接型、级联型、频率取样型和快速卷积型4种。在FPGA实现时,最常用的是最

    2023年04月09日
    浏览(49)
  • 数字信号处理篇之浮点数与定点数的转换(MATLAB)

      对于计算机等数字信号处理器件,数字和信号变量都是用二进制进行表示的。在本文中,我们学习了定点数的概念、浮点数与定点数的转换以及在MATLABZ中实现浮点数与定点数的转换。   对于二进制数,大家应该都很熟悉,在学习数电的过程中,我们知道,十进制转二

    2024年02月11日
    浏览(60)
  • 数字信号处理实验---Z变换及系统的零极点分析 Matlab代码

    一.各种函数的用法 1.tf2zp函数:通常用于将传递函数(Transfer Function)转换为零极增益形式(ZPK form),转换前G(s) = num(s) / den(s),转换后G(s) = K * (s - z1) * (s - z2) * ... * (s - zn) / (s - p1) * (s - p2) * ... * (s - pn) 2.zp2tf函数:用于将零极增益形式(ZPK form)转换为传递函数(Transfer Fu

    2024年01月23日
    浏览(50)
  • 数字信号处理音频FIR去噪滤波器(基于MATLAB GUI的开发)

    利用MATLAB GUI设计平台,用窗函数法设计FIR数字滤波器,对所给出的含有噪声的声音信号进行数字滤波处理,得到降噪的声音信号,进行时域频域分析,同时分析不同窗函数的效果。将文件解压至一个目录下,运行m文件即可使用。 读取.wav音频文件函数 :audioread();(老版

    2024年02月08日
    浏览(55)
  • 现代信号处理实验:MATLAB实现LD算法进行AR估计

    利用给定的一组样本数据估计一个平稳随机信号的功率谱密度称为功率谱估计,又称谱估计。谱估计的方法可以分成经典谱估计和现代谱估计。 经典谱估计又称为非参数化的谱估计,分为直接法和间接法。直接法是指直接计算样本数据的傅里叶变换,即获取频谱,然后计算频

    2024年02月03日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包