离散余弦变换(Discrete Cosine Transform, DCT),信号去噪

news2024/9/21 0:27:31

介绍

离散余弦变换(Discrete Cosine Transform, DCT)是一种常用的信号处理工具,特别是在数据压缩、图像处理和模式识别等领域中。DCT的基本思想是将信号从空间域或时间域转换到频率域,以揭示信号中的频率成分。与离散傅里叶变换(DFT)相比,DCT具有一些独特的性质,使其在特定应用场景中更加有效。

DCT的背景与动机

DCT的开发最初是为了克服傅里叶变换在处理边界条件和处理实值信号时的一些局限性。傅里叶变换和DFT将信号表示为一系列复数指数函数的叠加,其中包括正弦和余弦成分。这种表示虽然功能强大,但也引入了复数运算和相位信息,这在某些应用中并不必要。

DCT将信号表示为一组余弦函数的叠加,所有这些余弦函数都具有不同的频率,但没有复数部分,因此DCT只处理实值数据。对于许多信号,特别是图像和音频信号,DCT能够集中能量在低频部分,从而在压缩和特征提取过程中表现出色。

DCT的定义

离散余弦变换有多种形式,最常用的为DCT-II。假设我们有一个长度为 N N N的序列 x [ n ] x[n ] x[n],其中 n = 0 , 1 , 2 , . . . , N − 1 n=0,1,2,...,N-1 n=0,1,2,...,N1。DCT-II 的定义如下:
X [ k ] = ∑ n = 0 N − 1 x [ n ] ⋅ c o s [ π N ( n + 1 2 ) k ] X[k] = \sum_{n=0}^{N-1}x[n]\cdot cos[\frac{\pi}{N}(n+\frac{1}{2})k] X[k]=n=0N1x[n]cos[Nπ(n+21)k]
其中 k = 0 , 1 , 2 , . . . , N − 1 k=0,1,2,...,N-1 k=0,1,2,...,N1, X [ k ] X[k] X[k]是信号在频率 𝑘处的DCT系数。
DCT的逆变换(IDCT)用于将频域信号转换回时间或空间域,其定义为:
x [ n ] = ∑ n = 0 N − 1 x [ n ] ⋅ c o s [ π N ( n + 1 2 ) k ] x[n] = \sum_{n=0}^{N-1}x[n]\cdot cos[\frac{\pi}{N}(n+\frac{1}{2})k] x[n]=n=0N1x[n]cos[Nπ(n+21)k]
DCT的其他形式包括DCT-I、DCT-III和DCT-IV,它们在边界条件和具体应用上有所不同,但DCT-II是最常用的版本,特别是在图像压缩中。

DCT的性质

DCT具有一些重要的性质,使其在信号处理中的应用非常广泛:

能量压缩(Energy Compaction)
DCT能够将信号的大部分能量集中在较少的低频系数上,这对于信号压缩特别有利。在许多应用中,DCT系数的前几项就能很好地近似原始信号,而高频系数则可以被忽略或进一步压缩。

实值变换(Real-Valued Transform)
DCT只处理实数信号,没有复数部分,这简化了计算,并使得DCT在处理实值数据(如图像和音频)时非常有效。

对称性
DCT的对称性使其在处理边界条件时表现得更好,特别是在处理周期信号或以某种方式对称的信号时。

可逆性
DCT是可逆的,意味着我们可以通过逆DCT(IDCT)从频域信号恢复原始信号,前提是没有对DCT系数进行过度的削减。

DCT的应用

DCT在各种应用中发挥着关键作用,以下是一些主要的应用领域:

图像压缩
在JPEG图像压缩标准中,DCT是核心技术。JPEG压缩将图像分成8x8的块,对每个块应用DCT,然后量化和压缩DCT系数,去除人眼不易察觉的高频成分,从而达到压缩的目的。

音频压缩
在音频压缩(如MP3、AAC)中,DCT用于将时间域信号转换到频域,以便更有效地压缩。音频信号通常具有较强的低频成分,DCT能够很好地将这些能量集中在少数几个系数中。

特征提取
在模式识别、语音识别等领域,DCT用于提取信号的频率特征。例如,在语音识别中,DCT是计算MFCC(Mel Frequency Cepstral Coefficients,梅尔频率倒谱系数)的关键步骤。

数据压缩与去噪
DCT也用于数据压缩和去噪。通过只保留DCT系数中的显著成分,可以去除噪声或压缩数据,同时尽量保留原始信号的重要特征。

DCT与其他变换的比较

DCT与DFT(离散傅里叶变换)和DWT(离散小波变换)是信号处理中常用的三种变换,各有优缺点:

DCT vs. DFT
DCT与DFT相比,DCT只涉及实数计算,没有相位信息,因此计算上更简单且能量集中效果更好。但DFT更适合处理周期性信号和需要复杂频率分析的场景。

DCT vs. DWT
DCT是线性变换,处理时间复杂度低;而DWT具有多分辨率分析能力,适合处理具有突变或非平稳特性的信号。DWT在图像处理中的应用也非常广泛,但DCT在压缩效率和计算复杂度上具有优势。

DCT的局限性

尽管DCT在许多方面表现出色,但它也有一些局限性:

边缘效应
在处理边界数据时,DCT可能引入伪影,特别是在图像处理时,块之间的边界可能产生可见的块效应(Block Artifacts)。

全局性质
DCT是一种全局变换,无法像小波变换那样提供多分辨率分析。因此,它对局部信号特征的捕捉能力有限。

应用范围
DCT主要适用于实值信号和对称性较强的信号,对于复数信号或不对称信号,其应用效果可能不如其他变换。

本文代码

我们将展示了如何使用DCT去除信号中的噪声。代码包括以下几个步骤:生成含噪信号、应用DCT、使用阈值方法去除噪声、然后应用逆DCT恢复信号,并进行可视化对比

核心代码

% MATLAB Code for Denoising Using Discrete Cosine Transform (DCT)

% Step 1: Generate a Noisy Signal
Fs = 1000;                 % Sampling frequency
t = 0:1/Fs:1-1/Fs;         % Time vector (1 second duration)
freq1 = 50;                % Frequency of the first sinusoid
freq2 = 120;               % Frequency of the second sinusoid
signal = sin(2*pi*freq1*t) + sin(2*pi*freq2*t); % Clean signal

% Add Gaussian noise
SNR = 10;                  % Signal-to-noise ratio (in dB)
noisySignal = awgn(signal, SNR, 'measured');  % Noisy signal

% Step 2: Apply DCT to the Noisy Signal
dctCoeffs = dct(noisySignal);

% Step 3: Apply Thresholding to DCT Coefficients
% Thresholding is used to remove the noise components in the DCT domain
threshold = 0.2 * max(abs(dctCoeffs));  % Define a threshold based on max coefficient
dctCoeffs(abs(dctCoeffs) < threshold) = 0;  % Zero out coefficients below the threshold

% Step 4: Apply Inverse DCT to Recover the Denoised Signal

% Step 5: Visualize the Results
figure;

% Plot the original clean signal
subplot(4,1,1);
plot(t, signal);
title('Original Clean Signal');
xlabel('Time (s)');
ylabel('Amplitude');

% Plot the noisy signal
subplot(4,1,2);
plot(t, noisySignal);
title('Noisy Signal');
xlabel('Time (s)');
ylabel('Amplitude');

% Plot the DCT coefficients before and after thresholding
subplot(4,1,3);
plot(dctCoeffs);
title('DCT Coefficients after Thresholding');
xlabel('Coefficient Index');
ylabel('Magnitude');

% Plot the denoised signal
subplot(4,1,4);
plot(t, denoisedSignal);
title('Denoised Signal Using DCT');
xlabel('Time (s)');
ylabel('Amplitude');

% Step 6: Evaluate the Denoising Performance
% Compute the Mean Squared Error (MSE) between the original and denoised signal

% Compute the Signal-to-Noise Ratio (SNR) improvement
snrImprovement = 20*log10(norm(signal)/norm(signal-denoisedSignal));

% Display MSE and SNR improvement
fprintf('Mean Squared Error (MSE) between original and denoised signal: %.4f\n', mse);
fprintf('SNR Improvement: %.2f dB\n', snrImprovement);

代码说明

生成含噪信号
生成了一个包含两个不同频率(50Hz 和 120Hz)正弦波的纯净信号。然后,通过添加高斯白噪声(AWGN)来创建一个信噪比为10dB的含噪信号。
应用DCT
对含噪信号进行DCT变换,将其转换到频域。DCT将信号的主要能量集中在低频部分,因此,噪声通常表现为较小的高频系数。
阈值处理
在DCT系数上应用阈值处理,以去除噪声。低于设定阈值的系数被置零,假设这些系数主要代表噪声分量。阈值设置为DCT系数中最大值的20%,这一比例可以根据具体应用场景调整。
逆DCT恢复信号
应用逆DCT(IDCT)将处理后的DCT系数转换回时间域,恢复去噪后的信号。由于只保留了主要的信号成分,去除了噪声,因此恢复的信号质量应显著提高。
结果可视化
代码通过多个子图展示了原始信号、含噪信号、阈值处理后的DCT系数以及去噪后的信号。这样可以直观地看到去噪过程的效果。
去噪效果评估
使用均方误差(MSE)和信噪比(SNR)改进量来评估去噪效果。MSE越小,SNR提升越大,表明去噪效果越好。

效果

在这里插入图片描述

完整代码获取

关注下方卡片微信公众号,回复"DCT"获取完整代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++网络编程--文件分块传输

文件分块传输是网络编程中一个常见的任务&#xff0c;尤其是在处理大文件时&#xff0c;将文件分块可以提高传输效率&#xff0c;简化错误处理&#xff0c;并可以实现并发传输。下面&#xff0c;写个从客户端向服务器发送大型数据的demo。 客户端 客户端有两点需要注意&#…

vue组件中的数据传递(2)--子组件传父组件

两种情况 子主动传 vue 父传子 子传父实现方式_vue父传子-CSDN博客 vue父子组件传值&#xff0c;父传子&#xff0c;子传父_父传子 且随时变化-CSDN博客 父主动要 Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值_父传子传-CSDN博客

File Transfer Server 文件传输服务器插件

您需要在本地不同设备之间传输文件吗?现在你可以做到了,你不必安装任何专用服务器。 文件传输服务器为您的游戏或应用程序添加了将文件从任何受支持的平台传输到任何受支持平台的能力。从移动到独立,从移动到移动等(查看支持的平台) 优势: -完整的源代码可用。 -不需要预…

【揭秘心梗元凶】不容忽视的七大生活习惯,竟是心梗“幕后推手”!

在这个快节奏的时代&#xff0c;心梗&#xff08;急性心肌梗死&#xff09;这一健康杀手正悄然逼近&#xff0c;威胁着越来越多人的生命安全。心梗不仅发病急骤&#xff0c;后果往往也极为严重。那么&#xff0c;心梗究竟是如何引起的&#xff1f;今天&#xff0c;我们就来揭开…

Leetcode面试经典150题-239.滑动窗口最大值

解法都在代码里&#xff0c;不懂就留言或者私信 官方定级hard难度&#xff0c;其实是medium&#xff0c;确实字节考过 class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length 1) {return new int[]{nums[0]};}/**我们要返回的是一个数组&#…

SoM的理解

对于终端客户来说&#xff0c;要思考到底怎么做一款产品。目前好像主流的就是SoC和SoM。以前联发科是有Turnkey项目&#xff0c;不过我记得我参与的项目&#xff0c;都是直接拿原厂的参考设计&#xff0c;基本上就是改一个壳&#xff0c;电路板&#xff0c;IO啥的都不动&#x…

土壤湿度传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main.c文件 TS.h文件 TS.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 传感器适用于土壤的湿度检测&#xff0c;模块中蓝色的电位器是用于土壤湿度的阈值调节&#xff0c;数字量输出DO可以与…

进程间的通信(IPC)基础了解,匿名管道使用,有名管道使用

进程间通信基本知识 进程间通信的定义 进程间通信方式分类 匿名管道&#xff08;pipe&#xff09; 匿名管道介绍 创建方式&#xff1a;使用 pipe 系统调用创建&#xff0c;返回一对文件描述符&#xff08;读端和写端&#xff09;。生命周期&#xff1a;匿名管道的生命周期与…

为什么说RAG是AI 2.0时代的“杀手级”应用?

复旦AI博士&#xff0c;分享AI领域全维度知识与研究。应极客时间邀请开设《RAG快速开发实战》课程&#xff0c;感兴趣的同学可以访问关注 https://time.geekbang.com/column/intro/100804101 随着 AI 2.0 时代的来临&#xff0c;我们正站在一个技术革新和行业变革的交汇点。大语…

Vue3优化表单标签与布局,解决文字过长问题(附Demo)

目录 前言1. 增加标签宽度&#xff08;生效&#xff09;2. 工具提示 Tooltip&#xff08;勉勉强强&#xff09;3. 缩小字体&#xff08;不生效&#xff09;4. CSS 控制换行&#xff08;不推荐&#xff09; 前言 好不容易构思整个表单的布局&#xff0c;但是个别表单的文字过长…

springboot整合logback进行日志管理(上篇)

1、前言: 在日常开发中日志的打印与日志的记录是非常重要的。市面上主流的日志管理框架有log4j、logback,二者各有优缺点v,由于项目中比较常用的是logback(我们自己项目就是用的logback),进行就主要介绍一下logback在真是项目中是如何整合的。 2、springboot默认整合的logb…

NASA数据集:50 m分辨率的雪水当量(SWE)地图的集合

ASO L4 Lidar Snow Water Equivalent 50m UTM Grid V001 ASO L4 激光雷达雪水当量 50 米UTM 网格&#xff0c;第 1 版 简介 该数据集包含 50 米网格雪水当量 (SWE) 值&#xff0c;是 NASA/JPL 机载雪地观测站 (ASO) 飞机勘测活动的一部分。 这些数据来自 ASO L4 Lidar Snow …

OLED预警系统与按键菜单交互代码实操

引言 OLED顾名思义就是一个屏幕, 我们让一个屏幕在特定的时间, 显示特定的画面, 就是我们所需要的, 因为这里是涉及到环境预警,所以需要加入一个应急接管页面的选项, 所以我们要把按键直接操作画面, 变成按键操作完, 我们根据优先级判断之后, 才能确定要显示的是哪个画面. 比如…

【无标题】书生大模型实战营闯关记录----第十二关:茴香豆:企业级知识库问答工具;Web版茴香豆使用教程;茴香豆本地化标准版部署搭建教程;知识库构建问答

0 茴香豆介绍 茴香豆 是由书生浦语团队开发的一款开源、专门针对国内企业级使用场景设计并优化的知识问答工具。在基础 RAG 课程中我们了解到&#xff0c;RAG 可以有效的帮助提高 LLM 知识检索的相关性、实时性&#xff0c;同时避免 LLM 训练带来的巨大成本。在实际的生产和生活…

Yolov5 AI学习笔记

Yolov5 AI学习笔记 环境准备 需要Python的开发环境&#xff0c;安装Anaconda。 Anaconda的一些命令&#xff1a; # 创建虚拟环境 conda create -n yolo_cpu python3.9 # 查看虚拟环境 conda env list # 激活虚拟环境 conda activate <env_name>Yolov5上手 下载源码 …

上下文的弹性

“上下文的弹性”是指在自然语言处理中&#xff0c;模型对输入文本的上下文信息的理解和利用能力。它描述了模型在处理文本时能够根据上下文信息来调整其输出的程度。具有弹性上下文的模型可以更好地处理自然语言中的语义和语境&#xff0c;从而提供更准确和有用的回答。这种弹…

这才是老板喜欢的产品经理简历

速创猫今天给大家分享的是应届毕业生产品经理简历优化案例&#xff0c;希望对大家求职有帮助。速创猫总结了以下七条简历制作干货&#xff0c;希望对大家有帮助&#xff1a; 明确目标岗位&#xff1a;在简历的开头&#xff0c;明确指出你申请的职位&#xff0c;让招聘者一眼就能…

聚焦AI4SE软件工程领域,基于Multi Agent System多智能体系统开发的最新成果,实现软件开发领域的PUGC!

可能有很多小伙伴不了解AI4SE是什么&#xff0c;其实从字意上就不难看出一定是和AI相关。 AI4SE&#xff08;Artificial Intelligence for Software Engineering&#xff09;是指将人工智能技术应用于软件工程领域。 其核心目标是通过自动化和智能化技术降低软件开发的复杂性…

MySQL 官方高可用方案 InnoDB Cluster

文章目录 前言1. 方案构成2. 使用要求和限制3. 集群部署3.1 环境说明3.2 软件下载3.2 MySQL Server 安装3.3 MySQL Shell 安装3.4 检测实例是否符合资格3.5 创建集群3.6 向集群中添加节点3.7 配置 Router3.8 测试验证 4. 集群运维4.1 Router 服务管理4.2 MySQL 服务管理4.3 集群…

结束Linux特定端口上的进程,超级实用!

在使用 Linux 时&#xff0c;您可能会遇到特定端口被进程占用的情况。了解如何终止在特定端口上运行的进程可能非常有用&#xff0c;特别是对于排除故障和有效地管理系统而言。 本文中&#xff0c;我们将完成查找端口号、识别使用该端口的进程以及安全停止该进程。 详细步骤 …