Matlab数字信号处理

合集下载

使用Matlab进行数字信号处理的方法与案例

使用Matlab进行数字信号处理的方法与案例

使用Matlab进行数字信号处理的方法与案例1. 引言数字信号处理是一项广泛应用于通信、音频、图像以及其他相关领域的技术。

Matlab作为一种功能强大的数学计算软件,提供了丰富的工具和函数,使得数字信号处理变得更加简单和高效。

本文将会介绍使用Matlab进行数字信号处理的方法和一些实际应用案例。

2. Matlab数字信号处理工具箱Matlab提供了专门的工具箱来支持数字信号处理。

其中最常用的是信号处理工具箱(Signal Processing Toolbox)和图像处理工具箱(Image Processing Toolbox)。

这些工具箱提供了一系列的函数和算法,用于处理和分析数字信号。

3. 数字信号处理基础知识在开始使用Matlab进行数字信号处理之前,有一些基础知识是必须掌握的。

数字信号处理涉及到信号的采样、离散化、滤波、频谱分析等概念。

了解这些基础知识将有助于我们更好地理解和处理信号。

4. 信号生成与操作在Matlab中,可以使用函数生成各种类型的信号。

例如,使用sawtooth函数可以生成锯齿波信号,使用square函数可以生成方波信号。

此外,Matlab还提供了丰富的信号操作函数,例如加法、乘法、卷积等,方便对信号进行进一步处理。

5. 时域和频域分析时域分析用于分析信号在时间上的变化情况,而频域分析则用于分析信号在频率上的分布。

在Matlab中,可以使用fft函数进行快速傅里叶变换,将信号从时域转换到频域。

通过对频域信号进行分析,可以获得信号的频谱分布,进而得到信号的频率特性。

6. 滤波器设计与应用滤波是数字信号处理中常用的技术,用于去除噪声、增强信号等。

Matlab提供了一系列的滤波器设计函数,例如fir1、butter等,可以根据需要设计各种类型的数字滤波器。

使用这些函数可以实现低通滤波、高通滤波、带通滤波等操作。

7. 音频处理案例音频处理是数字信号处理的一个重要应用领域。

在Matlab中,可以使用audioread函数读取音频文件,使用audiowrite函数写入音频文件。

Matlab中的数字信号处理方法与实例

Matlab中的数字信号处理方法与实例

Matlab中的数字信号处理方法与实例数字信号处理是一门研究数字信号在数字域中分析、处理和改变的学科。

Matlab是一种强大的数值计算工具,被广泛应用于信号处理领域。

本文将介绍一些在Matlab中常用的数字信号处理方法与实例,并通过实例来展示它们的应用。

1. 信号的采样与重构信号采样是指将连续时间信号转化为离散时间信号的过程。

在Matlab中,我们可以使用“sample”函数对信号进行采样,并使用“hold”函数对采样后的信号进行重构。

下面是一个示例:```matlabfs = 100; % 采样频率t = 0:1/fs:1; % 时间序列x = sin(2*pi*5*t); % 原始信号subplot(2,1,1);plot(t,x);title('原始信号');xlabel('时间');ylabel('幅值');subplot(2,1,2);stem(t,x);title('采样和重构后的信号');xlabel('时间');ylabel('幅值');```在这个例子中,我们生成了一个频率为5Hz的正弦信号,然后对该信号进行采样和重构。

从结果可以看出,原始信号和重构后的信号基本上是一致的。

2. 信号的频谱分析频谱分析是指将信号从时域转换到频域的过程,可以用来分析信号的频率成分。

在Matlab中,我们可以使用“fft”函数对信号进行傅里叶变换,并使用“abs”函数获取信号的幅度谱。

下面是一个示例,演示如何对信号进行频谱分析:```matlabfs = 100; % 采样频率t = 0:1/fs:1; % 时间序列x = sin(2*pi*5*t); % 原始信号N = length(x); % 信号长度X = fft(x); % 傅里叶变换f = (0:N-1)*(fs/N); % 频率坐标plot(f,abs(X));title('信号的频谱');xlabel('频率');ylabel('幅度');```在这个示例中,我们同样生成了一个频率为5Hz的正弦信号,然后对该信号进行傅里叶变换,并绘制出信号的频谱图。

MATLAB数字信号处理

MATLAB数字信号处理
17
频率响应的实例
• 例:先构成一个截止频率为400Hz的9阶巴特沃思 (Butterworth)低通数字滤波器,求出其系数b,a,再 求出其256点频率响应。指定的采样频率fs =2000Hz。
• 实现1:先调用butter函数,再调用freqz函数;
• 实现2:无返回输出参数,调用freqz函数;
• 使用方法类似freqz函数。 • 与第二章(p32例2-1)采用数组相除方法求取频
率响应相比,使用freqs 函数要方便很多。
23
5.3.2 零极点分析
• zplane 函数用于画出线性系统在Z平面上的零 极点。有两种使用方法: 1、在已知零极点时,例如某滤波器的零点为1/2,一对共轭极点为 0.9ej2(0.3) 和 0.9ej2(0.3) 时, 只要输入命令 zer = -0.5; pol = 0.9*exp(j*2*pi*[-0.3 0.3]'); zplane(zer,pol) 即可画出零极点。 (见p70图5-6)
2
5.2.1 卷积
• MATLAB提供 conv函数实现标准的一维信号卷积 : 例如,若系统h(n)为 >>h=[1 1 1]
输入序列x(n)为 >>x=[1 1 1]
则x(n)经过系统h(n)后的MATLAB实现为: >>conv(h,x) 或 conv([1 1 1], [1 1 1])
执行后即得到y(n)为 ans = 12321
• 如果n、m都大于零,称为ARMA滤波器,而其 冲激响应也为IIR。
7
filter函数
• MATLAB提供了 filter函数来对离散信号进行滤 波,表达信号通过系统后的结果无限冲 激响应系统的情况,但信号仍须是有限长的。

matlab数字信号处理85个实用案例精讲

matlab数字信号处理85个实用案例精讲

matlab数字信号处理85个实用案例精讲MATLAB数字信号处理85个实用案例精讲MATLAB是一种强大的数学软件,广泛应用于数字信号处理领域。

本文将介绍85个实用案例,涵盖了数字信号处理的各个方面,包括信号生成、滤波、频谱分析、时频分析、数字滤波器设计等。

1. 信号生成案例:生成正弦信号在MATLAB中,可以使用sin函数生成正弦信号。

例如,生成频率为100Hz,幅度为1的正弦信号,代码如下:t = 0:0.001:1;f = 100;x = sin(2*pi*f*t);2. 滤波案例:低通滤波低通滤波器可以滤除高频信号,保留低频信号。

在MATLAB中,可以使用fir1函数设计低通滤波器。

例如,设计截止频率为100Hz的低通滤波器,代码如下:fs = 1000;fc = 100;N = 100;b = fir1(N, fc/(fs/2), 'low');3. 频谱分析案例:计算功率谱密度功率谱密度是信号在频域上的能量分布。

在MATLAB中,可以使用pwelch函数计算功率谱密度。

例如,计算频率为100Hz的正弦信号的功率谱密度,代码如下:t = 0:0.001:1;f = 100;x = sin(2*pi*f*t);[Pxx, f] = pwelch(x, [], [], [], 1000);4. 时频分析案例:计算短时傅里叶变换短时傅里叶变换可以分析信号在时间和频率上的变化。

在MATLAB中,可以使用spectrogram函数计算短时傅里叶变换。

例如,计算频率为100Hz的正弦信号的短时傅里叶变换,代码如下:t = 0:0.001:1;f = 100;x = sin(2*pi*f*t);spectrogram(x, [], [], [], 1000, 'yaxis');5. 数字滤波器设计案例:设计巴特沃斯滤波器巴特沃斯滤波器是一种常用的数字滤波器,可以实现平滑滤波和带通滤波。

MATLAB在数字信号处理中的实战应用

MATLAB在数字信号处理中的实战应用

MATLAB在数字信号处理中的实战应用一、引言数字信号处理(DSP)是现代通信、电子、音频、图像等领域中不可或缺的技术。

而MATLAB作为一种功能强大的科学计算软件,其在数字信号处理中的应用也越来越广泛。

本文将对MATLAB在数字信号处理中的实战应用进行探讨。

二、MATLAB在信号处理中的基本功能1. 数字信号的生成与显示MATLAB提供了丰富的信号生成函数,如sin、cos、square、sawtooth等,使得用户可以方便地生成各种类型的信号。

此外,MATLAB还提供了绘图函数,如plot、stem等,能够直观地显示生成的信号。

2. 信号的滤波与去噪滤波是数字信号处理中常用的技术,其目的是去除信号中的噪声或滤除频率不需要的成分。

在MATLAB中,可以利用滤波函数(如fir1、butter、cheby1等)进行信号滤波,同时也可以通过去噪函数(如medfilt1、wiener等)进行噪声去除。

3. 信号的频谱分析频谱分析是对信号进行频域分析的过程,有助于研究信号的频率成分和频率特性。

MATLAB提供了多种频谱分析函数,如fft、periodogram、pwelch等,可以方便地计算信号的频谱,并通过绘图函数(如plot、meshc等)进行展示。

三、MATLAB在音频信号处理中的应用音频信号处理是数字信号处理的一个重要领域,MATLAB在这方面的应用非常广泛。

1. 音频文件的读写与播放MATLAB提供了音频文件读写及播放函数,如audioread、audiowrite、sound 等,可以方便地进行音频文件的读写和播放操作。

这为用户在音频信号处理中进行实时调试提供了便利。

2. 音频信号增强与修复音频信号中常常包含各种噪声,如白噪声、爆裂噪声等,这些噪声会影响音频质量。

MATLAB提供了多种信号增强与修复算法,如均衡器、降噪算法等,可以有效去除音频信号中的噪声,从而提高音频质量。

3. 音频信号的压缩与编码音频信号的压缩与编码是提高音频传输与存储效率的重要手段。

利用Matlab进行数字信号处理与分析

利用Matlab进行数字信号处理与分析

利用Matlab进行数字信号处理与分析数字信号处理是现代通信、控制系统、生物医学工程等领域中不可或缺的重要技术之一。

Matlab作为一种功能强大的科学计算软件,被广泛应用于数字信号处理与分析领域。

本文将介绍如何利用Matlab进行数字信号处理与分析,包括基本概念、常用工具和实际案例分析。

1. 数字信号处理基础在开始介绍如何利用Matlab进行数字信号处理与分析之前,我们首先需要了解一些基础概念。

数字信号是一种离散的信号,可以通过采样和量化得到。

常见的数字信号包括音频信号、图像信号等。

数字信号处理就是对这些数字信号进行处理和分析的过程,包括滤波、频谱分析、时域分析等内容。

2. Matlab在数字信号处理中的应用Matlab提供了丰富的工具箱和函数,可以方便地进行数字信号处理与分析。

其中,Signal Processing Toolbox是Matlab中专门用于信号处理的工具箱,提供了各种滤波器设计、频谱分析、时域分析等功能。

除此之外,Matlab还提供了FFT函数用于快速傅里叶变换,可以高效地计算信号的频谱信息。

3. 数字信号处理实例分析接下来,我们通过一个实际案例来演示如何利用Matlab进行数字信号处理与分析。

假设我们有一个包含噪声的音频文件,我们希望去除噪声并提取出其中的有效信息。

首先,我们可以使用Matlab读取音频文件,并对其进行可视化:示例代码star:编程语言:matlab[y, Fs] = audioread('noisy_audio.wav');t = (0:length(y)-1)/Fs;plot(t, y);xlabel('Time (s)');ylabel('Amplitude');title('Noisy Audio Signal');示例代码end接下来,我们可以利用滤波器对音频信号进行去噪处理:示例代码star:编程语言:matlabDesign a lowpass filterorder = 8;fc = 4000;[b, a] = butter(order, fc/(Fs/2), 'low');Apply the filter to the noisy audio signaly_filtered = filtfilt(b, a, y);Plot the filtered audio signalplot(t, y_filtered);xlabel('Time (s)');ylabel('Amplitude');title('Filtered Audio Signal');示例代码end通过以上代码,我们成功对音频信号进行了去噪处理,并得到了滤波后的音频信号。

数字信号处理MATLAB简介

数字信号处理MATLAB简介

七、MATLAB的矩阵运算
面向矩阵元素的数学函数 如sin(x)表示将矩阵的每一个元素均取正弦。 表示矩阵i行、j列处的元素可用A(i,j)。 表示矩阵i行用A(i,:)。表示矩阵j列用A(:,j)。 面向矩阵的数学函数:在上述面向矩阵元素的数学函数的函数名后加m。如expm。
八、特殊矩阵的实现
六、MATLAB的矩阵运算
矩阵的常用运算 [L,U]=lu(A):矩阵A的LU分解。也有[L,U,P]=LU(A),置换矩阵P满足PA=LU。 [U,S,V]=svd(A):矩阵A的svd分解。 inv(A):矩阵A的逆。 pinv(A,tol):矩阵A的广义逆。tol为判0误差限,若省略,则默认为eps。
二、MATLAB特点
可靠的数值计算、强大而简易图像与图形显示及处理、图形界面设计风格适合科技人员、智能化程度高、功能化程度高、提供与其它高级语言(如C语言和Fortran语言)的接口。MATLAB提供了一个人机交互的数学环境,可进行演草纸式的数学运算。
01
严格地讲,MATLAB不是一种计算机语言。因为其源程序不能编译成可执行文件(较新版本可以),也不能脱离MATLAB环境运行。但从功能上看,可认为是一种解释性语言(对输入命令翻译并执行,然后返回结果,与解释BASIC语言类似 )。
A=zeros(m, n) 产生m×n的0矩阵赋给A A=zeros(sizes(B)) 产生与B同大的0矩阵赋给A A=zeros(n) 产生n×n的0矩阵赋给A。
零矩阵:
A=eye(n) 产生n×n的单位阵赋给A; A=eye(m, n) 产生m×n大的单位阵赋给A; A=eye(sizes(B)) 产生与B同大的单位阵赋给A
三、MATLAB特性
MATLAB的变量命名 变量名对大小写敏感(Sensitive) fruit、Fruit、FrUit及FRUIT中是不同的变量 每个变量名最多有19个字符 变量名的首字符必须是字母 标点符号不能出现在变量名中

使用MATLAB进行数字信号处理的实例介绍

使用MATLAB进行数字信号处理的实例介绍

使用MATLAB进行数字信号处理的实例介绍引言:数字信号处理(Digital Signal Processing, 简称DSP)是一门研究如何以数字形式对信号进行采样、分析和处理的学科。

随着数字技术的快速发展,MATLAB作为一种强大的工具,被广泛应用于数字信号处理的研究和实践中。

本文将通过一些实际例子,介绍如何使用MATLAB进行数字信号处理。

一、信号的采样与重构信号的采样与重构是数字信号处理的基础,它涉及到将连续时间信号转换为离散时间信号,并恢复出原始信号。

我们以音频信号为例,使用MATLAB进行信号采样与重构的处理。

1.1 采样:音频信号可以看作是时间上连续的波形,我们需要将其转换为离散形式。

在MATLAB中,可以使用"audioread"函数读取音频文件,并通过设定采样频率和采样位数,将连续的音频信号转换为离散形式。

1.2 重构:采样得到的离散信号需要恢复到连续形式,MATLAB中可以通过"audiowrite"函数将离散信号重新写入到音频文件,并设定采样频率和采样位数恢复出连续的音频信号。

二、傅里叶变换与频谱分析傅里叶变换是一种将信号从时域转换到频域的方法,它可以将信号分解成不同频率的正弦波成分。

频谱分析是数字信号处理中的重要方法,它可以帮助我们了解信号的频率成分和能量分布。

2.1 单频信号的傅里叶变换:我们以一个简单的单频信号为例,使用MATLAB进行傅里叶变换和频谱分析。

首先,我们可以通过构造一个正弦波信号,并设定频率、振幅和采样频率。

然后使用"fft"函数对信号进行傅里叶变换,得到频谱图。

2.2 音频信号的频谱分析:音频信号是复杂的多频信号,我们可以通过将其进行傅里叶变换,得到其频谱分析结果。

在MATLAB中,可以使用"fft"函数对音频信号进行傅里叶变换,并通过频谱图展示信号的频谱信息。

三、数字滤波器设计与应用数字滤波器是数字信号处理中的关键技术,可以帮助我们去除噪声、提取有效信息,满足不同的信号处理需求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab数字信号处理1、信号的产生2、信号的运算3、差分方程与Z变换4、快速傅里叶变换5、数字滤波器的设计6、使用中的一些技巧、单位阶跃序列x=ones(1,n);n=1:N;y = square(2*pi*30*t);●8、三角波(锯齿波)●sawtooth(t,width);●产生周期为2*pi幅值为正负1的三角波,●width为宽度,取0-1之间的数●例:t = 0:.0001:.0625;●y = sawtooth(2*pi*30*t,1);●plot(t,y);●sawtooth函数类似于sin函数,其中width用于调整三角波峰值位置,sawtooth(t,1)等价于sawtooth(t)。

二、信号的运算●1、信号的延迟●给定信号x(n),若信号y1(n)、y2(n)分别定义为:●y1(n)=x(n-k)●y2(n)=x(n+k)●那么,y1(n)是整个x(n)在时间轴上右移k个时间单位所得到的新序列,y2(n)是整个x(n)在时间轴上左移k个时间单位所得到的结果。

●编程实现:●function [y,n]=sig_shift(x,m,n0)●m为输入x的下标;n0为延迟单位●n=m+n0;●y=x;●2、相加、相乘●x(n)=x1(n)+x2(n);●x(n)=x1(n)*x2(n)●当两个向量相乘时,若用.*表示数组相乘,●此时,x1中对应元素与x2中对应元素相乘,所得结果作为结果数组(矩阵),要求两原始数组中元素个数相同,如果采用*是进行向量(矩阵)的乘法,相加时要求两原始数组中元素个数相同。

●4、信号的折叠●信号折叠就是对x(n)每一项对n=0的纵坐标进行折叠,即: y(n)=x(-n)●y(n)与x(n)关于n=0对称;●y=fliplr(x);●n=-fliplr(n);●在实际应用中,fliplr的主要作用是把序列倒转,●例:x=[1,2,3;4,5,6];●y=fliplr(x);●%y=[3,2,1;6,5,4]●●6、信号的卷积●Matlab提供了内部函数conv来实现两个有限长序列的卷积,该函数假定两个序列的是从n=0开始的。

●例:x=[3,11,7,0,-1,4,2];●h=[2,3,0,-5,2,1];●y=conv(x,h);●%y=[6,31,47,6,-51,-5,41,18,-22,-3,8,2]●(共n+m-1项)●6、信号的相关●(1)两个序列x(n)和y(n)的相关可以看作是x(n)与y(-n)的卷积。

同理,信号x(n)的自相关即为x(n)与x(-n)的卷积。

●(2)xcorr(x)或xcorr(x,y)●例:t=1:5;●y=xcorr(t);●%y=[5,14,6,40,55,40,26,14,5]例:如下离散系统:●它有如下两种形式:●y=filter(b,a,x)●由上图可以知道:b=[0.2,0.1]●a=[1,-0.4,-0.5]●则系统的单位抽样响应为:h=filter(b,a,x)●(2)impz函数实现●Impz(b,a)可以直接得到单位抽样响应,并画出响应图形0.16●2、离散系统的频率响应●Matlab中的freqz函数用来计算由a,b构成系统的频率响应。

●[h,f]=freqz(b,a,n,fs)●例:●clc;●clear;●fs=1000;●b=[0.2 0.1];●a=[1 –0.4 –0.5];●[h,f]=freqz(b,a,256,fs);●mag=abs(h);●ph=angle(h);●ph=ph*180/pi;●figure;●plot(f,mag);●title(‘f-m’);●figure;●plot(f,ph);●title(‘f-p’);快速傅里叶变换在matlab中实现fft很简单,只需要通过命令fft来实现,这里需要注意的是采样频率不要太高,否则频谱的信息被掩盖。

另外,计算所得的序列中第k点所对应的实际频率为,f=k*fs/N,其中N为进行傅利叶变换的点数,fs为采样频率,一般取信号最大频率的3-5倍。

●例:●clc;●clear;●load leleccum;●x=leleccum;●N=length(x);●y=angle(fft(x));●fs=100;●f= (1:N)*fs/N;●plot(f,y);●●(1)巴特沃思数字滤波器的设计●[b,a]=butter(n,wn);●[b,a]=butter(n,wn,’ftype’);……●它得到的是一个阶数为n,截止频率为wn●的低通滤波器。

其中wn是指滤波器的半功率点,取值范围在0-1之间,取1时,为采样频率的一半,如果wn=[w1 w2]为两个元素的向量,函数返回的是阶数为2*n的带通滤波器,通带范围为w1-w2,其中ftype代表滤波器的形式,为high时,为高通滤波器,得到阶数为n,截止频率为wn的,高通滤波器。

为stop时,得到的是阶数为2*n,阻带为w1-w2的带阻滤波器。

●●例:采样频率为1000Hz的采样信号,设计一个10阶带通butter滤波器,通带范围为100-200Hz,并画出冲击响应曲线。

n=5;wn=[100 200]/500;[b,a]=butter(n,wn,’bandpass’);●[y,t]=impz(b,a,101);●stem(t,y);●例:●信号采样频率为1000Hz,设计一个阶数为9,截止频率为300Hz的高通巴特沃思滤波器。

●[b,a]=butter(9,300/500,‘high’);●Freqz(b,a,128,1000);●滤波器的幅频特性与相频特性如下:●(2)切比雪夫法设计滤波器●切比雪夫法设计滤波器可以分为切比雪夫1法和切比雪夫2法两种,这里我们只介绍切比雪夫1法。

●其语法结构为:●[b,a]=cheby1(n,Rp,wn);●[b,a]=cheby1(n,Rp,wn,’ftype’);●……●设计的是一个阶数为n,截止频率为wn,通带波纹衰减为Rp的低通滤波器。

返回值a,b分别是阶数为n+1的向量,表示滤波器系统函数的分母和分子的多项式系数,滤波器的传递函数可以表示为:函数的截止频率wn是指通带的边缘,在那滤波●例:●信号采样频率为1000Hz,设计一个阶数为9,截止频率为300Hz的低通切比雪夫滤波器,其中滤波器在通带的波纹为0.5dB。

●[b,a]=cheby1(9,0.5,300/500);●Freqz(b,a,512,1000);●滤波器的幅频特性与相频特性如下:例:采样频率为1000Hz的采样信号,设计一个10阶带通切比雪夫滤波器,通带范围为100-200Hz,滤波器在通带的波纹为0.5dB,并画出冲激响应曲线。

n=10;Rp=0.5;wn=[100,200]/500;[b,a]=cheby1(n,Rp,wn);[y,t]=impz(b,a,101);stem(t,y);冲激响应曲线如下:布莱克曼窗,海明窗,汉宁窗,以及矩形窗都是广义余弦窗的特殊情形。

这些窗可以看作是频率为0,2pi/(N-1)和4pi/(N-1)的余弦序列的线性组合。

N代表创的长度。

此类窗的生成方法如下:Ind=(0:n-1)’*2*pi/(n-1)W=A-B*cos(ind)+C*cos(2*ind)海明窗和汉宁窗是两项余弦窗,对海明窗:A=0.54,B=0.46,C=0对汉宁窗:A=0.5,B=0.5,C=0布莱克曼窗是三项余弦窗:A=0.42,B=0.5,C=0.08三种窗可通过以下三个函数实现:hamming,hanning,blackman使用中的一些技巧●1、数据的装入与存储●save;load;●2、子函数的编写●3、数据的保存与读取●4、路径设置●5、已有程序参考界面制作●参考书目:精通matlab综合辅导与指南●菜单●控制框●函数回调的考虑●指针和鼠标按钮事件●中断回调的规则●举例●对话框和请求程序菜单●主要包括建立菜单,建立子菜单,去除默认菜单,设置菜单回调函数●clear;●clc;●hf=figure;●%建立窗口并返回句柄hf●set(hf,'menubar','none')●%去除系统菜单●hm=uimenu(hf,'label','我的菜单');●hm_exgrid=uimenu(hm,'label','调用内联函数','callback','alnn')●%建立子菜单’调用回调函数’,并调用函数alnn(自己定义)●function alnn()●t=linspace(0,1,1024);●f=1;●x=sin(2*pi*f*t);●y=cos(2*pi*f*t)●z=x*y’;●surf(t,t,z);录制语音信号的程序●fs=11025;% 采样频率●duration=2;% 录音时间●fprintf(‘按任意键开始%g 秒录音:', duration); pause●fprintf(‘录音中...');●y=wavrecord(duration*fs, fs);% duration*fs 是录音资料点数●fprintf(‘录音结束\n');●fprintf(‘按任意键后开始播放:'); pause●wavplay(y,fs);设计实例1●1、建立一个*.m文件,实现信号发生功能(50Hz正弦)●2、对该信号进行FFT●3、将上述程序转化到子函数中●4、利用按钮调用这两个功能函数,并绘制图形输出●%signal1.m●%==============================●%产生一个频率为50Hz的正弦信号,取样时间t=0~0.2s,取样频率500Hz●clear;●clc;●t=linspace(0,0.2,100);●f=50●%fs=320●x=sin(2*pi*f*t);●plot(t,x);●sinwave=x;●save sinwave;●%==============================●%fftrans.m●%==============================●%提取刚才产生的sinwave信号,对其进行fft,已知信号采样频率500Hz●clear;●clc;●load sinwave●x=sinwave;●%fs=320●N=length(x);●y=abs(fft(x));●f=(1:N)*fs/N●plot(f,y);●%usefunction.m●%==============================●%编制子函数,产生制定频率,幅度,相位的正弦信号,取样时间t=0~0.2s,取样频率为信号频率的10倍●function y=usefunction1(A,f,fai)●fs=10*f;●t=linspace(0,0.2,0.2*fs);●x=A*sin(2*pi*f*t+fai);●plot(t,x);●sinwave_usefunction=x;●save sinwave_usefunction;●save fs;●%fft_usefunction.m●%==============================●function y=usefunction2(x,fs)●N=length(x);●y=abs(fft(x));●f=(1:N)*fs/N●plot(f,y);●fft_usefunction=y;●save fft_usefunction;●%sin_menu.m●%==============================●%建立一个菜单,其有两个子菜单,分别调用上述两个程序●clear;●clc;●hf=figure;●%建立窗口并返回句柄hf●set(hf,'menubar','none')●%去除系统菜单●hm=uimenu(hf,'label','我的菜单');●hm_exgrid=uimenu(hm,‘label’,‘正弦信号,'callback',‘usefunction1(2,50,0)')●load sinwave_usefunction●x= sinwave_usefunction●load fs hm_exgrid=uimenu(hm,'label',‘fft','callback','y=usefunction2(x,fs)')。

相关文档
最新文档