matlab gnoisegen,谱减法去噪

老师您好,这个破碎声是还有噪声的信号,noise是噪声信号,我怎么更改程序才能实现将破碎声减去噪声得到纯净的声音信号,这两个声音采样频率和时间都一样,但读取出的数据点有差别。请求老师给我指导一下。

clear all;

clc;

close all;

[xx,fs]=audioread('C:\Users\张大少爷\Desktop\破碎声.wav');  % 读入数据文件

xx=xx-mean(xx);                         % 消除直流分量

x=xx/max(abs(xx));                      % 幅值归一化

noise=audioread('C:\Users\张大少爷\Desktop\noise.wav');%噪声

signal=Gnoisegen(x,SNR);                % 叠加噪声

snr1=SNR_singlech(x,signal);            % 计算叠加噪后的信噪比

N=length(x);                            % 信号长度

time=(0:N-1)/fs;                        % 设置时间

IS=.15;                                 % 设置IS

% 调用SSBoll79m_2函数做谱减

[output,voiceseg,vosl,SF,Ef]=SSBoll79m_2(signal,fs,IS,0.12);

ol=length(output);                      % 把output补到与x等长

if ol

output=[output; zeros(N-ol,1)];

end

snr2=SNR_singlech(x,output);            % 计算谱减后的信噪比

snr=snr2-snr1;

fprintf('snr1=%5.4f   snr2=%5.4f   snr=%5.4f\n',snr1,snr2,snr);

wavplay(signal,fs);

pause(1)

wavplay(output,fs);

% 作图

subplot 311; plot(time,x,'k'); grid; axis tight;

title('纯语音波形'); ylabel('幅值')

subplot 312; plot(time,signal,'k'); grid; axis tight;

title(['带噪语音 信噪比=' num2str(SNR) 'dB']); ylabel('幅值')

subplot 313; plot(time,output,'k');grid; ylim([-1 1]);

title('谱减后波形'); ylabel('幅值'); xlabel('时间/s');

ab1c7ee18da4dfd6bd0e53ac6dfdfdba.gif

2019-6-26 23:04 上传

点击文件名下载附件

681.09 KB, 下载次数: 7

ab1c7ee18da4dfd6bd0e53ac6dfdfdba.gif

2019-6-26 23:05 上传

点击文件名下载附件

636.84 KB, 下载次数: 11

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
MATLAB中,音频谱减法去噪是一种常见的去噪方法,其中常用的方法有中值滤波法,非均匀小波变换和循环迭代噪声估计。 下面是一个使用循环迭代噪声估计(CIELAB)算法进行音频谱减法去噪的基本代码示例: 注意:这段代码仅供参考,可能需要根据实际的数据和需求进行修改。 ```matlab % 读取音频文件 [x, Fs] = audioread('input_audio.wav'); % 将音频信号从时间域转换到频域 X = fft(x); % 设定阈值 threshold = 50; % 开始循环迭代噪声估计 for i = 1:length(X)/2 % 计算当前频谱的均值和标准差 mean_spectrum = mean(abs(X(i,:))); std_spectrum = std(abs(X(i,:))); % 计算噪声的估计值 noise_estimate = mean_spectrum - threshold; % 如果噪声估计值大于0,则将其替换为0 if noise_estimate > 0 X(i,:) = X(i,:) .* (noise_estimate > threshold) .* noise_estimate; end end % 将频谱从频域转换回时域,得到去噪后的音频信号 x_denoised = ifft(X); % 播放原始音频和去噪后的音频进行对比 sound(x, Fs); % 播放原始音频 pause(length(x)/Fs + 1); % 等待一段时间让音频播放完成 sound(x_denoised, Fs); % 播放去噪后的音频 ``` 这个代码首先读取一个音频文件,然后将音频信号从时间域转换到频域。然后,它通过循环迭代噪声估计算法对频谱进行去噪处理,将大于阈值的频谱分量设置为零,将小于阈值的频谱分量视为噪声的估计值。最后,将去噪后的频谱从频域转换回时域,得到去噪后的音频信号。这段代码只是一个简单的示例,实际的音频去噪可能需要更复杂的算法和参数调整。 在使用这段代码之前,请确保你已经安装了MATLAB的信号处理工具箱。另外,请注意,音频去噪是一个复杂的问题,可能需要一些实验和调整才能获得最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值