matlab信号处理相关函数程序

matlab信号处理相关函数程序
matlab信号处理相关函数程序

序列的傅里叶变换及其逆变换定义:

)(|)(|)()(ω?ωωω

j j n n j j e e X e

n x e X ==∑∞-∞=- 1(n)(e )e 2jw jwn x X dw π

ππ-=?

其幅度特性为|)(|ωj e X ,在Matlab 中采用abs 函数;相位特性为)(ω?,在Matlab 中采用angle 函数。

为了方便,考虑在两个周期,例如[ππ2,2-]中2M+1个均匀频率点上计算FT ,并且观察其周期性和对称性。为此给出function 文件如下,求解FT 变换:

function [X,w]=ft(x,n,k)

%X :序列x(n)的傅里叶变换

%w :X 的自变量

%x :要进行傅里叶变换的序列x(n)

%n :序列x(n)的位置向量

%k :求和区间

w=(pi/abs(max(k)/2))*k;

X=x*(exp(-1i*pi/abs(max(k)/2))).^(n'*k);

使用方法如下:

n=-5:5;%序列区间

x=(-0.9).^n;%序列表达式

k=-200:200;%求和区间

[Xw,w]=ft(x,n,k);%求傅里叶变换

magX=abs(Xw);%求幅度

angX=angle(Xw);%求相位

realX=real(Xw);

imagX=imag(Xw);

subplot(2,2,1)

plot(w/pi,magX)%绘制幅度曲线

grid on

title('幅度曲线')

xlabel('\omega/\pi')

ylabel('幅度')

xmin=0;

xmax=2;

set(gca,'xlim',[xmin,xmax],'ylimmode','auto','zlimmode','auto'); %xmin xmax 为范围 subplot(2,2,2)

plot(w/pi,angX/pi) %绘制相位曲线

grid on

title('相位曲线')

xlabel('\omega/\pi')

ylabel('相位')% angle(X)/pi

xmin=0;

xmax=2;

set(gca,'xlim',[xmin,xmax],'ylimmode','auto','zlimmode','auto'); %xmin xmax 为范围 subplot(2,2,3)

plot(w/pi,realX) %绘制实部曲线

grid on

title('实部曲线')

xlabel('\omega/\pi')

ylabel('实部')

xmin=0;

xmax=2;

set(gca,'xlim',[xmin,xmax],'ylimmode','auto','zlimmode','auto'); %xmin xmax 为范围 subplot(2,2,4)

plot(w/pi,imagX) %绘制虚部曲线

grid on

title('虚部曲线')

xlabel('\omega/\pi')

ylabel('虚部')

xmin=0;

xmax=2;

set(gca,'xlim',[xmin,xmax],'ylimmode','auto','zlimmode','auto'); %xmin xmax 为范围

序列的DFT 及IDFT 定义:

∑∑-=-=-==10102)()()(N n N n nk N j nk N e

n x W n x k X π

21100

11(n)(k)W (k)e N N j nk nk N N k k x X X N N π---====∑∑ 离散傅里叶变换的的性质:

(1)DFT 的共轭对称性。若)()()(n x n x n x op ep +=,[])()(n x DFT k X =,则:)()]([k X n x DFT R ep =, )()]([k jX n x DFT I op =。

(2)实序列DFT 的性质。若)(n x 为实序列,则其离散傅里叶变换)(k X 为共轭对称,即10),()(*-≤≤-=N k k N X k X 。

(3)实偶序列DFT 的性质。若)(n x 为实偶序列,则其离散傅里叶变换)(k X 为实偶对称,即10),()(-≤≤-=N k k N X k X 。

(4)实奇序列DFT 的性质。若)(n x 为实奇序列,则其离散傅里叶变换)(k X 为纯虚奇对称,即10),()(-≤≤--=N k k N X k X 。

离散傅立叶变换函数

function [Xk,k]=dft(xn,N)

n=0:1:N-1;

k=0: N-1;

WN=exp(-1j*2*pi/N);

nk=n'*k;

WNnk=WN.^(nk);

Xk=xn*WNnk; %采用矩阵相乘的方法

magX=abs(Xk);

k=(0:length(magX)-1)*N/length(magX);

离散傅立叶反变换函数

function [xn]=idft(Xk,N)

n=0:1:N-1;

k=0:1:N-1;

WN=exp(-1j*2*pi/N);

nk=n'*k;

WNnk=WN.^(-nk);

xn=(Xk*WNnk)/N;

使用方法如下:

1、序列的傅里叶变换及离散傅里叶变换计算

N=5;

n=0:4;

x=[ones(1,5)]; %产生矩形序列

k=0:999;w=(pi/500)*k;

X=x*(exp(-j*pi/500)).^(n'*k); %计算序列的傅立叶变换

Xe=abs(X);

subplot(3,2,1);stem(n,x);ylabel('x(n)');

subplot(3,2,2);plot(w/pi,Xe);ylabel('|X(ejw)|'); %画出序列的傅立叶变换X=dft(x,N); %进行5点DFT

magX=abs(X);

k=(0:length(magX)'-1)*N/length(magX);

subplot(3,2,3);stem(n,x);ylabel('x(n)');

subplot(3,2,4);stem(k,magX);

axis([0,5,0,5]);ylabel('|X(k)|');

2、序列产生及其DFT

N=20;

n=0:N-1;

x=2*cos(0.25*pi*n)+cos(0.65*pi*n);

subplot(2,1,1);stem(n,x);title('N=20时的信号');

Y=dft(x,N);

k1=0:N-1;w1=2*pi/N*k1;

subplot(2,1,2);stem(w1/pi,abs(Y));title('信号的频谱');

FFT 算法计算矢量xn 的离散傅立叶变换

一维快速傅立叶变换函数 fft

Xk=fft(xn,N) xn 为时域序列向量,N 是DFT 变换区间长度。

当N 大于xn 的长度时,fft 函数自动在xn 后面补零。函数返回xn 的N 点DFT 变换结果向量Xk 。当N 小于xn 的长度时,fft 函数计算xn 的前面N 个元素构成的N 长序列的N 点DFT ,忽略xn 后面的元素。

当x 为矩阵时,Xk 为矩阵xn 的每一列的FFT ,fft 函数按类似的方法处理列长度。 当xn 的长度为2的幂次方时,则fft 采用基2的FFT 算法,否则采用稍慢的混合基算法。 一维快速傅立叶反变换 ifft

xn=ifft(Xk,N) Xk 的N 点IFFT

xn=ifft(Xk) 用于计算矢量Xk 的IFFT

使用方法如下:

M=26;N=32;n=0:M;

xa=0:M/2;

xb=ceil(M/2)-1:-1:0;

xn=[xa,xb];%产生M 长三角波序列x(n)

Xk=fft(xn,512);%512点FFT

X32k=fft(xn,32);%32点FFT

x32n=ifft(X32k);%32点IFFT 得到x32(n)

X16k=X32k(1:2:N);%隔点抽取X32k 得到X16k

x16n=ifft(X16k,N/2); %16点IFFT 得到x16(n)

连续信号的傅里叶变换及其逆变换定义:

(w)(t)e jwt F f dt ∞

--∞=

?

1(t)(w)e 2jwt f F dw π∞-∞=?

Fw=fourier(ft,t,w)%求时域函数ft 的Fourier 变换Fw

Ft=ifourier(Fw,w,t)%求频域函数Fw 的Fourier 逆变换ft

使用方法如下:

syms t w

ut=heaviside(t);%单位阶跃函数

Uw=fourier(ut,t,w);%傅里叶变换

SUt=simple(Uw);%化简

Inv_ut=ifourier(Uw,w,t);%傅里叶逆变换

ezplot(w,Uw)%绘制傅里叶变换曲线

title('傅里叶变换曲线')

grid on

因果序列的Z 变换及其逆变换定义:

X(z)x(n)z

n n ∞-=-∞=

∑ 11x(n)(z)z 2n c X dz j π-=?

Xz=ztrans(xn,n,z)%求时域序列xn 的Z 变换Xz

xn=iztrans(Xz,z,n)%求频域序列Xz 的Z 逆变换xn

使用方法如下:

syms n w T z

xn=sin(w*n*T);%定义序列

Xz=ztrans(xn,n,z);%Z 变换

Inv_xn=iztrans(Xz,z,n);%Z 逆变换

连续信号的单边拉普拉斯变换及其逆变换定义:

0_(s)(t)e st F f dt ∞

-=

? 1(t)(s)e ,02j st j f F ds t j σσπ+∞

-∞

=>? Fs=laplace(ft,t,s)%求时域函数ft 的Laplace 变换Fs

ft=ilaplace(Fs,s,t)%求频域函数Fs 的Laplace 逆变换ft

使用方法如下:

syms t s

syms a positive

ft=dirac(t);%单位冲激函数

Fs=laplace(ft,t,s);%拉普拉斯变换

Inv_ft=ifourier(Fs,s,t);%拉普拉斯逆变换

线性常系数差分方程的递推求解

00(n i)(n i)N M i i

i i a y b x ==-=-∑∑ 0,1a =

求差分方程的零状态响应和全响应函数

yn=filter(B,A,xn) 计算系统对输入信号向量xn 的零状态响应输出信号向量yn ,yn 与xn 长度相等,其中,B 和A 是差分方程的系数向量,即01[b ,b ,,b ]M B = ,其中01a =,如果01a ≠,

则filter 用0a 对系数向量B 和A 归一化。

yn=filter(B,A,xn,xi) 计算系统对输入信号向量xn 的全响应输出信号yn 。其中,xi 是等效初始条件的输入序列,所以xi 是由初始条件确定的。

xi=filtic(B,A,ys,xs) 其中,ys 和xs 是初始条件向量:ys=[y(-1),y(-2),y(-3),…,y(-N)],xs=[x(-1),x(-2),y(-3),…,x(-M)]。如果xn 是因果序列,则xs=0,调用时可缺省xs 。 使用方法如下:

%调用filter 解差分方程y(n)-ay(n-1)=x(n)

a=0.8;ys=1; %设差分方程系数a=0.8,初始状态:y(-1)=1 xn=[1,zeros(1,30)]; %x(n)=单位脉冲序列,长度N=31

B=1;A=[1,-a]; %差分方程系数

xi=filtic(B,A,ys); %由初始条件计算等效初始条件的输入序列xi yn=filter(B,A,xn,xi); %调用filter 解差分方程,求系统输出函数y(n)

n=0:length(yn)-1;

stem(n,yn,'.')

xlabel('n');ylabel('y(n)')

离散系统函数定义:

00(z)(z)(z)M i i i N i

i

i b z Y H X a z -=-===∑∑ 系统的因果性:其单位脉冲响应h(n)是因果序列,满足n<0时,h(n)=0

或 其系统函数H(z)的收敛域包含无穷点

系统的稳定性:其单位脉冲响应h(n)绝对可和,即

|h(n)|n ∞=-∞<∞∑

或 其系统函数H(z)的收敛域包含单位圆 系统稳定性判定函数 stab(A)

function stab(A)

%stab :系统稳定性判定函数,A 是H(z)的分母多项式系数向量

disp('系统极点为:')

P=roots(A)%求H(z)的极点,并显示

disp('系统极点模的最大值为:')

M=max(abs(P))%求所有极点模的最大值,并显示

if M<1

disp('系统稳定')

else

disp('系统不稳定')

end

零、 极点及频率响应曲线

zplane(B,A) 绘制出系统函数H(z)的零极点图。其中B 和A 为系统函数H(Z)的分子和分母

多项式系数向量。 假设11(z)(1)(2)z (M 1)z (z)(z)(1)(2)z (N 1)z M N B B B B H A A A A ----++++==++++

B=[B(1),B(2),...,B(M+1)], A=[A(1),A(2),...,A(N+1)]

H=freqz(B,A,w) 计算由向量w 指定的数字频率点上数字滤波器H(z)的频率响应H(jw e ),结果存于H 向量中。

[H,w]=freqz(B,A,M) 计算出M 个点上的频率响应,存于H 向量中,M 个频率响应存于w 向量中,频率范围自动均匀设在[0,π]上。

[H,w]=freqz(B,A,M,’whole ’) 频率范围自动均匀设在[0,2π]上。

freqz(B,A) 自动选取512个频率点计算,频率范围自动均匀设在[0,π]上。不带输出向量的freqz 函数将自动绘出幅频响应和相频响应曲线,频率和相位是线性坐标,幅频响应为对数坐标。

使用方法如下:

B=[1,0,0,0,0,0,0,0,-1];A=1;%设置系统函数系数向量B 和A

subplot(2,2,1)

zplane(B,A);%绘制零极点图

title('零极点图')

[H,w]=freqz(B,A);%计算频率响应

subplot(2,2,2)

plot(w/pi,abs(H)/max(abs(H)))%绘制幅频响应曲线

xlabel('\omega/\pi')

ylabel('幅度')

title('幅频特性曲线')

axis([0,1,0,2.5])

grid on

subplot(2,2,4)

plot(w/pi,angle(H))%绘制相频响应曲线

xlabel('\omega/\pi')

ylabel('相位')

title('相频特性曲线')

grid on

实序列分解函数

% 实序列可分解为共扼对称分量 ]n ))-x ((N [x (n )*(1/2)x e c N +=

% 和共扼反对称分量 ]n ))-x ((N -[x (n )*(1/2)xoc N =

function [xec,xoc]=circevod(x)

N=length(x);

n=0:(N-1);

xec=0.5*(x+x(mod(-n,N)+1)); % mod 取余,例如 mod(4,5)=4, mod(-4,5)= mod(5-4,5)=1

xoc=0.5*(x-x(mod(-n,N)+1));

序列的卷积定义:

1212(n)(m)(n m)x (n)*x (n)y x x ∞

-∞=-=∑

序列的卷积函数 convu(x1,n1,x2,n2)

function [y,ny]=convu(x1,n1,x2,n2)

%convu 通用卷积函数

%y 为卷积结果序列向量,ny 是y 的位置向量

%x1和x2是有限长序列

%n1和n2分别是x1和x2的位置向量

nys=n1(1)+n2(1);

nyf=n1(end)+n2(end);

y=conv(x1,x2);

ny=nys:nyf;

用重叠相加法计算序列线性卷积

y=fftfilt(h,x,M) 其中,h 是系统单位脉冲响应向量,x 是输入序列向量,y 是系统的输出序列向量(h 与x 的卷积结果),M 是由用户选择的输入序列x 的分段长度,缺省M 时,默认输入序列x 的分段长度M=512。

使用方法如下:

Lx=41;N=5;M=10; %Lx 为序列x(n)长度

hn=ones(1,N);hn1=[hn,zeros(1,Lx-N)]; %产生h(n),其后补零是为了绘图好看

n=0:L-1;

xn=cos(pi*n/10)+cos(2*pi*n/5); %产生x(n)的Lx 个样值

yn=ftfilt(hn,xn,M) %用重叠相加法计算卷积

连续信号的卷积定义:

1212(t)()f (t )d (t)*(t)f f f f τττ∞

-∞=

-=?

连续信号的卷积函数 sconv(f1,k1,f2,k2,p)

function [f,k]=sconv(f1,k1,f2,k2,p)

%计算连续信号卷积f(t)=f1(t)*f2(t)

%f :卷积f(t)对应的非零样值向量

%k :f(t)对应的时间向量

%f1:f1(t)的非零样值向量

%k1:f1(t)对应的时间向量

%f2:f2(t)的非零样值向量

%k2:f2(t)对应的时间向量

%p :抽样时间间隔

f=conv(f1,f2); %计算f1(t)和f2(t)的卷积和f(t)

f=f*p;

k0=k1(1)+k2(1); %计算f(t)非零样值得起点位置

k3=length(f1)+length(f2)-2;%计算卷积和f(t)的非零样值的宽度

k=k0:p:k3*p;%确定卷积和f(t)非零样值的时间向量

subplot(2,2,1)

plot(k1,f1) %在子图1绘制f1(t)的时域波形图

title('f1(t)')

xlabel('t')

ylabel('f1(t)')

grid on

subplot(2,2,2)

plot(k2,f2)%在子图2绘制f2(t)的时域波形图

title('f2(t)')

xlabel('t')

ylabel('f2(t)')

grid on

subplot(2,2,3)

plot(k,f);%在子图3绘制卷积和f(t)的时域波形图

h=get(gca,'position') ;

h(3)=2.5*h(3);

set(gca,'position',h)%将第三个子图的横坐标范围扩大为原来的2.5倍

title('f(t)=f1(t)*f2(t)')

xlabel('t')

ylabel('f(t)')

grid on

序列的循环移位函数 N m n x n y ))(()(-=

function y=cirshftt(x,m,N)

if length(x)>N

error('N mustbe >= the length of x') %要求移位周期大于信号长度

end

x=[x zeros(1,N-length(x))];

n=[0:1:N-1];

n=mod(n-m,N);

y=x(n+1);

时域循环卷积定理:

设有限长序列为)(1n x 和)(2n x ,它们的N 点DFT 分别为)(1k X 和)(2k X ,如果)()()(21k X k X k X ?=,则其IDFT 为两序列的循环卷积1

120()IDFT[()]()(())()N N N m x n X k x m x n m R n -===-∑。

计算两序列的循环卷积函数 1

120(n)[(m)x ((n m))]R (n)L c L L m y x -==-∑

function y=circonv(x1,x2,N)

%循环卷积的长度N 应大于等于max(length(x1),length(x2))

if length(x1)>N

error('N must be >= the length of x1')

end

if length(x2)>N

error('N must be >= the length of x2')

end

x1=[x1 zeros(1,N-length(x1))]; %将序列补0成为N 长序列

x2=[x2 zeros(1,N-length(x2))];

m=[0:1:N-1];

x3=x2(mod(-m,N)+1); %该语句的功能相当于序列翻褶,延拓,取主值序列

H=zeros(N,N);

for n=1:1:N %得到x3序列的循环移位矩阵

H(n,:)=cirshftt(x3,n-1,N);

end

y=x1*H' %用矩阵相乘的方法得到结果

信噪比

设纯净信号为)(n s ,噪声信号为)(n v ,带噪信号为)(n x ,则信噪比的定义如式(4-2)所示,单位为dB 。

21

21

0|)(|1|)(|1log 10∑∑-=-==N n N n n v N n s N SNR (4-2) function y=snr(x0,xn)

%计算信噪比,单位dB

%x0是纯净信号,xn 是带噪信号

p0=sum(abs(x0).^2); %sum 函数为求和

y=10*log10(p0/(sum(abs(xn-x0).^2)));

序列的基本运算

%1.单位取样序列x(n)=delta(n-n0) 要求n1<=n0<=n2 function [x,n]=impseq(n0,n1,n2)

n=[n1:n2];

x=[(n-n0)==0];

%2.单位阶跃序列x(n)=u(n-n0) 要求n1<=n0<=n2 function [x,n]=stepseq(n0,n1,n2)

n=[n1:n2];

x=[(n-n0)>=0];

%3.信号加y(n)=x1(n)+x2(n)

function [y,n]=sigadd(x1,n1,x2,n2)

%find函数:找出非零元素的索引号

%x1:第一个序列的值,n1:序列x1的位置向量

%x2:第二个序列的值,n2:序列x2的位置向量

n=min(min(n1),min(n2)):max(max(n1),max(n2));

y1=zeros(1,length(n));

y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

y=y1+y2;

%4.信号乘y(n)=x1(n)*x2(n)

function [y,n]=sigmult(x1,n1,x2,n2)

n=min(min(n1),min(n2)):max(max(n1),max(n2));

y1=zeros(1,length(n));

y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

y=y1.*y2;

%5.移位y(n)=x(n-n0)

function [y,n]=sigshift(x,m,n0)%m:序列x的位置向量n=m+n0;

y=x;

%6.翻褶y(n)=x(-n)

function [y,n]=sigfold(x,n)

y=fliplr(x);

n=-fliplr(n);

特殊的连续函数

单位冲激函数dirac(t)

使用方法如下:

syms t n

dirac(t)

delta=sym('kroneckerDelta(n,0)');%定义单位冲激

单位阶跃函数heaviside(t)

使用方法如下:

syms t

heaviside(t)

录音函数

function record(n,fs,file) %录音函数

%设置n录音时间,采样率fs ,保存文件名file

fprintf('Press any key to start %g seconds of recording...\n',n);

pause;

fprintf('Recording...\n');

y=wavrecord(n*fs,fs,'int16'); %录音

fprintf('Finished recording.\n');

wavwrite(y,fs,file); %保存为文件为file

fprintf('The recording is saved as ');fprintf(file);fprintf('\n');

读取音频

y = wavread(filename) 加载音频文件文件名指定的字符串,返回y的抽样数据。如果不包括一个扩展文件名,wavread默认文件后缀为. wav。

[y, Fs] = wavread(filename) 返回的采样率(Fs)赫兹用于编码中的数据文件。

[y, Fs, nbits] = wavread(filename) 返回每个抽样的比特数(nbits)。

写入音频

wavwrite(y,filename) 把在变量y中的存储数据写入文件名为filename的文件。文件名输入是一个用单引号括起来的字符串。默认数据采样率为8000 Hz和被认为是16位。每一列代表一个单独的数据通道。因此,立体数据应该指定为一个矩阵有两个列。

wavwrite(y,Fs,filename) 把在变量y中的存储数据写入文件名为filename的文件。数据的采样率为Fs赫兹和被认为是16位。

wavwrite(y,Fs,N,filename) 把在变量y中的存储数据写入文件名为filename的文件。数据采样率为Fs赫兹和N位,其中N是8,16、24、32。

播放音频

sound(y,Fs) 以采样率Fs播放音频信号y。如果你不指定采样率,默认为8192赫兹。单通道(单声道)音频,y是一个米长、1列向量,m是音频样本的数量。如果你的系统支持立体声播放,y是一个m-by-2矩阵,第一列对应于左声道,和第二列对应于右声道。声音功能假设y 包含-1和1之间的浮点数,和剪辑范围之外的值。

sound(y,Fs,bits) 指定的位深度(即精度)的样本值。位深度的可能的值取决于可用的音频硬件系统上。大多数平台支持8位或16位的深度。如果你不指定位,声音功能在一个8位深度。

wavplay(y,Fs) 播放存储的音频信号向量y。Fs是整数采样率,单位是Hz。Fs的默认值是11025赫兹。wavplay只支持1 或2声道音频(单声道或立体声)信号。在立体声,y必须是一个两列矩阵。

使用方法如下:

[y,fs]=wavread('sound.wav');%读取音频文件

L=length(y);%采样点数

T=L/fs;%采样时间

fprintf('按任意键播放原录音及波形\n');

pause;

plot(y); %画图

title('原信号8000Hz波形')

wavplay(y,fs);

fprintf('录音频率:%g Hz\n',fs);

fs1=16000;

L1=T*fs1;

B1=L/L1;

y1=0*(1:L1);

for i=1:L1

y1(i)=y(ceil(i*B1));%重新采样

end

wavwrite(y1,fs1,'sound1.wav'); %保存为文件为sound1.wav

y1=wavread('sound1.wav');%读取音频文件

fprintf('按任意键播放采样频率%g Hz录音及波形\n',fs1);

pause;

plot(y1); %画图

title('采样信号16000Hz波形')

wavplay(y1,fs1);

fs2=8000;

L2=T*fs2;

B2=L/L2;

y2=0*(1:L2);

for i=1:L2

y2(i)=y(ceil(i*B2));%重新采样

end

wavwrite(y2,fs2,'sound2.wav'); %保存为文件为sound2.wav

y2=wavread('sound2.wav');%读取音频文件

fprintf('按任意键播放采样频率 %g Hz 录音及波形\n',fs2);

pause;

plot(y2); %画图

title('采样信号8000Hz 波形')

wavplay(y2,fs2);

示例

1、令||1000)(t a e t x -=,绘制其傅立叶变换)(Ωj X a 。用不同频率对其进行采样,分别画出)(ωj e X 。

Dt=0.00005; %步长为0.00005s

t=-0.005:Dt:0.005;

xa=exp(-1000*abs(t));%取时间从-0.005s 到0.005s 这段模拟信号 Wmax=2*pi*2000; %信号最高频率为2 *2000

K=500; %频域正半轴取500个点进行计算

k=0:1:K;

W=k*Wmax/K;%求模拟角频率

Xa=xa*exp(-1j*t'*W)*Dt;%计算连续时间傅立叶变换(利用矩阵运算实现) Xa=real(Xa);%取实部

W=[-fliplr(W),W(2:501)];%将角频率范围扩展为从-到+

Xa=[fliplr(Xa),Xa(2:501)];

subplot(3,2,1);

plot(t*1000,xa); %画出模拟信号,横坐标为时间(毫秒),纵坐标为幅度 xlabel('time(millisecond)');ylabel('xa(t)');

title('anolog signal');

subplot(3,2,2);

plot(W/(2*pi*1000),Xa*1000);%画出连续时间傅立叶变换

xlabel('frequency(kHZ)'); %横坐标为频率(kHz )

ylabel('xa(jw)');%纵坐标为幅度

title('FT');

%下面为采样频率1kHz时的程序

T1=0.001; %采样间隔为

n=-25:1:25;

x1=exp(-1000*abs(n*T1)); %离散时间信号

K=500;k=0:1:K;w1=pi*k/K; %w为数字频率

X1=x1*exp(-1i*n'*w1);%计算离散时间傅立叶变换(序列的傅立叶变换)

X1=real(X1);

w1=[-fliplr(w1),w1(2:K+1)];

X1=[fliplr(X1),X1(2:K+1)];

subplot(3,2,3);

stem(n*T1*1000,x1,'.','MarkerSize',15); %画出采样信号(离散时间信号)xlabel('time(millisecond)');

ylabel('x1(n)');

title('discrete signal');

subplot(3,2,4);

plot(w1/pi,X1);%画出离散时间傅立叶变换

xlabel('frequency(radian)');%横坐标为弧度

ylabel('x1(jw)');title('DTFT');

matlab中常见函数功用

⊙在matlab中clear,clc,clf,hold作用介绍 clear是清变量, clc只清屏, clf清除图形窗口上的旧图形, hold on是为了显示多幅图像时,防止新的窗口替代旧的窗口。 ①format:设置输出格式 对浮点性变量,缺省为format short. format并不影响matlab如何计算和存储变量的值。对浮点型变量的计算,即单精度或双精度,按合适的浮点精度进行,而不论变量是如何显示的。对整型变量采用整型数据。整型变量总是根据不同的类(class)以合适的数据位显示,例如,3位数字显示显示int8范围-128:127。 format short, long不影响整型变量的显示。 format long 显示15位双精度,7为单精度(scaled fixed point) format short 显示5位(scaled fixed point format with 5 digits) format short eng 至少5位加3位指数 format long eng 16位加至少3位指数 format hex 十六进制 format bank 2个十进制位 format + 正、负或零 format rat 有理数近似 format short 缺省显示 format long g 对双精度,显示15位定点或浮点格式,对单精度,显示7位定点或浮点格式。 format short g 5位定点或浮点格式 format short e 5位浮点格式 format long e 双精度为15位浮点格式,单精度为7为浮点格式 ②plot函数 基本形式 >> y=[0 0.58 0.70 0.95 0.83 0.25]; >> plot(y) 生成的图形是以序号为横坐标、数组y的数值为纵坐标画出的折线。 >> x=linspace(0,2*pi,30); % 生成一组线性等距的数值 >> y=sin(x); >> plot(x,y) 生成的图形是上30个点连成的光滑的正弦曲线。 多重线 在同一个画面上可以画许多条曲线,只需多给出几个数组,例如 >> x=0:pi/15:2*pi; >> y=sin(x); >> w=cos(x);

基于Matlab的脑电波信号处理

做脑电波信号处理滴嘿嘿。。Matlab addicted Codes %FEATURE EXTRACTER function [features] = EEGfeaturetrainmod(filename,m) a = 4; b = 7; d = 12; e = 30; signals = 0; for index = 1:9; % read in the first ten EEG data because the files are numbered as ha11test01 rather than ha11test1. s = [filename '0' num2str(index) '.dat']; signal = tread_wfdb(s); if signals == 0; signals = signal; else signals = [signals signal]; end end for index = 10:1:m/2; % read in the rest of the EEG training data s = [filename num2str(index) '.dat']; signal = tread_wfdb(s); if signals == 0;

signals = signal; else signals = [signals signal]; end end %%%%% modification just for varying the training testing ratio ------ for index = 25:1:25+m/2; % read in the rest of the EEG training data s = [filename num2str(index) '.dat']; signal = tread_wfdb(s); if signals == 0; signals = signal; else signals = [signals signal]; end end %%%%%end of modification just for varying the training testing ratio----- for l = 1:m % exrating features (power of each kind of EEG wave forms) [Pxx,f]=pwelch(signals(:,l)-mean(signals(:,l)), [], [], [], 200); % relative power fdelta(l) = sum(Pxx(find(fa))); falpha(l) = sum(Pxx(find(fb))); fbeta(l) = sum(Pxx(find(fd))); fgama(l)= sum(Pxx(find(f>e))); % gama wave included for additional work

matlab与信号 处理知识点

安装好MATLAB 2012后再安装目录下点击setup.exe 会出现 "查找安装程序类时出错,查找类时出现异常"的错误提示。该错误的解决方法是进入安装目录下的bin 文件夹双击matlab.exe 对安装程序进行激活。这是可以对该matlab.exe 创建桌面快捷方式,以后运行程序是直接双击该快捷方式即可。 信号运算 1、 信号加 MATLAB 实现: x=x1+x2 2、 信号延迟 y(n)=x(n-k) 3、 信号乘 x=x1.*x2 4、 信号变化幅度 y=k*x 5、 信号翻转 y=fliplr(x) 6、 信号采样和 数学描述:y=∑=2 1)(n n n n x MATLAB 实现: y=sum(x(n1:n2)) 7、 信号采样积 数学描述:∏==2 1)(n n n n x y MATLAB 实现: y=prod(x(n1:n2)) 8、 信号能量 数学描述:∑∞ -∞ == n x n x E 2 | )(| MATLAB 实现:Ex=sum(abs(x)^2)

9、 信号功率 数学描述:∑-== 1 2 | )(|1 P N n x n x N MATLAB 实现:Px=sum((abs(x)^2)/N MATLAB 窗函数 矩形窗 w=boxcar(n) 巴特利特窗 w=bartlett(n) 三角窗 w=triang(n) 布莱克曼窗 w=blackman(n) w=blackman(n,sflag) 海明窗 w=haiming(n) W=haiming(n,sflag) sflag 用来控制窗函数首尾的两个元素值,其取值为symmetric 、periodic 汉宁窗 w=hanning(n) 凯塞窗 w=Kaiser(n,beta) ,beta 用于控制旁瓣的高度。n 一定时,beta 越大,其频谱的旁瓣越小,但主瓣宽度相应增加;当beta 一定时,n 发生变化,其旁瓣高度不变。 切比雪夫窗:主瓣宽度最小,具有等波纹型,切比雪夫窗在边沿的采样点有尖峰。 W=chebwin(n,r)

信号处理实验一:用matlab描述基本信号

哈尔滨工程大学 实验报告 实验名称:用matlab描述基本信号 班级:电子信息工程4班 学号: 姓名: 实验时间:2016年10月10日 成绩:________________________________ 指导教师:栾晓明 实验室名称:数字信号处理实验室哈尔滨工程大学实验室与资产管理处制

实验一用matlab 描述基本信号 一、 冲激信号 1、 原理: 最简单的信号是(移位的)单位冲激信号: δ[n -n 0] = ? ??≠=00 0 1n n n n (3.1) 在MA TLAB 中产生冲激信号,必须先确定所关注信号部分的长度。如果准备用冲激信 号δ[n ]来激励因果LTI 系统,可能需要观察从n = 0到n = L -1总共L 个点。若选择L = 31,下面的MA TLAB 代码将产生一个“冲激信号”。 1. L = 31; 2. nn = 0 : (L-1); 3. imp = zeros(L, 1); 4. imp(1) = 1; 注意,根据MA TLAB 编址约定,n =0标号必须对应imp(1)。 例:产生移位冲激信号程序(函数文件) function [x,n] = impseq(n0,n1,n2) % 产生 x(n) = delta(n-n0); n1 <=n0 <= n2 % ---------------------------------------------- % [x,n] = impseq(n0,n1,n2) % if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error('参数必须满足 n1 <= n0 <= n2') end n = [n1:n2]; %x = [zeros(1,(n0-n1)), 1, zeros(1,(n2-n0))]; x = [(n-n0) == 0]; 以上函数文件可以产生指定区间内的冲激移位脉冲。 例1—1:调用这个函数文件生成并绘制: x(n) = 2δ[n+2]-δ[n -4] -5≤ n ≤ 5 程序 % x(n) = 2*delta(n+2) - delta(n-4), -5<=n<=5 n = [-5:5]; x = 2*impseq(-2,-5,5)-impseq(4,-5,5); stem(n,x); title('例 2.1a 的序列图') ylabel('x(n)'); axis([-5,5,-2,3]);text(5.5,-2,'n')

(完整版)matlab函数大全(非常实用)

信源函数 randerr 产生比特误差样本 randint 产生均匀分布的随机整数矩阵 randsrc 根据给定的数字表产生随机矩阵 wgn 产生高斯白噪声 信号分析函数 biterr 计算比特误差数和比特误差率 eyediagram 绘制眼图 scatterplot 绘制分布图 symerr 计算符号误差数和符号误差率 信源编码 compand mu律/A律压缩/扩张 dpcmdeco DPCM(差分脉冲编码调制)解码dpcmenco DPCM编码 dpcmopt 优化DPCM参数 lloyds Lloyd法则优化量化器参数 quantiz 给出量化后的级和输出值 误差控制编码 bchpoly 给出二进制BCH码的性能参数和产生多项式convenc 产生卷积码 cyclgen 产生循环码的奇偶校验阵和生成矩阵cyclpoly 产生循环码的生成多项式 decode 分组码解码器 encode 分组码编码器 gen2par 将奇偶校验阵和生成矩阵互相转换gfweight 计算线性分组码的最小距离 hammgen 产生汉明码的奇偶校验阵和生成矩阵rsdecof 对Reed-Solomon编码的ASCII文件解码rsencof 用Reed-Solomon码对ASCII文件编码rspoly 给出Reed-Solomon码的生成多项式syndtable 产生伴随解码表 vitdec 用Viterbi法则解卷积码 (误差控制编码的低级函数) bchdeco BCH解码器 bchenco BCH编码器 rsdeco Reed-Solomon解码器 rsdecode 用指数形式进行Reed-Solomon解码 rsenco Reed-Solomon编码器 rsencode 用指数形式进行Reed-Solomon编码 调制与解调

基于MATLAB的语音信号处理系统设计(程序+仿真图)--毕业设计

语音信号处理系统设计 摘要:语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科。语音信号处理的目的是得到某些参数以便高效传输或存储,或者是用于某种应用,如人工合成出语音、辨识出讲话者、识别出讲话内容、进行语音增强等。本文简要介绍了语音信号采集与分析以及语音信号的特征、采集与分析方法,并在采集语音信号后,在MATLAB 软件平台上进行频谱分析,并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。利用MATLAB来读入(采集)语音信号,将它赋值给某一向量,再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波,然后我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化。 关键词:Matlab,语音信号,傅里叶变换,滤波器 1课程设计的目的和意义 本设计课题主要研究语音信号初步分析的软件实现方法、滤波器的设计及应用。通过完成本课题的设计,拟主要达到以下几个目的: 1.1.了解Matlab软件的特点和使用方法。 1.2.掌握利用Matlab分析信号和系统的时域、频域特性的方法; 1.3.掌握数字滤波器的设计方法及应用。 1.4.了解语音信号的特性及分析方法。 1.5.通过本课题的设计,培养学生运用所学知识分析和解决实际问题的能力。 2 设计任务及技术指标 设计一个简单的语音信号分析系统,实现对语音信号时域波形显示、进行频谱分析,

利用滤波器滤除噪声、对语音信号的参数进行提取分析等功能。采用Matlab设计语言信号分析相关程序,并且利用GUI设计图形用户界面。具体任务是: 2.1.采集语音信号。 2.2.对原始语音信号加入干扰噪声,对原始语音信号及带噪语音信号进行时频域分析。 2.3.针对语音信号频谱及噪声频率,设计合适的数字滤波器滤除噪声。 2.4.对噪声滤除前后的语音进行时频域分析。 2.5.对语音信号进行重采样,回放并与原始信号进行比较。 2.6.对语音信号部分时域参数进行提取。 2.7.设计图形用户界面(包含以上功能)。 3 设计方案论证 3.1语音信号的采集 使用电脑的声卡设备采集一段语音信号,并将其保存在电脑中。 3.2语音信号的处理 语音信号的处理主要包括信号的提取播放、信号的重采样、信号加入噪声、信号的傅里叶变换和滤波等,以及GUI图形用户界面设计。 Ⅰ.语音信号的时域分析 语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析的目的就在与方便有效的提取并表示语音信号所携带的信息。语音信号分析可以分为时域和变换域等处理方法,其中时域分析是最简单的方法。 Ⅱ.语音信号的频域分析 信号的傅立叶表示在信号的分析与处理中起着重要的作用。因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。另外,傅立叶表示使信号的某些特性变得更明显,因此,它能更

MATLAB信号处理例题

◆例1设方波的数学模型为: ]5sin 513sin 31[sin 4)(000 t t t E t f T ,基频: T 20 用MATLAB 软件完成该方波的合成设计 ◆ MATLAB 源程序 t=-10:0.1:10; %设定一个数组有201个点,方波周期为20 e=5;w=pi/10; %设定方波幅值为5,w 代表w0 m=-5*sign(t); %给定幅值为5的方波函数 y1=(-4*e/pi)*sin(w*t); %计算1次谐波 y3=(-4*e/pi)*(sin(w*t)+sin(3*w*t)/3); %计算3次谐波 y5=(-4*e/pi)*(sin(w*t)+sin(3*w*t)/3+sin(5*w*t)/5); %计算5次谐波 plot(t,y1,'y');hold; grid; %用黄色点线画出1次谐波及网格线,并在同一张图上画其余曲线 plot(t,y3,'g'); %用绿色点线画出3次谐波 plot(t,y5,'b'); %用蓝色点线画出5次谐波 plot(t,m,'-k'); %用黑色实线画方波 title('方波合成');xlabel('t');ylabel('f(t)'); %为图形加上标题 n=50; %合成任意次方波,n 决定方波的合成次数,在此给定50 yn=0; %设置初始值 for i=1:n yn=yn+(-4*e/pi)*(1/(2*i-1))*sin((2*i-1)*w*t); end; %计算n 次谐波合成 plot(t,yn,'r') %用红色实线画出n 次谐波合成 ◆ 从图中我们可以看到Gibbs 现象。在函数的间断点附近,增加傅里叶级数的展开次数,虽然可以使其间断点附近的微小振动的周期变小,但振幅却不能变小。此现象在控制系统表现为:当求控制系统对阶跃函数的响应时,超调量总是存在的。

基于Matlab的语音信号处理与分析

系(院)物理与电子工程学院专业电子信息工程题目语音信号的处理与分析 学生姓名 指导教师 班级 学号 完成日期:2013 年5 月 目录 1 绪论 (3) 1.1课题背景及意义 (3) 1.2国内外研究现状 (3) 1.3本课题的研究内容和方法 (4) 1.3.1 研究内容 (4) 1.3.2 开发环境 (4) 2 语音信号处理的总体方案 (4) 2.1 系统基本概述 (4) 2.2 系统基本要求与目的 (4) 2.3 系统框架及实现 (5) 2.3.1 语音信号的采样 (5) 2.3.2 语音信号的频谱分析 (5) 2.3.3 音乐信号的抽取 (5) 2.3.4 音乐信号的AM调制 (5) 2.3.5 AM调制音乐信号的同步解调 (5) 2.4系统设计流程图 (6) 3 语音信号处理基本知识 (6) 3.1语音的录入与打开 (6)

3.2采样位数和采样频率 (6) 3.3时域信号的FFT分析 (7) 3.4切比雪夫滤波器 (7) 3.5数字滤波器设计原理 (8) 4 语音信号实例处理设计 (8) 4.1语音信号的采集 (8) 4.3.1高频调制与低频调制 (10) 4.3.2切比雪夫滤波 (11) 4.3.3 FIR滤波 (11) 5 总结 (12) 参考文献 (13) 语音信号的处理与分析 【摘要】语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。 Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。信号处理是Matlab重要应用的领域之一。 本设计针对现在大部分语音处理软件内容繁多、操作不便等问题,采用MATLAB7.0综合运用GUI界面设计、各种函数调用等来实现语音信号的变频、变幅、傅里叶变换及滤波,程序界面简练,操作简便,具有一定的实际应用意义。 最后,本文对语音信号处理的进一步发展方向提出了自己的看法。 【关键词】Matlab 语音信号傅里叶变换低通滤波器

matlab函数用法

A a abs 绝对值、模、字符的ASCII码值 acos 反余弦 acosh 反双曲余弦 acot 反余切 acoth 反双曲余切 acsc 反余割 acsch 反双曲余割 align 启动图形对象几何位置排列工具 all 所有元素非零为真 angle 相角 ans 表达式计算结果的缺省变量名 any 所有元素非全零为真 area 面域图 argnames 函数M文件宗量名 asec 反正割 asech 反双曲正割 asin 反正弦 asinh 反双曲正弦 assignin 向变量赋值 atan 反正切 atan2 四象限反正切 atanh 反双曲正切 autumn 红黄调秋色图阵 axes 创建轴对象的低层指令 axis 控制轴刻度和风格的高层指令 B b bar 二维直方图 bar3 三维直方图 bar3h 三维水平直方图 barh 二维水平直方图 base2dec X进制转换为十进制 bin2dec 二进制转换为十进制 blanks 创建空格串 bone 蓝色调黑白色图阵 box 框状坐标轴 break while 或for 环中断指令 brighten 亮度控制 C c

capture (3版以前)捕获当前图形 cart2pol 直角坐标变为极或柱坐标 cart2sph 直角坐标变为球坐标 cat 串接成高维数组 caxis 色标尺刻度 cd 指定当前目录 cdedit 启动用户菜单、控件回调函数设计工具cdf2rdf 复数特征值对角阵转为实数块对角阵ceil 向正无穷取整 cell 创建元胞数组 cell2struct 元胞数组转换为构架数组 celldisp 显示元胞数组内容 cellplot 元胞数组内部结构图示 char 把数值、符号、内联类转换为字符对象chi2cdf 分布累计概率函数 chi2inv 分布逆累计概率函数 chi2pdf 分布概率密度函数 chi2rnd 分布随机数发生器 chol Cholesky分解 clabel 等位线标识 cla 清除当前轴 class 获知对象类别或创建对象 clc 清除指令窗 clear 清除内存变量和函数 clf 清除图对象 clock 时钟 colorcube 三浓淡多彩交叉色图矩阵 colordef 设置色彩缺省值 colormap 色图 colspace 列空间的基 close 关闭指定窗口 colperm 列排序置换向量 comet 彗星状轨迹图 comet3 三维彗星轨迹图 compass 射线图 compose 求复合函数 cond (逆)条件数 condeig 计算特征值、特征向量同时给出条件数condest 范-1条件数估计 conj 复数共轭 contour 等位线 contourf 填色等位线 contour3 三维等位线

语音信号处理matlab实现

短时能量分析matlab源程序: x=wavread('4.wav'); %计算N=50,帧移=50时的语音能量 s=fra(50,50,x);%对输入的语音信号进行分帧,其中帧长50,帧移50 s2=s.^2;%一帧内各种点的能量 energy=sum(s2,2);%求一帧能量 subplot(2,2,1); plot(energy) xlabel('帧数'); ylabel('短时能量E'); legend('N=50'); axis([0,500,0,30]) %计算N=100,帧移=100时的语音能量 s=fra(100,100,x); s2=s.^2; energy=sum(s2,2); subplot(2,2,2); plot(energy) xlabel('帧数'); ylabel('短时能量E'); legend('N=100'); axis([0,300,0,30]) %计算N=400,帧移=400时的语音能量 s=fra(400,400,x); s2=s.^2; energy=sum(s2,2); subplot(2,2,3); plot(energy) xlabel('帧数'); ylabel('短时能量E'); legend('N=400'); axis([0,60,0,100]) %计算N=800,帧移=800时的语音能量 s=fra(800,800,x); s2=s.^2; energy=sum(s2,2); subplot(2,2,4); plot(energy) xlabel('帧数'); ylabel('短时能量E'); legend('N=800'); axis([0,30,0,200]) 分帧子函数: function f=fra(len,inc,x) %对读入语音分帧,len为帧长,inc为帧重叠样点数,x为输入语音数据 fh=fix(((size(x,1)-len)/inc)+1);%计算帧数 f=zeros(fh,len);%设一个零矩阵,行为帧数,列为帧长 i=1;n=1; while i<=fh %帧间循环 j=1; while j<=len %帧内循环 f(i,j)=x(n); j=j+1;n=n+1; end n=n-len+inc;%下一帧开始位置 i=i+1; end

matlab各种函数的用法

1 Text函数的用法: 用法 text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string text(x,y,z,'string') 在三维图形空间中的指定位置(x,y,z)上显示字符串string 2, plot([0,z1,z12],'-b','LineWidth',3)[ ]里面表示数组. 3, x,y均为矩阵,plot命令就是画出x,y矩阵对应的二维平面的点形成的曲线。y(:,1)中逗号前是行,逗号后是列,冒号表示从几到几。所以y(:,1)表示第一列的所有元素。如果是y(3:5,1)则表示第一列的第3到第5行对应的元素。只要你的y矩阵有100列,那你当然可以将1改成100。同理,x矩阵也可以这样。 4 sym的意思是symbol,就是后面括号里面是个代数式,要进行符号运算,class()判断对象是什么类型。 5 matlab控制运算精度用的是digits和vpa这两个函数 xs = vpa(x,n) 在n位相对精度下,给出x的数值型符号结果xs xs = vpa(x) 在digits指定的精度下,给出x的数值型符号结果xs

digits用于规定运算精度,比如: digits(20); 这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用,因为实际编程中,我们可能有些运算需要控制精度,而有些不需要控制。vpa就用于解决这个问题,凡是用需要控制精度的,我们都对运算表达式使用vpa函数。例如: digits(5); a=vpa(sqrt(2)); 这样a的值就是1.4142,而不是准确的1.4880 又如: digits(5); a=vpa(sqrt(2)); b=sqrt(2); 这样a的值是1.4142,b没有用vpa函数,所以b是1.4880...... 6

基于MATLAB的语音信号采集与处理

工程设计论文 题目:基于MATLAB的语音信号采集与处理 姓名: 班级: 学号: 指导老师:

一.选题背景 1、实践意义: 语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析的目的就在于方便有效地提取并表示语音信号所携带的信息。所以理解并掌握语音信号的时域和频域特性是非常重要的。 通过语音相互传递信息是人类最重要的基本功能之一.语言是人类特有的功能.声音是人类常用工具,是相互传递信息的最重要的手段.虽然,人可以通过多种手段获得外界信息,但最重要,最精细的信息源只有语言,图像和文字三种.与用声音传递信息相比,显然用视觉和文字相互传递信息,其效果要差得多.这是因为语音中除包含实际发音容的话言信息外,还包括发音者是谁及喜怒哀乐等各种信息.所以,语音是人类最重要,最有效,最常用和最方便的交换信息的形式.另一方面,语言和语音与人的智力活动密切相关,与文化和社会的进步紧密相连,它具有最大的信息容量和最高的智能水平。 语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,处理的目的是用于得到某些参数以便高效传输或存储;或者是用于某种应用,如人工合成出语音,辨识出讲话者,识别出讲话容,进行语音增强等. 语音信号处理是一门新兴的学科,同时又是综合性的多学科领域,

是一门涉及面很广的交叉学科.虽然从事达一领域研究的人员主要来自信息处理及计算机等学科.但是它与语音学,语言学,声学,认知科学,生理学,心理学及数理统计等许多学科也有非常密切的联系. 语音信号处理是许多信息领域应用的核心技术之一,是目前发展最为迅速的信息科学研究领域中的一个.语音处理是目前极为活跃和热门的研究领域,其研究涉及一系列前沿科研课题,巳处于迅速发展之中;其研究成果具有重要的学术及应用价值. 数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。具有灵活、精确、抗干扰强、度快等优点。 数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,Infinite Impulse Response)滤波器。 FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能

Matlab滤波信号处理函数

Matlab滤波信号处理函数 2009-12-04 19:32:22| 分类:matlab方法| 标签:|字号大中小订阅 1 conv 功能:求卷积。 格式:c = conv(a,b) 说明:c = conv(a,b)返回向量a、b的卷积c。 举例:a = [1 2 3] b = [4 5 6] c = conv(a,b) c= 4 13 28 27 18 2 impz 功能:数字滤波器的冲激响应。 格式:[h,t] = impz(b,a) [h,t] = impz(b,a,n) [h,t] = impz(b,a,n,Fs) impz(b,a) impz(...) 说明:[h,t] = impz(b,a)返回系统(b,a)的冲激响应h和相应的时间轴向量t,b、a分别为系统传递函数的分子和分母系数向量。

[h,t] = impz(b,a,n)返回指定的n点冲激响应 [h,t] = impz(b,a,n,Fs)指定了冲激响应采样点的频率间隔1/Fs。Fs 为相对频率, 缺省值为1。 impz(b,a)和impz(...)绘制冲激响应的图形。 举例:计算线性系统(b,a)的冲激响应,结果见图1.4.1。 b =[0.2 0.1 0.3 0.1 0.2]; a =[1 ?.1 1.55 ?.7 0.3]; impz(b,a,50) 3 zplane 功能:离散系统的零极点图。 格式:zplane(z,p) zplane(b,a) 说明:zplane(z,p)和zplane(b,a)绘制系统的零极点图,用“o”表示零点,“x”表示 极点。z、p分别为零点和极点向量,b、a分别为系统传递函数的分子和分母 系数向量。 举例:计算线性系统(b,a)的零点和极点,结果见图1.4.2。 b =[0.2 0.1 0.3 0.1 0.2]; a =[1.0 -1.1 1.5 -0.7 0.3]; zplane(b,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基本函数的用法

一. Matlab中常见函数基本用法 1.sum (1 )sum(A)A为矩阵得出A矩阵每列的和组成的一个矢量; A为矢量得出A的各元 素之和 (2)sum(diag(A))得矩阵A的对角元素之和 (3)sum(A,dim) A为矩阵,sum(A,1)按列求和;sum(A,2)按行求和 2.max(min) (1)max(A) 若A为矩阵则得出A矩阵每列的最大元素组成的一个矢量 若A为矢量则得出A中最大的元 (2)max(A,B) A与B为同维矩阵得出取A 与B中相同位置元素中较大者组成的新矩阵 (3)max(A,[],dim) max(a,[ ],1),求每列的最大值;max(a,[ ],2)求每行的最大值 3.find (1)find(X)若X为行向量则得出X中所有非零元素所在的位置(按行)若X为列向量或矩阵则得出X中所有非零元素的位置(按列)(2)ind = find(X, k)/ind = find(X,k,'first') 返回前k个非零元的指标ind = find(X,k,'last') 返回后k个非零元的指标 (3)[row,col] = find(X) row代表行指标,col代表列指标 [row,col,val] = find(X) val表示查找到对应位置非零元的值 [row,col] = find(A>100 & A<1000) 找出满足一定要求的元素 4.reshape (1)B = reshape(A,m,n) 把A变成m*n的矩阵 5.sort (1)B = sort(A) 把A的元素按每列从小到大的顺序排列组成新矩阵

(2)B = sort(A,dim) dim=1同(1); dim=2 把A按每行从小到大的顺序排列组成新矩阵 6.cat (1)C = cat(dim, A, B) dim=1相当于[A;B];dim=2相当于[A,B] (2)C = cat(dim, A1, A2, A3, A4, ...) 类推(1) 7.meshgrid (1)[X,Y] = meshgrid(x,y) 将向量x和y定义的区域转换成矩阵X和Y,矩阵X的行向量是向量x的简单复制,而矩阵Y的列向量是向量y的简单复制。(2)[X,Y] = meshgrid(x) (1)y=x中情形 8.diag (1)X = diag(v,k) 向量v作为X的第k对角线上的元素X的其他元素为零(2)X = diag(v) (1)中k=0的情况 (2)v = diag(X,k) v为矩阵X的第k对角线的元素组成的列向量 (4)v = diag(X) (3)中k等于零的情况

实验一 基于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实现信号的AM调制与解调

郑州轻工业学院 课程设计任务书 题目利用MATLAB实现信号的AM调制与解调专业、班级电子信息工程级班学号姓名 主要内容、基本要求、主要参考资料等: 主要内容: 利用MATLAB对信号 () () ?? ? ? ?≤ = 其他 ,0 t , 100 2t t Sa t m 进行AM调制,载波信号 频率为1000Hz,调制深度为0.5。t0=0.2;首先在MATLAB中显示调制信号的波形和频谱,已调信号的波形和频谱,比较信号调制前后的变化。然后对已调信号解调,并比较解调后的信号与原信号的区别。 基本要求: 1、掌握利用MATLAB实现信号AM调制与解调的方法。 2、学习MATLAB中信号表示的基本方法及绘图函数的调用,实现对常用连续时间信号的可视化表示。 3、加深理解调制信号的变化;验证信号调制的基本概念、基本理论,掌握信号与系统的分析方法。 主要参考资料: 1、王秉钧等. 通信原理[M].北京:清华大学出版社,2006.11 2、陈怀琛.数字信号处理教程----MATLAB释义与实现[M].北京:电子工业出版社,2004. 完成期限:2014.6.9—2014.6.13 指导教师签名: 课程负责人签名: 2014年6月5日

目录 摘要 (1) 1.matlab简介 (2) 1.1matlab基本功能 (2) 1.2matlab应用 (2) 2.系统总体设计方案 (4) 2.1调制信号 (4) 2.1.1 matlab实现调制信号的波形 (4) 2.1.2 matlab实现调制信号的频谱 (4) 2.1.3 matlab实现载波的仿真 (5) 2.2信号的幅度调制 (6) 2.2.1信号的调制 (6) 2.2.2幅度调制原理 (6) 2.2.3 matlab实现双边带幅度调制 (8) 2.2.4 matlab实现已调信号的频谱图 (8) 2.2.5 幅度调制前后的比较 (9) 2.3已调信号的解调 (9) 2.3.1 AM信号的解调原理及方式 (9) 2.3.2 matlab实现已调信号的解调 (11) 2.3.3信号解调前后的比较 (12) 结论与展望 (13) 参考文献 (14) 附录 (15)

matlab信号处理学习总结

常用函数 1 图形化信号处理工具,fdatool(滤波器设计),fvtool(图形化滤波器参数查看)sptool (信号处理),fvtool(b,a),wintool窗函数设计.或者使用工具箱 filter design设计。当使用离散的福利叶变换方法分析频域中的信号时,傅里叶变换时可能引起漏谱,因此 需要采用平滑窗, 2数字滤波器和采样频率的关系。 如果一个数字滤波器的采样率为 FS,那么这个滤波器的分析带宽为Fs/2。也就是说这 个滤波器只可以分析[0,Fs/2]的信号.举个例字: 有两个信号,S1频率为20KHz,S2频率为40KHz,要通过数字方法滤除S2。 你的滤波器的采样率至少要为Fs=80HKz,否则就分析不到 S2了,更不可能将它滤掉 了!(当然根据采样定理,你的采样率 F0也必须大于80HK,,Fs和 F0之间没关系不大,可以任取,只要满足上述关系就行。) 3 两组数据的相关性分析 r=corrcoef(x,y) 4 expm 求矩阵的整体的 exp 4 离散快速傅里叶 fft信号处理中,傅里叶变换的典型用途是将信号分解成幅值分量和频率分量)。Ft为连续傅里叶变换。反傅里叶 ifft 5 ztrans(),Z变换是把离散的数字信号从时域转为频率 6 laplace()拉普拉斯变换是把连续的的信号从时域转为频域 7 sound(x)会在音响里产生 x所对应的声音 8 norm求范数,det行列式,rank求秩 9 模拟频率,数字频率,模拟角频率关系 模拟频率f:每秒经历多少个周期,单位Hz,即1/s; 模拟角频率Ω是指每秒经历多少弧度,单位rad/s; 数字频率w:每个采样点间隔之间的弧度,单位rad。 Ω=2pi*f; w = Ω*T 10 RMS求法 Rms = sqrt(sum(P.^2))或者norm(x)/sqrt(length(x) var方差的开方是std标准差,RMS应该是norm(x)/sqrt(length(x))吧. 求矩阵的RMS:std(A(:)) 11 ftshift 作用:将零频点移到频谱的中间 12 filtfilt零相位滤波, 采用两次滤波消除系统的非线性相位, y = filtfilt(b,a,x);注意x的长度必须是滤波器阶数的3倍以上,滤波器的 阶数由max(length(b)-1,length(a)-1)确定。 13 [h,t]=impz(b,a,n,fs),计算滤波器的冲激响应 h为n点冲击响应向量 [h,x]=freqz(b,a,n,fs)计算频响,有fs时,x为频率f,无fs,x为w角频率, 常用于查看滤波器的频率特性 14 zplane(z,p) 画图零极点分布图 15 beta=unwarp(alpha) 相位会在穿越+-180发生回绕,可将回绕的 16 stepz 求数字滤波器的阶跃响应 [h,t] = stepz(b,a,n,fs) fvtool(b1,a1,b2,a2,...bn,an) fvtool(Hd1,Hd2,...) h = fvtool(...) 15 IIR数字滤波器设计方法 1 先根据已知带同参数求出最佳滤波器阶数和截止频率 [n,Wn] = buttord(Wp,Ws,Rp,Rs);

相关文档
最新文档