信号与系统实验报告

(实验报告)

班级:    自动化一班 

姓名:      韩晓晖

学号:    20134317

    

西南交通大学信息科学与技术学院

二〇##年五月二十日

实验一    连续时间信号的采样

一、  实验目的

进一步加深对采样定理和连续信号傅立叶变换的理解。

二、  实验步骤

1.复习采样定理和采样信号的频谱

如果采样频率大于有限带宽信号带宽的两倍,即

                                                        

则该信号可以由它的采样值重构。否则就会在中产生混叠。该有限带宽模拟信号的被称为奈奎斯特频率。

必须注意,在被采样以后,表示的最高模拟频率为Hz(或)。

采样信号的频谱为原信号频谱以采样频率为周期的周期延托:

2.熟悉如何用MATLAB语言实现模拟信号表示

严格地说,除了用符号处理工具箱(Symbolics)外,不可能用MATLAB来分析模拟信号。然而如果用时间增量足够小的很密的网格对采样,就可得到一根平滑的曲线和足够长的最大时间来显示所有的模态。这样就可以进行近似分析。令是栅网的间隔且,则

                                               (2)

可以用一个数组来仿真一个模拟信号。不要混淆采样周期和栅网间隔,因为后者是MATLAB中严格地用来表示模拟信号的。类似地,付利叶变换关系也可根据(2)近似为:

                (3)

现在,如果(也就是)是有限长度的。则公式(3)与离散付利叶变换关系相似,因而可以用同样的方式以MATLAB来实现,以便分析采样现象。

三、  实验内容

1. 通过例1熟悉用MATLAB语言实现描绘连续信号的频谱的过程,并在MATLAB语言环境中验证例1的结果;

1   ,求出并绘制其傅立叶变换。

解:根据傅立叶变换公式有

   (4)

因为是一个实偶信号,所以它的傅立叶变换是一个实偶函数。为了用数值方法估计,必须先把用一个栅格序列来近似。

利用,注意可以用一个在(或等效地[-5,5]毫秒)之间的有限长度信号来近似。

类似地从式(4),,当。由此选:

用MATLAB实现例1的程序如下:

% 模拟信号

Dt=0.00005;  t=-0.005:Dt:0.005;  xa=exp(-1000*abs(t));

%连续时间傅立叶变换

Wmax=2*pi*2000;

K=500;

k=0:1:K;

W=k*Wmax/K; Xa=xa*exp(-j*t'*W)*Dt; Xa=real(Xa);

W=[-fliplr(W),W(2:501)];   %频率从-Wmax to Wmax

Xa=[fliplr(Xa),Xa(2:501)];   %Xa 介于 -Wmax Wmax之间

subplot(1,1,1)

subplot(2,1,1);plot(t*1000,xa);

xlabel('t  毫秒');  ylabel('xa(t)');  title('模拟信号')

subplot(2,1,2);

plot(W/(2*pi*1000),Xa*1000);

xlabel('频率(单位:KHz)');  ylabel('Xa(jW)*1000')

title('连续时间傅立叶变换')

图1   例1中的曲线

图1给出了。注意为了减少计算量,这里只在弧度/秒(等效地[0,2]kHz)范围内计算了,然后将它复制到中去以便于绘图。所画出的的图与公式(3)相符。

2. 仿照例2用MATLAB语言实现对连续信号的采样;并验证采样定理。

a.以样本/秒采样得到。求并画出

matlab程序:

Dt=0.00005;

t=-0.005:Dt:0.005;

xa=exp(-1000*abs(2*t));

%离散时间信号

Ts=0.0002;n=-40:1:40;x=exp(-1000*abs(2*n*Ts));

%离散时间傅立叶变换

K=500;

k=0:1:K;

w=pi*k/K;

X=x*exp(-j*n'*w);

X=real(X);

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

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

subplot(1,1,1)

subplot(2,1,1);plot(t*1000,xa);

xlabel('t  毫秒');

ylabel('x1(n)');

title('离散信号');hold on

stem(n*Ts*1000,x);gtext('Ts=0.2毫秒');hold off

subplot(2,1,2);

plot(w/pi,X);

xlabel('以pi为单位的频率');

ylabel('X1(w)');

title('离散时间傅立叶变换');

b.样本/秒采样得到。求并画出

matlab程序:

Dt=0.00005;

t=-0.005:Dt:0.005;

xa=exp(-1000*abs(2*t));

%离散时间信号

Ts=0.0002;n=-5:1:5;x=exp(-1000*abs(2*n*Ts));

%离散时间傅立叶变换

K=500;

k=0:1:K;

w=pi*k/K;

X=x*exp(-j*n'*w);

X=real(X);

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

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

subplot(1,1,1)

subplot(2,1,1);plot(t*1000,xa);

xlabel('t  毫秒');

ylabel('x1(n)');

title('离散信号');hold on

stem(n*Ts*1000,x);gtext('Ts=0.2毫秒');hold off

subplot(2,1,2);

plot(w/pi,X);

xlabel('以pi为单位的频率');

ylabel('X1(w)');

title('离散时间傅立叶变换');

a.以样本/秒采样得到。求并画出

matlab程序:

Dt=0.00005;

t=-0.005:Dt:0.005;

xa=exp(-1000*abs(0.5*t));

%离散时间信号

Ts=0.0002;n=-40:1:40;x=exp(-1000*abs(0.5*n*Ts));

%离散时间傅立叶变换

K=500;

k=0:1:K;

w=pi*k/K;

X=x*exp(-j*n'*w);

X=real(X);

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

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

subplot(1,1,1)

subplot(2,1,1);plot(t*1000,xa);

xlabel('t  毫秒');

ylabel('x1(n)');

title('离散信号');hold on

stem(n*Ts*1000,x);gtext('Ts=0.2毫秒');hold off

subplot(2,1,2);

plot(w/pi,X);

xlabel('以pi为单位的频率');

ylabel('X1(w)');

title('离散时间傅立叶变换');

b.样本/秒采样得到。求并画出

matlab程序:

Dt=0.00005;

t=-0.005:Dt:0.005;

xa=exp(-1000*abs(0.5*t));

%离散时间信号

Ts=0.0002;n=-25:1:25;x=exp(-1000*abs(0.5*n*Ts));

%离散时间傅立叶变换

K=500;

k=0:1:K;

w=pi*k/K;

X=x*exp(-j*n'*w);

X=real(X);

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

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

subplot(1,1,1)

subplot(2,1,1);plot(t*1000,xa);

xlabel('t  毫秒');

ylabel('x1(n)');

title('离散信号');hold on

stem(n*Ts*1000,x);gtext('Ts=0.2毫秒');hold off

subplot(2,1,2);

plot(w/pi,X);

xlabel('以pi为单位的频率');

ylabel('X1(w)');

title('离散时间傅立叶变换');

四、  思考题:

1.通过实验说明信号的时域与频域成反比的关系。

    由图可知,当时域扩大为原来的2倍时,频域变为原来的1/2,当时域变为原来的1/2时,频域扩大到原来的2倍。因此信号的时域与频域成反比。

2.分别求出奈奎斯特采样间隔,并与例1信号的奈奎斯特采样间隔比较

例1中的奈奎斯特采样间隔:。由例一中的公式计算可知的奈奎斯特采样频率分别为8000样本/秒和2000样本/秒,采样间隔分别为,分别为例1中奈奎斯特采样间隔的倍和2倍。

实验二 音乐电子记谱

一、实验目的

       利用Matlab工具分析音频文件的时域和频域特性,利用Matlab工具完成对音频文件升调降调的修改,去噪处理,合成新的音频文件。

二、实验步骤

       分析wav格式音频文件的时域与频域特性。

       利用MATLAB中的wavread命令来读入(采集)语音信号,将它赋值给某一向量。再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析。

语音的录入与打开:

[x,fs,bits]=wavread('d:\1.wav');%用于读取语音,采样值放在向量x中,fs表示采样频率(Hz)bits表示量化位数。sound(x,fs,bits); 用于对声音的回放。向量x则代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。

FFT的MATLAB实现:

MATLAB的信号处理工具箱中函数FFTIFFT用于快速傅立叶变换和逆变换。

三、实验内容

(1) 分别确定乐曲“小星星-降”“小星星-升”的曲调,即Do的基波频率。

matlab程序:

[m,fs]=wavread('D:\音乐电子记谱\小星星_高');

L=length(m);

N=L/32;

m1=m(1:N);

fm1=fft(m1);

f=(0:N/2-1)*fs/N;

plot(f,abs(fm1(1:N/2))/max(abs(fm1)))

grid

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

[m,fs]=wavread('D:\音乐电子记谱\小星星_低');

L=length(m);

N=L/32;

m1=m(1:N);

fm1=fft(m1);

f=(0:N/2-1)*fs/N;

plot(f,abs(fm1(1:N/2))/max(abs(fm1)))

grid

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

(2) 乐音文件P_n1到P_n8是真实钢琴弹奏时录制的C大调八个音节,利用MATLAB分析它们的时频特征,确定钢琴弹奏乐音的包络、幅度。这八个音节含有噪声,试给出去噪的方案,并设计相应的系统。下图为去噪前的P_n1频谱图:

Matlab程序:

function [  ] = music2( fname,sname )

%UNTITLED6 此处显示有关此函数的摘要

%   此处显示详细说明

[y,fs,bits]=wavread(fname);

% sound(y,fs)      % 回放语音信号

n=length(y);  %选取变换的点数

y_zp=fft(y,n);      %对n点进行傅里叶变换到频域

f=fs*(0:n/2-1)/n;   % 对应点的频率

fp=1500;fc=1700;As=100;Ap=1;%通带边缘频率fp,阻带边缘频率fc

%(以上为低通滤波器的性能指标)

wc=2*pi*fc/fs; wp=2*pi*fp/fs;      %数字频率 = 模拟频率/采样频率;

wdel=wc-wp;

beta=0.112*(As-8.7);

N=ceil((As-8)/2.285/wdel);

wn= kaiser(N+1,beta);

ws=(wp+wc)/2/pi;

b=fir1(N,ws,wn);

figure(2);

freqz(b,1);        

%(此前为低通滤波器设计阶段)——接下来为去除噪声信号的程序——

x=fftfilt(b,y);

X=fft(x,n);

figure(3);

subplot(2,2,1);plot(f,abs(y_zp(1:n/2)));

title('滤波前信号的频谱图');

xlabel('频率Hz');

ylabel('频率幅值');

subplot(2,2,2);plot(f,abs(X(1:n/2)));

title('滤波后信号频谱图');

xlabel('频率Hz');

ylabel('频率幅值');

subplot(2,2,3);plot(y);

title('滤波前信号的时域波形')

xlabel('时间轴')

ylabel('幅值 A')

subplot(2,2,4);plot(x);

title('滤波后信号的时域波形')

xlabel('时间轴')

ylabel('幅值 A')

%sound(x,fs,bits)  %回放滤波后的音频

wavwrite(x,fs,bits,sname);

end

用类似的方法可以将信号P_n2-P_n8进行去噪。

四、思考题

(1) 有什么方法可以将“小星星-中”的音乐升高和降低一个八度,用MATLAB实现你的方法。

MATLAB程序:

[x,fs,bits]=wavread('D:\音乐电子记谱\小星星_中');

L=length(x);

N=L/32;

x1=x(1:N);

fx1=fft(x1);

f=(0:N/2-1)*fs/N;

plot(f,abs(fx1(1:N/2))/max(abs(fx1)))

grid

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

sound(x,fs,bits);

x_a=resample(x,1,2);     %升高八度

%sound(x_a,fs,bits);

x_b=resample(x,2,1);     %降低八度

%sound(x_b,fs,bits);

(2) 利用MATLAB去噪过后的P_n1到P_n8合成乐曲“小星星”,用sound函数播放合成乐音,即可听到钢琴演奏曲。

[do,fs,bits]=wavread('D:\P1');

[re,fs,bits]=wavread('D:\P2');

[mi,fs,bits]=wavread('D:\P3');

[fa,fs,bits]=wavread('D:\P4');

[so,fs,bits]=wavread('D:\P5');

[la,fs,bits]=wavread('D:\P6');

[xi,fs,bits]=wavread('D:\P7');

[do1,fs,bits]=wavread('D:\P8');

y=[do;do;so;so;la;la;so;fa;fa;mi;mi;re;re;do1];

sound(y,fs,bits)

相关推荐