数字信号处理的MATLAB实现

数字信号处理的MATLAB实现
数字信号处理的MATLAB实现

说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编

一.调用方法

X=FFT(x);

X=FFT(x,N);

x=IFFT(X);

x=IFFT(X,N)

用MATLAB进行谱分析时注意:

(1)函数FFT返回值的数据结构具有对称性。

例:

N=8;

n=0:N-1;

xn=[4 3 2 6 7 8 9 0];

Xk=fft(xn)

Xk =

39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i

-10.7782 - 6.2929i

Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。

(2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。

二.FFT应用举例

例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf;

fs=100;N=128; %采样频率和数据点数

n=0:N-1;t=n/fs; %时间序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号

y=fft(x,N); %对信号进行快速Fourier变换

mag=abs(y); %求得Fourier变换后的振幅

f=n*fs/N; %频率序列

subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅

xlabel('频率/Hz');

ylabel('振幅');title('N=128');grid on;

subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅

xlabel('频率/Hz');

ylabel('振幅');title('N=128');grid on;

%对信号采样数据为1024点的处理

fs=100;N=1024;n=0:N-1;t=n/fs;

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号

y=fft(x,N); %对信号进行快速Fourier变换

mag=abs(y); %求取Fourier变换的振幅

f=n*fs/N;

subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅

xlabel('频率/Hz');

ylabel('振幅');title('N=1024');grid on;

subplot(2,2,4)

plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');

ylabel('振幅');title('N=1024');grid on;

运行结果:

fs=100Hz,Nyquist频率为fs/2=50Hz。整个频谱图是以Nyquist频率为对称轴的。并且可以明显识别出信号中含有两种频率成分:15Hz和40Hz。由此可以知道FFT变换数据的对称性。因此用FFT对信号做谱分析,只需考察0~Nyquist 频率范围内的福频特性。若没有给出采样频率和采样间隔,则分析通常对归一化频率0~1进行。另外,振幅的大小与所用采样点数有关,采用128点和1024点的相同频率的振幅是有不同的表现值,但在同一幅图中,40Hz与15Hz振动幅值之比均为4:1,与真实振幅0.5:2是一致的。为了与真实振幅对应,需要将变换后结果乘以2除以N。

例2:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t),fs=100Hz,绘制:

(1)数据个数N=32,FFT所用的采样点数NFFT=32;

(2)N=32,NFFT=128;

(3)N=136,NFFT=128;

(4)N=136,NFFT=512。

clf;fs=100; %采样频率

Ndata=32; %数据长度

N=32; %FFT的数据长度

n=0:Ndata-1;t=n/fs; %数据对应的时间序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %时间域信号

y=fft(x,N); %信号的Fourier变换

mag=abs(y); %求取振幅

f=(0:N-1)*fs/N; %真实频率

subplot(2,2,1),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅

xlabel('频率/Hz');ylabel('振幅');

title('Ndata=32 Nfft=32');grid on;

Ndata=32; %数据个数

N=128; %FFT采用的数据长度

n=0:Ndata-1;t=n/fs; %时间序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);

y=fft(x,N);

mag=abs(y);

f=(0:N-1)*fs/N; %真实频率

subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅

xlabel('频率/Hz');ylabel('振幅');

title('Ndata=32 Nfft=128');grid on;

Ndata=136; %数据个数

N=128; %FFT采用的数据个数

n=0:Ndata-1;t=n/fs; %时间序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);

y=fft(x,N);

mag=abs(y);

f=(0:N-1)*fs/N; %真实频率

subplot(2,2,3),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅

xlabel('频率/Hz');ylabel('振幅');

title('Ndata=136 Nfft=128');grid on;

Ndata=136; %数据个数

N=512; %FFT所用的数据个数

n=0:Ndata-1;t=n/fs; %时间序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);

y=fft(x,N);

mag=abs(y);

f=(0:N-1)*fs/N; %真实频率

subplot(2,2,4),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅

xlabel('频率/Hz');ylabel('振幅');

title('Ndata=136 Nfft=512');grid on;

结论:

(1)当数据个数和FFT采用的数据个数均为32时,频率分辨率较低,但没有由

于添零而导致的其他频率成分。

(2)由于在时间域内信号加零,致使振幅谱中出现很多其他成分,这是加零造成的。其振幅由于加了多个零而明显减小。

(3)FFT程序将数据截断,这时分辨率较高。

(4)也是在数据的末尾补零,但由于含有信号的数据个数足够多,FFT振幅谱也基本不受影响。

对信号进行频谱分析时,数据样本应有足够的长度,一般FFT程序中所用数据点数与原含有信号数据点数相同,这样的频谱图具有较高的质量,可减小因补零或截断而产生的影响。

例3:x=cos(2*pi*0.24*n)+cos(2*pi*0.26*n)

(1)数据点过少,几乎无法看出有关信号频谱的详细信息;

(2)中间的图是将x(n)补90个零,幅度频谱的数据相当密,称为高密度频谱图。但从图中很难看出信号的频谱成分。

(3)信号的有效数据很长,可以清楚地看出信号的频率成分,一个是0.24Hz,一个是0.26Hz,称为高分辨率频谱。

可见,采样数据过少,运用FFT变换不能分辨出其中的频率成分。添加零后可增加频谱中的数据个数,谱的密度增高了,但仍不能分辨其中的频率成分,即谱的分辨率没有提高。只有数据点数足够多时才能分辨其中的频率成分。

MATLAB上机指导书

MATLAB上机指导书 电子信息科学与技术专业 张焕明孙明编 佛山科学技术学院 2005年9月

目录 前言 实验一 MATLAB基础知识 1 实验二矩阵与数组 5 实验三基本操作命令 8 实验四高级操作命令 10 实验五 MATLAB的M函数编程 12

前言 MATLAB的名称源自Matrix Laboratory,是一门计算语言,它专门以矩阵的形式处理数据.MATLAB将计算与可视化集成到一个灵活的计算机环境中,并提供了大内置函数,可以在广泛的工程问题中直接利用这些函数获得数值解.此外,用MATLAB 编写程序,犹如在一张草稿纸上排列公式和求解问题一样效率高,因此被称为“演算纸式的”科学工程算法语言.在我们高等数学的学习过程中,可以结合 MATLAB 软件,做一些简单的编程应用,在一定程度上弥补我们常规教学的不足,同时,这也是我们探索高职高专数学课程改革迈出的一步.

实验一 MATLAB 基础知识 一、实验目的 1、MATLAB 的使用初步练习 2、MATLAB 的窗口组成 二、实验内容 1、掌握表达式的输入方法 2、MATLAB 的常量及其表示方法 3、分号、百分比号、逗号及省略号的用法 4、向量和矩阵的处理方式;常用的数学函数;搜索路径的概念;MATLAB 的帮 助功能。 三、实验仪器、设备和材料 1、微型计算机,能正常运行Matlab 6.0或以上版本 2、Matlab6.0或以上版本 四、实验原理 略(参考教材的相关部分) 五、实验步骤 1、MATLAB 文件的编辑、存储和执行 MATLAB 提供了两种运行方式,即命令行和M 文件方式. A .命令行方式 直接在命令窗口输入命令来实现计算或作图功能. 例如,若要求表达式 9 .248.26107 sin 369.12÷?+π的值,我们可在MATLAB 命令窗口中键入下面的命令: >> 1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9 (回车) 观测运行结果并解释原因 也可将计算的结果赋给某一个变量,例如输入 : >> a=1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9 (回车) 观测运行结果并解释原因 B .M 文件的运行方式 1)文件编辑 在MATLAB 窗口中单击File 菜单依次选择NewM-File,打开M 文件输入运行界面,如下图所示。此时屏幕上会出现所需的窗口,在该窗口中输入程序文件,可以进行调试和运行.与命令行方式相比,M 文件方式的优点是可以调试,可重复应用. 2)文件存储 单击File 菜单,选择Save 选项,可将自己所编写的程序存在一个后缀为m 的文件中. 3)运行程序 在M 文件窗口中选择Debug 菜单中的run 选项,即可运行此M 文件;也可在MATLAB 命令窗口中直接输入所要执行的文件名后回车即可.但需要的是该程序文件必须存在MATLAB 默认的路径下.用户可以在MATLAB 窗口中单击File 菜单选择Set Path 将要执行的文件所在的路径添加到MATLAB 默认的路径序列中. 2、MATLAB 基本运算符及表达式 表1-1 基本运算符

数字信号处理Matlab实现实例(推荐给学生)

数字信号处理Matlab 实现实例 第1章离散时间信号与系统 例1-1 用MATLAB计算序列{-2 0 1 –1 3}和序列{1 2 0 -1}的离散卷积。 解 MATLAB程序如下: a=[-2 0 1 -1 3]; b=[1 2 0 -1]; c=conv(a,b); M=length(c)-1; n=0:1:M; stem(n,c); xlabel('n'); ylabel('幅度'); 图1.1给出了卷积结果的图形,求得的结果存放在数组c中为:{-2 -4 1 3 1 5 1 -3}。 例1-2 用MATLAB计算差分方程 当输入序列为时的输出结果。 解 MATLAB程序如下: N=41; a=[0.8 -0.44 0.36 0.22]; b=[1 0.7 -0.45 -0.6]; x=[1 zeros(1,N-1)];

k=0:1:N-1; y=filter(a,b,x); stem(k,y) xlabel('n');ylabel('幅度') 图 1.2 给出了该差分方程的前41个样点的输出,即该系统的单位脉冲响应。 例1-3 用MATLAB 计算例1-2差分方程 所对应的系统函数的DTFT 。 解 例1-2差分方程所对应的系统函数为: 123 123 0.80.440.360.02()10.70.450.6z z z H z z z z -------++= +-- 其DTFT 为 23230.80.440.360.02()10.70.450.6j j j j j j j e e e H e e e e ωωωω ωωω--------++= +-- 用MATLAB 计算的程序如下: k=256; num=[0.8 -0.44 0.36 0.02]; den=[1 0.7 -0.45 -0.6]; w=0:pi/k:pi; h=freqz(num,den,w); subplot(2,2,1); plot(w/pi,real(h));grid title('实部') xlabel('\omega/\pi');ylabel('幅度')

基于Matlab的数字水印设计——基于DCT域的水印实现

摘要 数字水印(Digital Watermark)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。数字水印是信息隐藏技术的一个重要研究方向。随着数字水印技术的发展,数字水印的应用领域也得到了扩展,数字水印的基本应用领域是版权保护、隐藏标识、认证和安全不可见通信。 当数字水印应用于版权保护时,潜在的应用市场在于电子商务、在线或离线地分发多媒体内容以及大规模的广播服务。数字水印用于隐藏标识时,可在医学、制图、数字成像、数字图像监控、多媒体索引和基于内容的检索等领域得到应用。数字水印的认证方面主要ID卡、信用卡、ATM卡等上面数字水印的安全不可见通信将在国防和情报部门得到广泛的应用。 本文主要是根据所学的数字图象处理知识,在MATLAB环境下,通过系统编程的方式,建立并实现基于DCT域的数字水印加密系统。该系统主要包含数字水印的嵌入与提取,仿真结果表明,数字水印算法具有有效性、可靠性、抗攻击性、鲁棒性和不可见性,能够为数字媒体信息在防伪、防篡改、认证、保障数据安全和完整性等方面提供有效的技术保障。 关键词:数字水印;MATLAB;DCT

目录 1 课程设计目的 (1) 2 课程设计要求 (2) 3 数字水印技术基本原理 (3) 3.1 数字水印基本框架 (3) 3.2 算法分类 (3) 3.2.1 DCT法 (4) 3.2.2 其他方法 (4) 3.3 实际需要考虑的问题 (4) 3.3.1 不可见性 (4) 3.3.2 鲁棒性 (5) 3.3.3 水印容量 (5) 3.3.4 安全性 (5) 4 基于DCT变换仿真 (6) 4.1 算法原理 (6) 4.1.1 准备工作 (6) 4.1.2 选取8*8变换块 (7) 4.1.3 边界自适应 (7) 4.1.4 DCT变换与嵌入 (7) 4.1.5 恢复空域 (8) 4.2 嵌入算法扩展 (8) 4.2.1 RGB彩色图像三个矩阵的划分 (8) 4.2.2 八色彩色水印 (8) 4.3 水印的提取 (9) 4.4 仿真程序 (9) 5 结果分析 (14) 结束语 (16) 参考文献 (17)

MATLAB上机实验(答案)

MATLAB工具软件实验(1) (1)生成一个4×4的随机矩阵,求该矩阵的特征值和特征向量。程序: A=rand(4) [L,D]=eig(A) 结果: A = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057 L = -0.7412 -0.2729 - 0.1338i -0.2729 + 0.1338i -0.5413 -0.3955 -0.2609 - 0.4421i -0.2609 + 0.4421i 0.5416 -0.4062 -0.0833 + 0.4672i -0.0833 - 0.4672i 0.4276 -0.3595 0.6472 0.6472 -0.4804 D = 2.3230 0 0 0 0 0.0914 + 0.4586i 0 0 0 0 0.0914 - 0.4586i 0 0 0 0 0.2275 (2)给出一系列的a值,采用函数 22 22 1 25 x y a a += - 画一组椭圆。 程序: a=0.5:0.5:4.5; % a的绝对值不能大于5 t=[0:pi/50:2*pi]'; % 用参数t表示椭圆方程 X=cos(t)*a; Y=sin(t)*sqrt(25-a.^2); plot(X,Y) 结果: (3)X=[9,2,-3,-6,7,-2,1,7,4,-6,8,4,0,-2], (a)写出计算其负元素个数的程序。程序: X=[9,2,-3,-6,7,-2,1,7,4,-6,8,4,0,-2]; L=X<0; A=sum(L) 结果: A =

数字信号处理MATLAB中FFT实现

MATLAB中FFT的使用方法 说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[43267890]; Xk=fft(xn) → Xk= 39.0000-10.7782+6.2929i0-5.0000i 4.7782-7.7071i 5.0000 4.7782+7.7071i0+5.0000i-10.7782-6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf; fs=100;N=128;%采样频率和数据点数 n=0:N-1;t=n/fs;%时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);%信号 y=fft(x,N);%对信号进行快速Fourier变换 mag=abs(y);%求得Fourier变换后的振幅 f=n*fs/N;%频率序列 subplot(2,2,1),plot(f,mag);%绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2));%绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);%信号 y=fft(x,N);%对信号进行快速Fourier变换 mag=abs(y);%求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag);%绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2));%绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果:

数字水印技术及基于MATLAB的快速实现

2011年3月刊计算机工程应用技术信息与电脑 China Computer&Communication 1. 引言 多媒体及网络的迅速发展使得多媒体信息的交流和传输变得更 加简单和快捷,然而,这也使盗版者能以低廉的成本复制及传播未经 授权的数字产品,这种对数字产品保护和信息安全的迫切需求,导致 了数字水印技术成为多媒体信息安全领域的一个热点问题。数字水印 技术是在不影响宿主媒体主观质量的情况下,在宿主媒体(文本、图 像、视频、音频)中嵌入不易被人察觉的标识信息,用以证明原创作 者对其作品的所有权,并作为鉴定、起诉非法侵权的证据。 2. 数字水印的特征 一般认为数字水印应具有以下特征: (1) 安全性。数字水印应该是安全、难以被篡改的。当数字作品 发生变化时,数字水印应当也相应发生变化;同时,未经授权的个人 不得修改水印,理论上是未经授权的用户不能检测到产品中是否含有 水印。 (2) 鲁棒性。当被保护的数据在经过攻击后,嵌入的水印信息仍 能保持好的完整性并能以一定的正确概率被检测到。这些可能的攻击 包括噪声、滤波、剪切、旋转和编码等。 (3) 不可感知性。数字水印的嵌入不应使得原始作品发生可以感 知的变化,也不能使得被保护数据在质量上发生可以感觉到的失真。 (4) 可证明性。在多媒体作品的实际应用过程中可能需要多次加 入水印,这时水印系统必须能够允许水印被多次嵌入到被保护的数 据,而且每个水印均能独立地被证明。 (5) 无歧义性。恢复出的水印或对水印判决结果能够表明版权的 惟一,不会发生多重版权纠纷问题。 3. 数字水印的基本原理 通用的水印技术包含两个方面:水印的嵌入和水印的提取或检 测,如图1和图2所示。 图1 水印信号嵌入 图2 水印信号提取或检测 4. 数字水印的研究现状 4.1 文本水印 文本水印就是将代表著作人身份的信息(水印)嵌入到电子出版物 中,在产生版权纠纷时来验证版权的归属。其主要分为三大类:基于 文档结构的水印方法、基于自然语言处理技术的水印方法、基于传统 图像的水印方法。 基于文档结构的各种水印方法都只是提留在文本的表层,无法抵 抗对于文本结构和格式的攻击,简单的重新录入攻击就能使之失效, 因此这些水印方法普遍存在鲁棒性差的缺点。自然语言文本水印方法 相对提高了抗攻击的能力,但普遍存在容量不足的问题。基于传统图 像的文本水印普遍存在鲁棒性不高、操作复杂的缺点。 4.2 图像水印 根据水印的实现过程,图像水印算法可分为空域算法和变换域算 法。空域算法是通过直接改变原始图像的像素值来嵌入水印,通常具 有较快的速度,但鲁棒性差,且水印容量也会受到限制;变换域算法 是通过改变某些变换系数来嵌入水印,通常具有很好的鲁棒性和不可 见性。其实现一般是基于图像变换,如DCT、DFT、DWT等。重点介 绍一下变换域算法。 4.2.1 离散傅里叶变换 (DFT) 该方法是利用图像的DFT来嵌入信息。通信理论中调相信号的抗 干扰能力比调幅信号的抗干扰能力强,同样在图像中利用相位信息嵌 入的水印也比用幅值信息嵌入的水印更稳健。实验表明该方法的抗压 缩能力比较弱。 4.2.2 离散余弦变换 (DCT) DCT能把空间域的图像转换到变换域上进行研究,从而能很容易 了解到图像的各空间频域成分,进行相应处理。基于DCT的水印方法 与基于DFT的水印方法相比有较好的鲁棒性,但是无法做到对图像信 号内容的自适应,因此往往会造成对图像特征的明显损害,不可感知 性不是最佳。 4.2.3 离散小波变换 (DWT) DWT是一种时间---频率信号的多分辨率分析方法,在时频两域 都具有表征信号局部特征的能力。实验表明,与DCT、DFT变换相比 较,基于DWT的水印算法的鲁棒性最优,且与JPEG2000、MPEG4压 缩标准兼容,利用DWT产生的水印具有良好的视觉效果和抵抗多种 攻击的能力,且不可感知性最好。 4.3 音频水印 音频水印利用音频文件的冗余信息和人耳听觉系统的特点来嵌入 水印,其可以保护声音数字产品不被随意复制和篡改,如CD唱片, 广播电台的节目内容等。音频水印的三种基本方法:扩频嵌入方 法、回声隐藏方法和相位编码方法。 4.4 视频水印 视频水印是通过对视频载体的时间和空间冗余来嵌入水印,其既 不影响视频质量,又能达到保护节目制作者的合法权益和控制数字产 品的复制。视频水印从算法要求上同图像水印有许多相似之处,但视 频水印也有一些独特之处,如能够在压缩和未压缩的格式下实时完成 水印的检测,对MPEG压缩、A/D和D/A转换等都有较好的稳健性。 数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉 感知理论、扩频技术、信号处理技术、数字图像处理技术、多媒体技 术、模式识别技术、算法设计等理论,用到经典的DFT离散傅立叶变数字水印技术及基于MATLAB的快速实现 张 巍1 时宏伟2 (1.78179部队,四川成都 610011;2. 川大智胜,四川成都 610045) 摘要:数字水印是近几年来出现的数字产品版权保护技术,是当前国际学术界的研究热点.该文论述了数字水印的提出及研究现状、水印的基本原理和算法、水印的分类等情况,并介绍了一种可以快速上手的高效的实用语言——MATLAB,同时给出了一个用MATLAB工具在静止图像上嵌入水印的实例。 关键词:数字水印;MATLAB;DCT 中图分类号:TP39 文献标识码:A 文章编号:1003-9767(2011)03-0130-02

南京理工大学数字信号处理matlab上机完美版

1.已知3阶椭圆IIR数字低通滤波器的性能指标为:通带截止频率0.4π,通带波纹为0.6dB,最小阻带衰减为32dB。设计一个6阶全通滤波器对其通带的群延时进行均衡。绘制低通滤波器和级联滤波器的群延时。 %Q1_solution %ellip(N,Ap,Ast,Wp) %N--->The order of the filter %Ap-->ripple in the passband %Ast->a stopband Rs dB down from the peak value in the passband %Wp-->the passband width [be,ae]=ellip(3,0.6,32,0.4); hellip=dfilt.df2(be,ae); f=0:0.001:0.4; g=grpdelay(hellip,f,2); g1=max(g)-g; [b,a,tau]=iirgrpdelay(6,f,[0 0.4],g1); hallpass=dfilt.df2(b,a); hoverall=cascade(hallpass,hellip); hFVT=fvtool([hellip,hoverall]); set(hFVT,'Filter',[hellip,hoverall]); legend(hFVT,'Lowpass Elliptic filter','Compensated filter'); clear; [num1,den1]=ellip(3,0.6,32,0.4); [GdH,w]=grpdelay(num1,den1,512); plot(w/pi,GdH); grid xlabel('\omega/\pi'); ylabel('Group delay, samples'); F=0:0.001:0.4; g=grpdelay(num1,den1,F,2); % Equalize the passband Gd=max(g)-g; % Design the allpass delay equalizer [num2,den2]=iirgrpdelay(6,F,[0,0.4],Gd); [GdA,w] = grpdelay(num2,den2,512); hold on; plot(w/pi,GdH+GdA,'r');

实验一 基于Matlab的数字信号处理基本

实验一 基于Matlab 的数字信号处理基本操作 一、 实验目的:学会运用MA TLAB 表示的常用离散时间信号;学会运用MA TLAB 实现离 散时间信号的基本运算。 二、 实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。 三、 实验内容: (一) 离散时间信号在MATLAB 中的表示 离散时间信号是指在离散时刻才有定义的信号,简称离散信号,或者序列。离散序列通常用)(n x 来表示,自变量必须是整数。 离散时间信号的波形绘制在MATLAB 中一般用stem 函数。stem 函数的基本用法和plot 函数一样,它绘制的波形图的每个样本点上有一个小圆圈,默认是空心的。如果要实心,需使用参数“fill ”、“filled ”,或者参数“.”。由于MATLAB 中矩阵元素的个数有限,所以MA TLAB 只能表示一定时间范围内有限长度的序列;而对于无限序列,也只能在一定时间范围内表示出来。类似于连续时间信号,离散时间信号也有一些典型的离散时间信号。 1. 单位取样序列 单位取样序列)(n δ,也称为单位冲激序列,定义为 ) 0() 0(0 1)(≠=?? ?=n n n δ 要注意,单位冲激序列不是单位冲激函数的简单离散抽样,它在n =0处是取确定的值1。在MATLAB 中,冲激序列可以通过编写以下的impDT .m 文件来实现,即 function y=impDT(n) y=(n==0); %当参数为0时冲激为1,否则为0 调用该函数时n 必须为整数或整数向量。 【实例1-1】 利用MATLAB 的impDT 函数绘出单位冲激序列的波形图。 解:MATLAB 源程序为 >>n=-3:3; >>x=impDT(n); >>stem(n,x,'fill'),xlabel('n'),grid on >>title('单位冲激序列') >>axis([-3 3 -0.1 1.1]) 程序运行结果如图1-1所示。 图1-1 单位冲激序列

基于MATLAB的数字水印算法实现

数字水印作为一门新的学科, 自 1993 年 Tirkel 等人正式提出到现在十几年里, 国内外对数字水印的研究都引起了极大的关注, 从最初的版权保护, 已扩展到多媒体技术, 广播监听, in-ternet 等多个领域。数字水印是永久镶嵌在其他数据( 主要指宿主数据) 中具有可鉴别性的数字信号或数字模式, 其存在不能影响宿主数据的正常使用。为了使数字水印技术达到一定的设计要求, 当前水印数据一般应具备不可感知性(imperceptible) 、鲁棒性(Robust) 、可证明性、自恢复性和安全保密性等特点。在数字水印技术中, 水印的数据量和鲁棒性构成了一对基本矛盾。理想的水印算法应该既能隐藏大量数据, 又可以抗各种信道噪声和信号变形。然而在实际中, 这两个指标往往不能同时实现, 实际应用往往只偏重其中的一个方面。如果是为了隐蔽通信, 数据量显然是最重要的, 由于通信方式极为隐蔽, 遭遇敌方篡改攻击的可能性很小, 因而对鲁棒性要求较为不高。但对保证数据安全来说, 情况恰恰相反, 各种保密的数据随时面临着被盗取和篡改的危险, 对鲁棒性的要求很高, 而对隐藏数据量的要求则居于次要地位。典型的数字水印系统至少包含两个组成部分- - 水印嵌入单元和水印检测与提取单元。将水印信息进行预处理后加入到载体中, 称为嵌入。从水印化数据中提取出水印信息或者检测水印信息的存在性称为水印的提取和检测。数字水印算法主要

是指水印的嵌入算法, 而提取算法往往被看成是嵌入算法的逆变换。 当前典型的嵌入算法主要被分为空间域水印算法和变换域水印算法。DCT 变换域算法是数字水印算法的典型代表, 也是数字水印中较为常用的一种稳健的算法。其算法思想是选择二值化灰度图像作为水印信息, 根据水印图像的二值性来选择不同的嵌入系数, 并将载体图像 ( 原始图像) 进行 8×8 的分块, 再将灰度载体图像( 原始图像) 进行 DCT变换。然后, 将数字水印信息的灰度值直接植入到载体灰度图像的 DCT 变换域中, 实现水印的嵌入。而后, 将嵌入了水印信息灰度图像进行 IDCT( 逆离散的余弦变换) 变换, 得到含有了嵌入水印信息的图像, 嵌入过程完毕。水印的提取、检测过程为嵌入过程的逆过程, 其方法和嵌入方法有所雷同不再进行介绍。 下面以 MATLAB 为工具, 给出一个在频域嵌入和提取黑白二值水印图像的实现过程。(1) 水印图像的预处理: 将水印信息图像进行灰度处理, 然后再将转换后的图像进行二值转换。而这些都是为了提高水印信息的安全性对图像所做的处理。(2) 读取原始公开图像(大小为 256×256) 和黑白水印图像(大小为 32×32, 模式为灰度) 到二维数组 I 和 J。(3) 将原始公开图像I 分割为互不覆盖的图像块, 每块大小为 8×8, 共分为 32×32 块。然后对分割后的每个小块Block- dct(x,y) 进行 DCT 变换, 得到变换后的小块 Block-dct(x, y)。(4) 取黑白水印图像中的一个元素 J(p, q) , 通过嵌入算法嵌入到原始公开图像块的中频系数中。(5) 对嵌入水印信息后的图像块Block- dct (x, y) 进行逆DCT 变换, 得到图像块 Block(x′, y′)。

青岛理工大学临沂年数字信号处理及MATLAB试卷

A卷

一、[15分] 1、10 2、f>=2fh

3、()()()y n x n h n =* 4、1 -az -11a 或者-z z ,a 1 -z 或1-1-az -1z 5、对称性 、 可约性 、 周期性 6、191点,256 7、典范型、级联型、并联型 8、T ω = Ω,)2 tan(2ω T = Ω或)2arctan(2T Ω=ω。 二、[20分] 1、C 2、 A 3、 C 4、C 5、B 6、D 7、B 8、A 9、D 10、A (CACCB DBADA) 三、[15分] 1、(5分) 混叠失真:不满足抽样定理的要求。 改善方法:增加记录长度 频谱泄漏:对时域截短,使频谱变宽拖尾,称为泄漏 改善方法:1)增加w (n )长度 2)缓慢截短 栅栏效应:DFT 只计算离散点(基频F0的整数倍处)的频谱,而不是连续函数。 改善方法:增加频域抽样点数N (时域补零),使谱线更密 2、(5分) 3、 (5分) IIR 滤波器: 1)系统的单位抽样相应h (n )无限长 2)系统函数H (z )在有限z 平面( )上有极点存在 3)存在输出到输入的反馈,递归型结构 Fir 滤波器: ? 1)系统的单位冲激响应h (n )在有限个n 处不为零; ? 2)系统函数 在||0 z >处收敛,在 处只有零点,即有限z 平面只有零点,而全部极点都在z =0处; ? 3)机构上主要是非递归结构,没有输入到输出的反馈,但有些结构中也包含有反馈的递归部分。 四、计算题(40分) 1、(12分)解: 解: 对上式两边取Z 变换,得: ()H z ||0z >

MATLAB上机答案

一熟悉Matlab工作环境 1、熟悉Matlab的5个基本窗口 思考题: (1)变量如何声明,变量名须遵守什么规则、是否区分大小写。 答:变量一般不需事先对变量的数据类型进行声明,系统会依据变量被赋值的类型自动进行类型识别,也就是说变量可以直接赋值而不用提前声明。变量名要遵守以下几条规则: 变量名必须以字母开头,只能由字母、数字或下划线组成。 变量名区分大小写。 变量名不能超过63个字符。 关键字不能作为变量名。 最好不要用特殊常量作为变量名。 (2)试说明分号、逗号、冒号的用法。 分号:分隔不想显示计算结果的各语句;矩阵行与行的分隔符。 逗号:分隔欲显示计算结果的各语句;变量分隔符;矩阵一行中各元素间的分隔符。 冒号:用于生成一维数值数组;表示一维数组的全部元素或多维数组某一维的全部元素。 (3)linspace()称为“线性等分”函数,说明它的用法。 LINSPACE Linearly spaced vector.线性等分函数 LINSPACE(X1,X2)generates a row vector of100linearly equally spaced points between X1and X2. 以X1为首元素,X2为末元素平均生成100个元素的行向量。 LINSPACE(X1,X2,N)generates N points between X1and X2. For N<2,LINSPACE returns X2. 以X1为首元素,X2为末元素平均生成n个元素的行向量。如果n<2,返回X2。 Class support for inputs X1,X2: float:double,single 数据类型:单精度、双精度浮点型。 (4)说明函数ones()、zeros()、eye()的用法。 ones()生成全1矩阵。 zeros()生成全0矩阵。 eye()生成单位矩阵。 2、Matlab的数值显示格式

数字水印技术DCT算法MATLAB源代码

%Name: Chris Shoemaker %Course: E ER-280 - Digital Watermarking %Project: Block DCT Based method, using comparision between mid-band coeffcients % Watermark Embeding clear all; % save start time start_time=cputime; k=50; % set minimum coeff difference blocksize=8; % set the size of the block in cover to be used for each bit in watermark % read in the cover object file_name='_lena_std_bw.bmp'; cover_object=double(imread(file_name)); % determine size of cover image Mc=size(cover_object,1); %Height Nc=size(cover_object,2); %Width % determine maximum message size based on cover object, and blocksize max_message=Mc*Nc/(blocksize^2); % read in the message image file_name='_copyright.bmp'; message=double(imread(file_name)); Mm=size(message,1); %Height Nm=size(message,2); %Width % reshape the message to a vector message=round(reshape(message,Mm*Nm,1)./256); % check that the message isn't too large for cover if (length(message) > max_message) error('Message too large to fit in Cover Object') end % pad the message out to the maximum message size with ones message_pad=ones(1,max_message); message_pad(1:length(message))=message; % generate shell of watermarked image watermarked_image=cover_object;

数字信号处理指导书matlab版

实验1 时域离散信号的产生 一、实验目的 学会运用MATLAB 产生常用离散时间信号。 二、实验涉及的matlab 子函数 1、square 功能:产生矩形波 调用格式: x=square(t);类似于sin (t ),产生周期为2*pi ,幅值为+—1的方波。 x=square(t ,duty);产生制定周期的矩形波,其中duty 用于指定脉冲宽度与整个周期的比例。 2、rand 功能:产生rand 随机信号。 调用格式: x=rand (n ,m );用于产生一组具有n 行m 列的随机信号。 三、实验原理 在时间轴的离散点上取值的信号,称为离散时间信号。通常,离散时间信号用x (n )表示,其幅度可以在某一范围内连续取值。 由于信号处理所用的设备主要是计算机或专用的信号处理芯片,均以有限的位数来表示信号的幅度,因此,信号的幅度也必须“量化”,即取离散值。我们把时间和幅度上均取离散值的信号称为时域离散信号或数字信号。 在MATLAB 中,时域离散信号可以通过编写程序直接生成,也可以通过对连续信号的等间隔抽样获得。 下面介绍常用的时域离散信号及其程序。 1、单位抽样序列 ? ? ?≠==000 1)(k k k δ MATLAB 源程序为

1) function [x,n] = impuls (n0,n1,n2) % Generates x(n) = delta(n-n0); n=n0 处建立一个单位抽样序列% [x,n] = impuls (n0,n1,n2) if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error('arguments must satisfy n1 <= n0 <= n2') end n = [n1:n2]; x = [zeros(1,(n0-n1)), 1, zeros(1,(n2-n0))]; 将上述文件存为:impuls.m,在命令窗口输入 n0=0,n1=-10,n2=11; [x,n]=impuls (n0,n1,n2); stem(n,x,’filled’) 2)n1=-5;n2=5;n0=0; n=n1:n2; x=[n==n0]; stem(n,x,'filled','k'); axis([n1,n2,1.1*min(x),1.1*max(x)]); title('单位脉冲序列'); xlabel('时间(n)'); ylabel('幅度x(n)'); 3)n1=-5;n2=5;k=0; n=n1:n2; nt=length(n); %求n点的个数 nk=abs(k-n1)+1; %确定k在n序列中的位置 x=zeros(1,nt); %对所有样点置0 x(nk)=1; %对抽样点置1 stem(n,x,'filled','k'); axis([n1,n2,0,1.1*max(x)]); title('单位脉冲序列'); xlabel('时间(n)'); Ylabel('幅度x(n)');

MATLAB上机考试题(一)

(1)在MATLAB的命令窗口中执行_____命令,将命令窗口的显示内容清空。() A.clear B.clc C.echo off D.cd (2)在MATLAB的命令窗口中执行_____命令,使数据输出显示为十六进制表示。() A.format long B.format rat C.format hex D.format short e (3)下列变量名中_____是合法的。() A.x*y,a,1 B.x\y,a1234 C.end,1 bcx D.char_1,i,j (4)已知x=0:5,则x有_____个元素。() A.5 B.6 C.7 D.8 (5)一下运算符中哪个的优先级最高_____。() A./ B.^ C.~= D.& (6)使用检测函数isnumeric(10)的结果是_____。() A.1 B.0 C.false D.true (7)三维图形中默认视角是_____度。() A.方位角=0 俯仰角=90 B.方位角=90 俯仰角=0 C.方位角=37.5 仰俯角=30 D.方位角=0 仰俯角=180 (8)将符号表达式化简为因式分解因式分解因式分解因式分解形式,使用_____函数。() A.collect B.expand C.horner D.factor (9)运行以下命令,则_____描述是正确的。()>>syms a b c d >>A=[a b;c d] A.A占用的内存小于100B B.创建了5个符号变量 C.A占用的内存是a b c d的总和 D.不存在 (10)已知数组a=[1 2 3;4 5 6;7 8 9],则a(:,end)是指_____元素。 (11)运行命令bitor(8,7)的结果是_____。 (12)运行以下命令: >>x=0:10; >>y1=sin(x); >>y2=5*sin(x); >>y3=[10*sin(x );20*sin(x)]; >>plot(x,y1,x,y2,x,y3) 则在一个图形窗口中,可以看到_____条曲线。 (13)符号表达式“g=sym(sin(a*z)+cos(w*v))”中的自由符号变量是_____。 (14)运行以下命令: >>syms t >>f1=1/t >>limitf1_r=limit(f1,'t','0','right'); 则函数limitf1_r趋向0的右极限为_____。 15.在MATLAB的命令窗口中执行______命令,使数值5.3显示为5.300000000000000e+000 A. format long B. format long e C. format short D. format short e 16.下列变量名中______是合法的。A.char_1,i,j B.1_1, a.1 C.x\y,a1234 D.end,1bcx 17.已知x=0:9,则x有_____个元素。 A.12 B.11 C.10 D.9 18.产生对角线上为全1其余为0的2行3列矩阵的命令是______ A. ones(2,3) B. ones(3,2) C. eye(2,3) D. eye(3,2) 19.已知数组a= [1 2 3 4 5 6 7 8 9] ,则运行a(:,1)=[]命令后______ A. a变成行向量 B. a数组为2行2列 C. a 数组为3行2列 D. a数组中没有元素3 20.按含义选出各个函数名:表示4舍5入到整数的是____,表示向最接近0取整的是____,表示向最接近-∞取整的是____,表示向最接近∞取整的是_____ A. round(x) B. fix(x) C. floor(x) D. ceil(x) 21.已知a=0:5,b=1:6,下面的运算表达式出错的为______ A. a+b B. a./b C. a’*b D. a*b 22.已知s=’显示”hello”’,则s的元素个数是______ A. 12 B. 9 C. 7 D.18

数字信号处理的MATLAB实现

昆明理工大学信息工程与自动化学院学生实验报告 (2011—2012 学年第二学期) 课程名称:数字信号处理开课实验室:信自楼111 2012 年 5 月 31 日年级、专业、班生医学号姓 名 成绩 实验项目名称数字信号处理的matlab 实现指导教师 教 师 评语教师签名: 年月日 一.实验目的 熟练掌握matlab的基本操作。 了解数字信号处理的MATLAB实现。 二.实验设备 安装有matlab的PC机一台。 三.实验内容 .1.求信号x(n)=cos(6.3Пn/3)+cos(9.7Пn/30)+cos(15.3Пn/30),0≤n≤29的幅度频谱. 2. 用冲击响应不变法设计一个Butterworth低通数字滤波器,要求参数为: Wp=0.2Пαp=1dB Ws=0.3Пαs=15dB 3.用双线性变换法设计一个Chebyshev高通IIR滤波器,要求参数为: Wp=0.6Пαp=1dB Ws=0.4586Пαs=15dB 4.用窗函数法设计一个低通FIR滤波器,要求参数为: Wp=0.2Пαp=0.3dB Ws=0.25Пαs=50dB 5.用频率抽样法设计一个带通FIR滤波器,要求参数为: W1s=0.2П W1p=0.35П W2p=0.65П W2s=0.8П αs=60dB αp=1dB 6.根据 4 点矩形序列,( n ) = [1 1 1 1] 。做 DTFT 变换,再做 4 点 DFT 变换。然后分别补零做 8 点 DFT 及 16 点 DFT。 7.调用filter解差分方程,由系统对u(n)的响应判断稳定性 8编制程序求解下列系统的单位冲激响应和阶跃响应。 y[n]+ 0.75y[n -1]+ 0.125y[n -2] = x[n]- x[n -1] 四.实验源程序 1. n=[0:1:29]; x=cos(6.3*pi*n/30)+cos(9.7*pi*n/30)+cos(15.3*pi*n/30);

Matlab 上机题及答案

1 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。 for m=100:999 m1=fix(m/100); %求m的百位数字 m2=rem(fix(m/10),10); %求m的十位数字 m3=rem(m,10); %求m的个位数字 if m==m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m) end end 2.从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。 sum=0; n=0; val=input('Enter a number (end in 0):'); while (val~=0) sum=sum+val; n=n+1; val=input('Enter a number (end in 0):'); end if (n > 0) sum mean=sum/n end 3. 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。 for m=1:500 s=0; for k=1:m/2 if rem(m,k)==0 s=s+k; end end if m==s disp(m); end end 4. 从键盘上输入数字星期,在屏幕上显示对应英文星期的单词。 function week n=input('input the number:'); if isempty(n) errror('please input !!')

end if n>7|n<1 error('n between 1 and 7') end switch n case 1 disp('Monday') case 2 disp('Tuesday') case 3 disp('Wednesday') case 4 disp('Thursday') case 5 disp('Friday') case 6 disp('Saturday') case 7 disp('Sunday') end 5. 某公司销售电脑打印机的价格方案如下: ()如果顾客只买一台打印机,则一台的基本价格为$150。 ()如果顾客购买两台以上打印机,则第二台价格为$120。 ()第三台以后,每台$110。 写一段程序分别计算出购买1--10台打印机所需的钱数。打印机台数可以在程序开始处指定,或通过input命令读入。运行程序,计算出购买10台打印机的总价格。 写出程序,生成分别购买1--10台打印机所需价格的图表(使用fprintf命令输出图表,不允许手算)。 x=input('请输入购买的打印机台数:'); for m=1:x if m<=1 y(m)=150*m; elseif m<=2 y(m)=150+120*(m-1); else y(m)=150+120+110*(m-2); y(1,m)=y(m); end end y(x) plot(1:m,y,'r*--')

相关文档
最新文档