bemd算法实现信息隐藏_抽象数据类型的表示与实现

82ebcb23fe663ebd8fcabba0e2128abf.png

运用抽象数据类型描述数据结构,有助千在设计一 个软件系统时,不必首先考虑其中包含的 数据对象,以及操作在不同处理器中的表示和实现细节,而是在构成软件系统的每个相对独立的 模块上定义一组数据和相应的操作,把这些数据的表示和操作细节留在模块内部解决,在更高的 层次上进行软件的分析和设计,从而提高软件的整体性能和利用率。 抽象数据类型的概念与面向对象方法的思想是一致的。抽象数据类型独立于具体实现,将数 据和操作封装在一起,使得用户程序只能通过抽象数据类型定义的某些操作来访问其中的数据, 从而实现了信息隐藏。在 C++中,我们可以用类的声明表示抽象数据类型,用类的实现来实现 抽象数据类型。因此,C++中实现的类相当于数据的存储结构及其在存储结构上实现的对数据 的操作。 抽象数据类型和类的概念实际上反映了程序或软件设计的两层抽象:抽象数据类型相当千在 概念层(或称为抽象层) 上描述问题,而类相当于在实现层上描述问题。此外,C++中的类只是 一 个由用户定义的普通类型,可用它来定义变量(称为对象或类的实例)。因此,在 C++中,最 终是通过操作对象来解决实际问题的,所以我们可将该层次看做是应用层。例如,main程序就可 看做是用户的应用程序。 由此可以看出,最终表示和实现抽象数据类型,最好用面向对象的方法,比如用 C++语言的 类描述比较方便、有效,但本课程大都在大学低年级开设,用C语言的描述方法更符合学生的实 际情况。另外,由于实际问题于变万化,数据模型和算法也形形色色,因此抽象数据类型的设计 和实现,就不可能像基本数据类型那样规范和一劳永逸。本书所讨论的数据结构及其算法主要是 面向读者的,故采用介千伪码和 C 语言之间的类 C 语言作为描述工具。这使得数据结构与算法的描述与讨论简明清晰, 不拘泥于C语言的细节, 又容易转换成C或C廿程序。

C语言入门指南系列-学习视频教程-腾讯课堂

C语言与数据结构算法-学习视频教程-腾讯课堂

C++语言入门指南系列-学习视频教程-腾讯课堂

windows编程入门篇-学习视频教程-腾讯课堂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于没有具体的数据和代码实现需求,我们这里给出一个基本的MATLAB代码实现bemd的示例: ```matlab % Bivariate Empirical Mode Decomposition (BEMD) Algorithm % Reference: "Bivariate Empirical Mode Decomposition" by Bai et al. (2009) function [imf1,imf2,residue] = bemd(signal1,signal2,level,radius) % signal1 - the first signal to be decomposed % signal2 - the second signal to be decomposed % level - the number of decomposition levels % radius - radius of the sifting window % initializations imf1 = zeros(length(signal1),level); imf2 = zeros(length(signal2),level); % calculate residue residue1 = signal1; residue2 = signal2; % loop for each level for i = 1:level % calculate the Intrinsic Mode Functionset1 [imf1(:,i)] = sift_bimd(residue1,radius); [imf2(:,i)] = sift_bimd(residue2,radius); % calculate the residue residue1 = residue1 - imf1(:,i); residue2 = residue2 - imf2(:,i); end % save the residue residue = [residue1,residue2]; end function [imf] = sift_bimd(signal,radius) % initializations N = length(signal); iter = 0; h = 0.5; while min(abs(signal-hilbert(signal)))>0.1*std(signal) % check for iterations if iter>200 break; end % calculate local extrema [tmax,maxInd] = findpeaks(signal); [tmin,minInd] = findpeaks(-1*signal); % check for empty extrema if isempty(maxInd)||isempty(minInd) break; end % ensure that the first and last extrema are type "max" if maxInd(1)<minInd(1) maxInd(1) = []; end if minInd(end)<maxInd(end) minInd(end) = []; end % check for empty extrema if isempty(maxInd)||isempty(minInd) break; end % calculate spline envelopes maxEnv = spline(maxInd,signal(maxInd),1:N)'; minEnv = spline(minInd,signal(minInd),1:N)'; % calculate mean envelope meanEnv = (maxEnv+minEnv)/2; % calculate mean-corrected signal meanSig = signal-meanEnv; % shift towards zero if meanSig(1)>0 meanSig = meanSig-meanSig(1); end if meanSig(1)<=0 meanSig = meanSig+meanSig(1); end % calculate new signal as shifted mean-corrected signal newSignal = meanSig; for j=1:length(maxInd) newSignal(maxInd(j)-radius:maxInd(j)+radius) = ... newSignal(maxInd(j)-radius:maxInd(j)+radius) - ... meanSig(maxInd(j))/(2*(radius+1)); end for j=1:length(minInd) newSignal(minInd(j)-radius:minInd(j)+radius) = ... newSignal(minInd(j)-radius:minInd(j)+radius) + ... meanSig(minInd(j))/(2*(radius+1)); end % update iteration iter = iter+1; signal = newSignal; end % save the IMF imf = signal; end ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值