通过小波去噪实现信号的去噪功能。小波被设置为由 90 个系数组成的 Daubechies “dB45”,以及 14 级分解。将软 Donoho-Johnstone 通用阈值应用于小波系数,并使用电平噪声的电平相关估计进行重新缩放。还使用带通频率设置为 10 kHz 和带通纹波等于 0.2 dB 的 5 阶高通滤波器对数据进行了预滤波。
matlab中有相关的实现函数吗?
matlab小波去噪的函数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 当然有啊,db小波基为例:
clc,clear %装载采集的信号 leleccum.mat x = audioread('MUsic_Test.wav'); Fs = 44100; windowLength = 256;%帧长 win = hamming(windowLength,'periodic');%窗口函数(汉明窗) overlap = 128; %帧移(一般为帧长的一半) ffTLength = windowLength; %做DFT的点数,一般和帧长一样 snr = 20; %设定信噪比,单位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'); [thrl,nkeep]=wdcbm(c,l,3); % thrl = thselect(y,'rigrsure'); [xd1,cxd,lxd,perf0,perfl2] = wdencmp('lvd',c,l,'db4',3,thrl,'s'); noise_Power0 = sum(abs(y'-x').^2)/length(y'-x'); SNR0 = 10*log10(signal_power/noise_Power0); disp(['带噪语音信噪比:',num2str(SNR0)]) noise_Power2 = sum(abs(xd1-x).^2)/length(xd1-x); %(带噪信号-纯信号)的平方 SNR1 = 10*log10(signal_power/noise_Power2); disp(['db4小波软阈值法信噪比:',num2str(SNR1)]) subplot(4,2,1) plot(x); subplot(4,2,2) spectrogram(x,win,overlap,ffTLength,Fs,'yaxis'); title('纯净信号语谱图') subplot(4,2,3) plot(y); subplot(4,2,4) spectrogram(y,win,overlap,ffTLength,Fs,'yaxis'); title('带噪信号语谱图') subplot(4,2,5) plot(xd1); subplot(4,2,6) spectrogram(xd1,win,overlap,ffTLength,Fs,'yaxis'); title('db4小波软阈值去噪语谱图') subplot(4,2,7) [xd2,cxd2,lxd2,perf1,perf22] = wdencmp('lvd',c,l,'db4',3,thrl,'h'); noise_Power2 = sum(abs(xd2-x).^2)/length(xd2-x); %(带噪信号-纯信号)的平方 SNR2 = 10*log10(signal_power/noise_Power2); disp(['db4小波硬阈值法信噪比:',num2str(SNR2)]) plot(xd2); subplot(4,2,8) spectrogram(xd2,win,overlap,ffTLength,Fs,'yaxis'); title('db4小波硬阈值去噪语谱图') sgtitle('dbN小波去噪') disp(['db4小波软阈值去噪后语音成分能量:',num2str(sum(abs(xd1-(y-x)))),'dB']) disp(['db4小波硬阈值去噪后语音成分能量:',num2str(sum(abs(xd2-(y-x)))),'dB'])
还有你说的带通等波纹设计滤波器用的函数,数字信号处理教材上都能找到详细的例子,比如:
%等波纹逼近法设计 clc; clear; f=[0.25,0.5]; m=[0,1]; rp=1; rs=40; dat1=(10^(rp/20)-1)/(10^(rp/20)+1); dat2=10^(-rs/20); rip=[dat2,dat1]; [M,fo,mo,w]=remezord(f,m,rip); M=M+1; hn=remez(M,fo,mo,w); subplot(3,3,7); stem(hn);title('等波纹法hn') Hk=fft(hn,1024); wk=0:1023;wk=2*wk/1024; subplot(3,3,8); plot(wk,20*log10(abs(Hk)));title('等波纹法设计的损耗函数');grid; xlabel('\omega/\pi');ylabel('幅度(dB)');axis([0,1,-90,10]); subplot(3,3,9); plot(wk,abs(Hk));title('等波纹法设计的幅频特性');grid; xlabel('\omega/\pi');ylabel('幅度');axis([0,1,0.1,1.1]);
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 MATLAB APP 制作出现问题
- ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
- ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
- ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
- ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
- ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
- ¥15 信息管理系统的查找和排序
- ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
- ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
- ¥15 PB中矩阵文本型数据的总计问题。