简单的基追踪一维信号降噪方法(MATLAB 2018)

基追踪法是基于冗余过完备字典下的一种信号稀疏表示方法。该方法具有可提高信号的稀疏性、实现阈值降噪和提高时频分辨率等优点。基追踪法采用表示系数的范数作为信号来度量稀疏性,通过最小化l型范数将信号稀疏表示问题定义为一类有约束的极值问题,进而转化为线性规划问题进行求解。

Speech Signal Generation and Plot

复制代码
M = 100;                  % length of signal
n = 0:M-1;
s = 0.5*sin(2*pi*0.05*n); % Speech Waveform 


% Plotting the speech Signal in Time Domain


figure(1)
subplot(2,1,1)
plot(n,s)
ylabel('Amplitude');
xlabel('Time');
title('Speech Waveform in Time Domain')


% Plotting the speech Signal in Frequency Domain


Y = (1/1024)*fft(s,1024);
figure(1)
subplot(2,1,2)
plot(abs(Y))
xlim([0 1024])
ylabel('Amplitude');
xlabel('Frequency');
title('Speech Waveform in Frequency Domain')

Noisy Signal Generation and Plot

复制代码
w = 0.5*randn(size(s));    % w : zero-mean Gaussian noise
y = s + w;                 % y : Adding noise to speech signal


% Plotting the noisy Signal in Time Domain


figure(2)
subplot(2,1,1)
plot(y)
title('Noisy speech signal')
ylabel('Amplitude');
xlabel('Time');


% Plotting the noisy Signal in Frequency Domain


N = 2^10;                   % N : Length of Fourier coefficient vector
Y = (1/N)*fft(y,N);         % Y : Spectrum of noisy signal


figure(2)
subplot(2,1,2)
plot(abs(Y))
xlim([0 1024])
title('Fourier coefficients (FFT) of noisy signal');
xlabel('Frequency (index)')
复制代码
[A, AH] = MakeTransforms('DFT', 100, 2^10)
复制代码
% Defining algorithm parameters


lambda = 7; % lambda : regularization parameter
Nit = 50; % Nit : number of iterations
mu = 500; % mu : ADMM parameter


% Running the  BPD algorithm


[c, cost] = BPD(y, A, AH, lambda, mu, Nit);


figure(4)
plot(cost)
title('Cost function history');
xlabel('Iteration')
it1 = 5;
del = cost(it1) - min(cost);
ylim([min(cost)-0.1*del cost(it1)])
xlim([0 Nit])

Denoising

复制代码
% Plotting the denoised Signal in Frequency Domain


figure(5)
subplot(2,1,1)
plot(abs(c))
xlim([0 1024])
title('Fourier coefficients (BPD solution)');
ylabel('Amplitude')
xlabel('Frequency')




% Plotting the denoised Signal in Time Domain


figure(5)
subplot(2,1,2)
plot(ifft(c))
xlim([0 100])
title('Denoised signal using BPD');
ylabel('Amplitude')
xlabel('Time')
相关推荐
rit843249913 分钟前
基于BP神经网络的语音特征信号分类
人工智能·神经网络·分类
eachin_z14 分钟前
力扣刷题(第四十九天)
算法·leetcode·职场和发展
一点.点19 分钟前
AlphaDrive:通过强化学习和推理释放自动驾驶中 VLM 的力量
人工智能·机器学习·自动驾驶
闻缺陷则喜何志丹22 分钟前
【强连通分量 缩点 拓扑排序】P3387 【模板】缩点|普及+
c++·算法·拓扑排序·洛谷·强连通分量·缩点
钮钴禄·爱因斯晨23 分钟前
Java 面向对象进阶之多态:从概念到实践的深度解析
java·开发语言·数据结构
鸽子炖汤23 分钟前
Java中==和equals的区别
java·开发语言·jvm
有个傻瓜27 分钟前
PHP语言核心技术全景解析
开发语言·kubernetes·php
科技小E28 分钟前
口罩佩戴检测算法AI智能分析网关V4工厂/工业等多场景守护公共卫生安全
网络·人工智能
说私域33 分钟前
基于定制开发开源AI智能名片S2B2C商城小程序的首屏组件优化策略研究
人工智能·小程序·开源·零售
vlln38 分钟前
2025年与2030年AI及AI智能体 (Agent) 市场份额分析报告
人工智能·深度学习·神经网络·ai