MATLAB db4小波分解与重构,语音降噪
小波变换3级分解Mallat图:
将带噪语音作为输入信号进行逐级DWT小波分解,并将分解出的低频成分cA3cA_3cA3
与强制置零后的高频成分cD3cD_3cD3,cD2cD_2cD2,cD1cD_1cD1进行小波重构。
Demo:
clc,clear
[x,Fs]= audioread('MUsic_Test.wav');
snr = 5; %设定信噪比,单位db
noise = randn(size(x)); % 用randn函数产生高斯白噪声
Nx = length(x); % 求出信号x长
signal_power = 1/Nx*sum(x.*x); % 求出信号的平均能量
noise_power = 1/Nx*sum(noise.*noise); % 求出噪声的能量
noise_variance = signal_power / ( 10^(snr/10) ); % 计算出噪声设定的方差值
noise = sqrt(noise_variance/noise_power)*noise; % 按噪声的平均能量构成相应的白噪声
y = x + noise; % 合成带噪语音
[c,l]=wavedec(y,3,'db4');
ca3=appcoef(c,l,'db4',3)';
cd3=detcoef(c,l,3);
cd2=detcoef(c,l,2);
cd1=detcoef(c,l,1);cdd3=zeros(1,length(cd3));
cdd2=zeros(1,length(cd2));
cdd1=zeros(1,length(cd1));
c1=[ca3,cdd3,cdd2,cdd1];
s2=waverec(c1,l,'db4');
[thrl,sorh,keepapp]=ddencmp('den','wv',y);
% s2=wdencmp('gbl',c,l,'db4',4,thrl,sorh,keepapp);
%绘图
windowLength = 256; %帧长,语谱图参数
win = hamming(windowLength,'periodic'); %窗口函数(汉明窗)
overlap = 128; %帧移(一般为帧长的一半)
ffTLength = windowLength; %做DFT的点数,一般和帧长一样
subplot(3,2,1)
plot(x)
subplot(3,2,2)
spectrogram(x,win,overlap,ffTLength,Fs,'yaxis')
subplot(3,2,3)
plot(y)
subplot(3,2,4)
spectrogram(y,win,overlap,ffTLength,Fs,'yaxis');
subplot(3,2,5)
plot(s2);
subplot(3,2,6)
spectrogram(s2,win,overlap,ffTLength,Fs,'yaxis');
sound(s2,Fs)
signal_power = sum(abs(x').^2)/length(x');
noise_Power0 = sum(abs(y'-x').^2)/length(y'-x');
SNR0 = 10*log10(signal_power/noise_Power0);
disp(['带噪音频信噪比:',num2str(SNR0)])
noise_Power2 = sum(abs(s2-x').^2)/length(s2-x'); %(带噪信号-纯信号)的平方
SNR = 10*log10(signal_power/noise_Power2);
disp(['强制消噪后信噪比:',num2str(SNR)])
结果:
带噪音频信噪比:5(单位dB)
强制消噪后信噪比:7.9071
MATLAB db4小波分解与重构,语音降噪相关推荐
- 哈儿小波分解和重构(降维和升维)实现算法
[0]README 0.1)本文旨在讲解 哈儿小波变换(分解和重构)进行数据的降维和升维: [timestamp: 1703281610]时隔几个月再来review 哈儿小波变换算法的具体思路: 1) ...
- python小波分解与重构_小波分解和重构
小波变换能够很好地表征一大类以低频信息为主要成分的信号, 小波包变换可以对高频部分提供更精细的分解 详见(http://www.cnblogs.com/welen/articles/5667217.h ...
- python小波分解与重构_python - 使用pyWavelets进行多级局部小波重构 - 堆栈内存溢出...
我设法编写了自己的wrcoef函数版本,该版本似乎可以正常工作: import pywt import numpy as np def wrcoef(X, coef_type, coeffs, wav ...
- 多元经验模态分解_交通运输|基于小波分解和长短时记忆网络的地铁进站量短时预测...
山东科学 ›› 2019, Vol. 32 ›› Issue (4): 56-63.doi: 10.3976/j.issn.1002-4026.2019.04.008 摘要: 针对城市地铁车站进站客流 ...
- db4小波的一次分解与重构
clc clear %db4小波的一次分解与重构 load leleccum; %导入信号. n=1000; x=leleccum(1:n); %x=[2,4,6,8,2,4,6,8];% haar ...
- MATLAB小波分解/重构wavedec/waverec函数中L和C的意义
这两天在做用小波阈值法进行信号去噪的问题,需要将信号进行五层小波分解,每进行一层分解时都将该层得到的细节系数CDi进行一次阈值化处理.这可以通过多次调用matlab中的dwt函数来实现.但是,在信号进 ...
- 传统语音增强——基于小波分解的语音降噪算法
一.小波分析的意义 在传统的傅里叶分析中,信号完全是在频域展开的,不包含任何时频的信息.因为丢弃的时域信息对某些应用同样重要,所以出现很多能表征时域和频域信息的信号分析方法,如短时傅里叶变换.Gabo ...
- matlab dwt 多层分解,利用matlab对图片进行多层小波分解 会的加QQ511607771 加过作图之后积分加倍送...
利用matlab对图片进行多层小波分解 会的加QQ511607771 加过作图之后积分加倍送 mip版 关注:96 答案:2 悬赏:0 解决时间 2021-01-23 13:02 已解决 202 ...
- matlab dwt 多层分解,多尺度小波分解Matlab/Python实现与原理分析
小波分解的理解 Matlab中实现小波分解方式 在matlab中实现小波分解的方式比较简单,通过[C,L] = wavedec(X,N,'wname')得到C和L,如下图,C表示分解得到的各个层的小波 ...
- 一维信号小波去噪算法C语言,[转载]一维小波分解与去噪重构
对随机一维信号实现多尺度小波分解,长度M=256,层数N=3. 解:一维随机信号是用nelec函数作为信号源,产生0~256范围内的信号. 实现小波按层分解的函数是: [C,L]=wavedec(s, ...
最新文章
- hdu-4451-Dressing
- 关于静态库、动态库的区别汇总
- 老兵的十年职场之路(一)
- WinXP无需激活的秘技
- redis 命令别名_【死磕 Redis】 哨兵(一):部署哨兵架构
- MySQL 5.7.21详细下载安装配置教程
- 音视频开发(38)---麦克风阵列仿真环境的搭建
- 二本院校女毕业生,想去北漂,求建议
- RenderMan:渲染技术
- python有什么用-python是什么意思?python有什么用?
- 盘点一下 在Python中安装包的三种方法
- oracle中between函数用法,Oracle常用函数使用介绍
- CarPlay Wireless 使用fdk_aac库解码Raw AAC-LC AAC-ELD
- 国内液压与气动标准大全
- excel中indirect函数使用方法和应用实例
- 手机用USB连接电脑宽带上网(只需轻松3步即可上网)
- 论文导读:DINO -自监督视觉Transformers
- OpenCV+Python 彩色图片的 BGR、灰度图、HSV分量图显示的程序
- win7虚拟机时间不能修改怎么办
- Android开发学习之WindowManager实现弹窗