《数字信号处理》上机全部源代码调试通过,完整版

《数字信号处理》上机全部源代码调试通过,完整版
《数字信号处理》上机全部源代码调试通过,完整版

《数字信号处理》上机全部源代码调试通过,完整版

(高西全,第四版)

实验一

%实验1:系统响应及系统稳定性

close all;clear all

%调用fliter解差分方程,由系统对un的响应判断稳定性

%内容1:调用filter解差分方程,由系统对u(n)的响应判断稳定性

A=[1,-0.9];B=[0.05,0.05];

x1n=[1 1 1 1 1 1 1 1 zeros(1,50)];

x2n=ones(1,128);

hn=impz(B,A,58);

subplot(2,2,1);y='h(n)';tstem(hn,y);

title('(a) 系统单位脉冲响应h(n)')

y1n=filter(B,A,x1n);

subplot(2,2,2);y='y1(n)';tstem(y1n,y);

title('(b) 系统对R8(n)的响应y1(n)')

y2n=filter(B,A,x2n);

subplot(2,2,4);y='y2(n)';tstem(y2n, y);

title('(c) 系统对u(n)的响应y2(n)')

y1n=filter(B,A,x1n);

subplot(2,2,2);y='y1(n)';tstem(y1n,y);

title('(b) 系统对R8(n)的响应y1(n)')

y2n=filter(B,A,x2n);

subplot(2,2,4);y='y2(n)';tstem(y2n, y);

title('(c) 系统对u(n)的响应y2(n)')

%内容2:调用conv函数计算卷积

x1n=[1 1 1 1 1 1 1 1]; %产生信号x1n=R8n

h1n=[ones(1,10) zeros(1,10)];

h2n=[1 2.5 2.5 1 zeros(1,10)]

y21n=conv(h1n,x1n);

y22n=conv(h2n,x1n);

figure(2)

subplot(2,2,1);y='h1(n)';tstem(h1n,y);

%调用函数tstem绘图

title('(d) 系统单位脉冲响应h1(n)')

subplot(2,2,2);y='y21(n)';tstem(y21n,y);

title('(e) h1(n)与R8(n)的卷积y21(n)')

subplot(2, 2,3); y='h2(n)';tstem(h2n,y); %调用函数tstem绘图

title('(f) 系统单位脉冲响应h2(n)')

subplot(2, 2, 4); y='y22(n)';tstem(y22n, y);

title('(g) h2(n)与R8(n)的卷积y22(n)')

%=====================================

%内容3:谐振器分析

un=ones(1, 256); %产生信号un

n=0:255;

xsin=sin(0.014*n)+sin(0.4*n); %产生正弦信号

A=[1,-1.8237,0.9801];

B=[1/100.49,0,-1/100.49];

%系统差分方程系数向量B和A

y31n=filter(B,A,un); %谐振器对un的响应y31n y32n=filter(B,A,xsin);

%谐振器对正弦信号的响应y32n

figure(3)

subplot(2,1,1);y='y31(n)';tstem(y31n,y)

title('(h) 谐振器对u(n)的响应y31(n)')

subplot(2,1,2);y='y32(n)';tstem(y32n,y);

title('(i) 谐振器对正弦信号的响应y32(n)')

function tstem(xn,yn)

n = 0:length(xn)-1;

stem(n,xn,'.');

xlabel('n');ylabel('yn');

%xlabel('n' );ylabel(yn);

axis([0,n(end),min(xn),1.2*max(xn)]);

实验二

%时域采样理论验证程序exp2a.m

Tp=64/1000;%观察时间Tp=64微秒

%产生M长采样序列x(n)

% Fs=1000; T=1/Fs;

Fs=1000; T=1/Fs;

M=Tp*Fs; n=0:M-1;

A=444.128; alph=pi*50*2^0.5; omega=pi*50*2^0.5;

xnt=A*exp(-alph*n*T).*sin(omega*n*T);

Xk=T*fft(xnt,M);%M点FFT[xnt)]

yn='xa(nT)';subplot(3,2,1);

tstem(xnt,yn); %调用自编绘图函数tstem绘制序列图

box on; title('(a) Fs=1000Hz');

k=0:M-1; fk=k/Tp;

subplot(3,2,2); plot(fk,abs(Xk));

title('(a) T*FT[xa(nT)],Fs=1000Hz');

xlabel('f(Hz)'); ylabel('幅度');

axis([0,Fs,0,1.2*max(abs(Xk))])

%=================================

% Fs=300Hz和Fs=200Hz的程序与上面Fs=1000Hz的程序完全相同。%%%%%%%%%%%% fs=300Hz

Tp=64/1000;%观察时间Tp=64微秒

%产生M长采样序列x(n)

% Fs=1000; T=1/Fs;

Fs=300; T=1/Fs;

M=Tp*Fs; n=0:M-1;

A=444.128; alph=pi*50*2^0.5; omega=pi*50*2^0.5;

xnt=A*exp(-alph*n*T).*sin(omega*n*T);

Xk=T*fft(xnt,M);%M点FFT[xnt)]

yn='xa(nT)';figure(2);subplot(3,2,1);

tstem(xnt,yn); %调用自编绘图函数tstem绘制序列图

box on; title('(b) Fs=300Hz');

k=0:M-1; fk=k/Tp;

subplot(3,2,2); plot(fk,abs(Xk));

title('(b) T*FT[xa(nT)],Fs=1000Hz');

xlabel('f(Hz)'); ylabel('幅度');

axis([0,Fs,0,1.2*max(abs(Xk))])

%%%%%%%%%%%%%%%%%%% fs=200Hz

Tp=64/1000;%观察时间Tp=64微秒

%产生M长采样序列x(n)

% Fs=1000; T=1/Fs;

Fs=200; T=1/Fs;

M=Tp*Fs; n=0:M-1;

A=444.128; alph=pi*50*2^0.5; omega=pi*50*2^0.5;

xnt=A*exp(-alph*n*T).*sin(omega*n*T);

Xk=T*fft(xnt,M);%M点FFT[xnt)]

yn='xa(nT)';figure(3);subplot(3,2,1);

tstem(xnt,yn); %调用自编绘图函数tstem绘制序列图

box on; title('(c) Fs=200Hz');

k=0:M-1; fk=k/Tp;

subplot(3,2,2); plot(fk,abs(Xk));

title('(c) T*FT[xa(nT)],Fs=1000Hz');

xlabel('f(Hz)'); ylabel('幅度');

axis([0,Fs,0,1.2*max(abs(Xk))])

%频域采样理论验证程序exp2b.m

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

%产生M长三角波序列x(n)

xa=0:floor(M/2); xb= ceil(M/2)-1:-1:0; xn=[xa,xb];

Xk=fft(xn,1024);%1024点FFT[x(n)], 用于近似序列x(n)的TF

X32k=fft(xn,32);%32点FFT[x(n)]

x32n=ifft(X32k);%32点IFFT[X32(k)]得到x32(n)

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

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

subplot(3,2,2);stem(n,xn,'.');box on

title('(b) 三角波序列x(n)');xlabel('n');ylabel('x(n)');axis([0,32,0,20])

k=0:1023;wk=2*k/1024; %

subplot(3,2,1);plot(wk,abs(Xk));title('(a)FT[x(n)]');

xlabel('\omega/\pi');ylabel('|X(e^j^\omega)|');axis([0,1,0,200])

k=0:N/2-1;

subplot(3,2,3);stem(k,abs(X16k),'.');box on

title('(c) 16点频域采样');xlabel('k');ylabel('|X_1_6(k)|');axis([0,8,0,200])

n1=0:N/2-1;

subplot(3,2,4);stem(n1,x16n,'.');box on

title('(d) 16点IDFT[X_1_6(k)]');xlabel('n');ylabel('x_1_6(n)');axis([0,32,0,20]) k=0:N-1;

subplot(3,2,5);stem(k,abs(X32k),'.');box on

title('(e) 32点频域采样');xlabel('k');ylabel('|X_3_2(k)|');axis([0,16,0,200]) n1=0:N-1;

subplot(3,2,6);stem(n1,x32n,'.');box on

title('(f) 32点IDFT[X_3_2(k)]');xlabel('n');ylabel('x_3_2(n)');axis([0,32,0,20])

function tstem(xn,yn)

n = 0:length(xn)-1;

stem(n,xn,'.');

xlabel('n');ylabel('yn');

%xlabel('n' );ylabel(yn);

axis([0,n(end),min(xn),1.2*max(xn)]);

实验三

%实验三程序exp3.m

%用FFT对信号作频谱分析

%clear all;close all

%实验内容(1)================================ x1n=[ones(1,4)];%产生序列向量x1(n)=R4(n)

M=8;xa=1:(M/2); xb=(M/2):-1:1;

x2n=[xa,xb]; %产生长度为8的三角波序列x2(n) x3n=[xb,xa];

X1k8=fft(x1n,8); %计算x1n的8点DFT

X1k16=fft(x1n,16); %计算x1n的16点DFT

X2k8=fft(x2n,8); %计算x1n的8点DFT

X2k16=fft(x2n,16); %计算x1n的16点DFT

X3k8=fft(x3n,8); %计算x1n的8点DFT

X3k16=fft(x3n,16); %计算x1n的16点DFT

%以下绘制幅频特性曲线

subplot(2,2,1);mstem(X1k8);

%绘制8点DFT的幅频特性图

title('(1a) 8点DFT[x_1(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X1k8))])

subplot(2,2,3);mstem(X1k16);

%绘制16点DFT的幅频特性图

title('(1b)16点DFT[x_1(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X1k16))])

figure(2)

subplot(2,2,1);mstem(X2k8);

%绘制8点DFT的幅频特性图

title('(2a) 8点DFT[x_2(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X2k8))])

subplot(2,2,2);mstem(X2k16);

%绘制16点DFT的幅频特性图

title('(2b)16点DFT[x_2(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X2k16))])

subplot(2,2,3);mstem(X3k8);

%绘制8点DFT的幅频特性图

title('(3a) 8点DFT[x_3(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X3k8))])

subplot(2,2,4);mstem(X3k16);

%绘制16点DFT的幅频特性图

title('(3b)16点DFT[x_3(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X3k16))])

%实验内容(2) 周期序列谱分析=================== N=8;n=0:N-1; %FFT的变换区间N=8

x4n=cos(pi*n/4);

x5n=cos(pi*n/4)+cos(pi*n/8);

X4k8=fft(x4n); %计算x4n的8点DFT

X5k8=fft(x5n); %计算x5n的8点DFT

N=16;n=0:N-1; %FFT的变换区间N=16

x4n=cos(pi*n/4);

x5n=cos(pi*n/4)+cos(pi*n/8);

X4k16=fft(x4n); %计算x4n的16点DFT

X5k16=fft(x5n); %计算x5n的16点DFT

figure(3)

subplot(2,2,1);mstem(X4k8);

%绘制8点DFT的幅频特性图

title('(4a) 8点DFT[x_4(n)]');

xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X4k8))])

subplot(2,2,3);mstem(X4k16);

%绘制16点DFT的幅频特性图

title('(4b)16点DFT[x_4(n)]');

xlabel('ω/π');ylabel('幅度');

axis([0,2,0,1.2*max(abs(X4k16))])

subplot(2,2,2);mstem(X5k8);

%绘制8点DFT的幅频特性图

title('(5a) 8点DFT[x_5(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X5k8))])

subplot(2,2,4);mstem(X5k16);

%绘制16点DFT的幅频特性图

title('(5b)16点DFT[x_5(n)]');xlabel('ω/π');

ylabel('幅度');

axis([0,2,0,1.2*max(abs(X5k16))])

%实验内容(3) 模拟周期信号谱分析================= figure(4)

Fs=64;T=1/Fs;

N=16;n=0:N-1; %FFT的变换区间N=16

x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);

%对x6(t)16点采样

X6k16=fft(x6nT); %计算x6nT的16点DFT

X6k16=fftshift(X6k16); %将零频率移到频谱中心

Tp=N*T;F=1/Tp; %频率分辨率F

k=-N/2:N/2-1;fk=k*F;

%产生16点DFT对应的采样点频率(以零频率为中心)subplot(3,1,1);stem(fk,abs(X6k16),'.');

box on %绘制8点DFT的幅频特性图

title('(6a) 16点|DFT[x_6(nT)]|');xlabel('f(Hz)'); %%%%%%%%%

%%%%%%%%%

ylabel('幅度');

axis([-N*F/2-1,N*F/2-1,0,1.2*max(abs(X6k16))])

N=32;n=0:N-1; %FFT的变换区间N=16

x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);

%对x6(t)32点采样

X6k32=fft(x6nT); %计算x6nT的32点DFT

X6k32=fftshift(X6k32); %将零频率移到频谱中心

Tp=N*T;F=1/Tp; %频率分辨率F

k=-N/2:N/2-1;

fk=k*F;

%产生16点DFT对应的采样点频率(以零频率为中心)

subplot(3, 1, 2);stem(fk, abs(X6k32), '.');

box on %绘制8点DFT的幅频特性图

title('(6b) 32点|DFT[x_6(nT)]|');

xlabel('f(Hz)');ylabel('幅度');

axis([-N*F/2-1, N*F/2-1,0, 1.2*max(abs(X6k32))])

N=64;n=0:N-1; %FFT的变换区间N=16

x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);

%对x6(t)64点采样

X6k64=fft(x6nT); %计算x6nT的64点DFT

X6k64=fftshift(X6k64); %将零频率移到频谱中心

Tp=N*T;F=1/Tp; %频率分辨率F

k=-N/2:N/2-1;fk=k*F;

%产生16点DFT对应的采样点频率(以零频率为中心)subplot(3,1,3);stem(fk,abs(X6k64),'.');

box on%绘制8点DFT的幅频特性图

title('(6a) 64点|DFT[x_6(nT)]|');

xlabel('f(Hz)');ylabel('幅度');

axis([-N*F/2-1,N*F/2-1,0, 1.2*max(abs(X6k64))])

function mstem(Xk)

%mstem(Xk)绘制频域采样序列向量Xk的幅频特性图

M=length(Xk);

k=0:M-1;wk=2*k/M;%产生M点DFT对应的采样点频率(关于pi归一化值) stem(wk,abs(Xk),'.');box on;%绘制M点DFT的幅频特性图?

xlabel('w/\pi');ylabel('幅度');

axis([0,2,0,1.2*max(abs(Xk))]);

实验四

%实验四程序exp4.m

% IIR数字滤波器设计及软件实现

%clear all; close all

Fs=10000; T=1/Fs; %采样频率

%调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号st st=mstg;

%低通滤波器设计与实现=========================

fp=280; fs=450;

wp=2*fp/Fs; ws=2*fs/Fs; rp=0.1; rs=60;

%DF指标(低通滤波器的通、阻带边界频率)

[N,wp]=ellipord(wp,ws,rp,rs);

%调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp);

%调用ellip计算椭圆带通DF系统函数系数向量B和A

y1t=filter(B,A,st); %滤波器软件实现

% 低通滤波器设计与实现绘图部分

figure(2); subplot(3,1,1);

myplot(B,A);

%调用绘图函数myplot绘制损耗函数曲线

yt='y_1(t)';

subplot(3,1,2); tplot(y1t,T,yt);

%调用绘图函数tplot绘制滤波器输出波形

%===========================================

%带通滤波器设计与实现=========================

fpl=440; fpu=560; fsl=275; fsu=900;

wp=[2*fpl/Fs,2*fpu/Fs];

ws=[2*fsl/Fs,2*fsu/Fs]; rp=0.1; rs=60;

[N,wp]=ellipord(wp,ws,rp,rs);

%调用ellipord计算椭圆DF阶数N和通带截止频率wp

[B,A]=ellip(N,rp,rs,wp);

%调用ellip计算椭圆带通DF系统函数系数向量B和A

y2t=filter(B,A,st); %滤波器软件实现

% 带通滤波器设计与实现绘图部分(省略)

%补充1

figure(2); subplot(3,1,3);

myplot(B,A);

%--

figure(3);

yt='y_2(t)';

subplot(3,1,1); tplot(y2t,T,yt);

%===========================================

%高通滤波器设计与实现===========================

fp=890; fs=600;

wp=2*fp/Fs; ws=2*fs/Fs; rp=0.1; rs=60;

%DF指标(低通滤波器的通、阻带边界频率)

[N,wp]=ellipord(wp,ws,rp,rs);

%调用ellipord计算椭圆DF阶数N和通带 %截止频率wp [B,A]=ellip(N,rp,rs,wp,'high');

%调用ellip计算椭圆带通DF系统函数系数向量B和A

y3t=filter(B,A,st); %滤波器软件实现

% 高低通滤波器设计与实现绘图部分(省略)

%补充2

figure(3); subplot(3,1,2);

myplot(B,A);

%--

figure(3);

yt='y_3(t)';

subplot(3,1,3); tplot(y3t,T,yt);

%===========================================

function st=mstg

%产生信号序列向量st,并显示st的时域波形和频谱

%st=mstg 返回三路调幅信号相加形成的混合信号,长度N=1600 N=1600 %N为信号st的长度

Fs=10000;T=1/Fs;Tp=N*T;

%采样频率Fs=10 kHz, Tp为采样时间

t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;

fc1=Fs/10;

%第1路调幅信号的载波频率fc1=1000 Hz

fm1=fc1/10;

%第1路调幅信号的调制信号频率fm1=100 Hz

fc2=Fs/20;%第2路调幅信号的载波频率fc2=500 Hz

fm2=fc2/10;%第2路调幅信号的调制信号频率fm2=50 Hz

fc3=Fs/40;%第3路调幅信号的载波频率fc3=250 Hz

fm3=fc3/10; %第3路调幅信号的调制信号频率fm3=25 Hz

xt1=cos(2*pi*fm1*t).*cos(2*pi*fc1*t);%产生第1路调幅信号

xt2=cos(2*pi*fm2*t).*cos(2*pi*fc2*t);%产生第2路调幅信号

xt3=cos(2*pi*fm3*t).*cos(2*pi*fc3*t);%产生第3路调幅信号

st=xt1+xt2+xt3; %三路调幅信号相加

fxt=fft(st,N); %计算信号st的频谱

%以下为绘图部分,绘制st的时域波形和幅频特性曲线subplot(3,1,1)

plot(t,st);grid;xlabel('t/s');ylabel('s(t)');

axis([0,Tp/8,min(st),max(st)]);

title('(a) s(t)的波形')

subplot(3,1,2)

stem(f,abs(fxt)/max(abs(fxt)),'.');

grid;title('(b) s(t)的频谱')

axis([0,Fs/5,0,1.2]);

xlabel('f/Hz');ylabel('幅度')

function myplot(B,A)

%时域离散系统损耗函数绘图

%B为系统函数分子多项式系数向量

%A为系统函数分母多项式系数向量

[H,W]=freqz(B,A,1000);

m = abs(H);

plot(W/pi,20*log10(m/max(m))); grid on;

xlabel('\omega/\pi'); ylabel('幅度(dB)');

axis([0,1,-80,5]); title('损耗函数曲线');

function tplot(xn,T,yn)

%时域序列连续曲线绘图函数

%xn:信号数据序列,yn:绘图信号的纵坐标名字(字符串) %T为采样间隔

n = 0:length(xn)-1; t=n*T;

plot(t,xn);

xlabel('t/s'); ylabel(yn);

axis([0,t(end),min(xn),1.2*max(xn)])

实验五

%实验五程序exp5.m

%FIR数字滤波器设计及软件实现

clear all; close all;

%==调用xtg产生信号xt, xt长度N=1000,并显示xt及其频谱,=======

N=1000;xt=xtg(N);

fp=120; fs=150; Rp=0.2; As=60; Fs=1000;

%输入给定指标

%(1) 用窗函数法设计滤波器

wc=(fp+fs)/Fs; %理想低通滤波器截止频率(关于pi归一化)

B=2*pi*(fs-fp)/Fs; %过渡带宽度指标

Nb=ceil(11*pi/B); %blackman窗的长度N

hn=fir1(Nb-1,wc,blackman(Nb));

Hw=abs(fft(hn,1024));%求设计的滤波器频率特性

ywt=fftfilt(hn,xt,N); %调用函数fftfilt对xt滤波

%以下为用窗函数法设计法的绘图部分(滤波器损耗函数, 滤波器输出信号波形)(省略)f=[0:1023]*Fs/1024;

figure(2)

subplot(2,1,1)

plot(f,20*log10(Hw/max(Hw)));grid;title('(3)低通滤波器幅频特性')

axis([0,Fs/2,-120,20]);

xlabel('f/Hz');ylabel('幅度')

t=[0:2*N-1]/Fs;Tp=N/Fs; %%%%%%%%%%

subplot(2,1,2);

plot(t,ywt);grid;

axis([0,Tp/2,-1,1]);xlabel('t/s');ylabel('y_w(t)');

title('(4)滤波噪声后的信号波形');

%(2) 用等波纹最佳逼近法设计滤波器

fb=[fp,fs]; m=[1,0];

%确定remezord函数所需参数f,m,dev

dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];

[Ne,fo,mo,W]=remezord(fb,m,dev,Fs);

%确定remez函数所需参数

hn=remez(Ne,fo,mo,W);%调用remez函数进行设计

Hw=abs(fft(hn,1024));%求设计的滤波器频率特性

yet=fftfilt(hn,xt,N); %调用函数fftfilt对xt滤波

%以下为用等波纹设计法的绘图部分(滤波器损耗函数, 滤波器输出信号yw(t)波形)

%(省略)

f=[0:1023]*Fs/1024;

figure(3)

subplot(2,1,1)

plot(f,20*log10(Hw/max(Hw)));grid;title('(5)低通滤波器幅频特性')

axis([0,Fs/2,-80,10]);

xlabel('f/Hz');ylabel('幅度')

%t=[0:N-1]/Fs;Tp=N/Fs;

subplot(2,1,2)

plot(t,yet);grid;

axis([0,Tp/2,-1,1]);xlabel('t/s');ylabel('y_e(t)');

title('(6)滤波噪声后的信号波形');

function xt=xtg(N)

%实验五信号x(t)产生函数,并显示信号的幅频特性曲线

%xt=xtg 产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率Fs=1000 Hz %载波频率fc=Fs/10=100Hz,调制正弦波频率f0=fc/10=10 Hz

N=2000; Fs=1000; T=1/Fs; Tp=N*T;

t=0:T:(N-1)*T;

fc=Fs/10; f0=fc/10; %载波频率fc=Fs/10, 单频调制信号频率为f0=Fc/10

mt=cos(2*pi*f0*t);

%产生单频正弦波调制信号mt, 频率为f0

ct=cos(2*pi*fc*t); %产生载波正弦波信号ct, 频率为fc

xt=mt.*ct; %相乘产生单频调制信号xt

nt=2*rand(1,N)-1; %产生随机噪声nt

%====设计高通滤波器hn,用于滤除噪声nt中的低频成分,生成高通噪声====

fp=150; fs=200; Rp=0.1; As=70;% 滤波器指标

fb=[fp,fs]; m=[0,1];

% 计算remezord函数所需参数f,m,dev

dev=[10^(-As/20),(10^(Rp/20)-1)/(10^(Rp/20)+1)];

[n,fo,mo,W]=remezord(fb,m,dev,Fs);

% 确定remez函数所需参数

hn=remez(n,fo,mo,W);

% 调用remez函数进行设计,用于滤除噪声nt中的低频成

yt=filter(hn,1,10*nt);

%滤除随机噪声中低频成分, 生成高通噪声yt

%=======================================

xt=xt+yt; %噪声加信号

fst=fft(xt,N); k=0:N-1; f=k/Tp;

subplot(3,1,1); plot(t,xt); grid;

xlabel('t/s'); ylabel('x(t)');

axis([0,Tp/5,min(xt),max(xt)]);

title('(a) 信号加噪声波形')

subplot(3,1,2); plot(f,abs(fst)/max(abs(fst)));

grid; title('(b) 信号加噪声的频谱')

axis([0,Fs/2,0,1.2]);

xlabel('f/Hz');ylabel('幅度');

实验6

%实验六程序exp6.m

% DTMF双频拨号信号的生成和检测程序

%clear all;clc;

tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68]; % DTMF信号代表的16个数N=205;K=[18, 20, 22, 24, 31, 34, 38, 42];

f1=[697,770,852,941]; % 行频率向量

f2=[1209,1336,1477,1633]; % 列频率向量

TN=input('键入6位电话号码= '); % 输入6位数字

TNr=0; % 接收端电话号码初值为零

for l=1:6;

d=fix(TN/10^(6-l));

TN=TN-d*10^(6-l);

for p=1:4;

for q=1:4;

if tm(p,q)==abs(d); break,end

% 检测码相符的列号q

end

if tm(p,q)==abs(d); break,end

% 检测码相符的行号p

end

n=0:1023; % 为了发声, 加长序列

x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);

% 构成双频信号

sound(x,8000); % 发出声音pause(0.1)

% 接收检测端的程序

X=goertzel(x(1:205),K+1);

% 用Goertzel算法计算八点DFT样本

val = abs(X); % 列出八点DFT向量

subplot(3,2,l);

stem(K,val,'.');grid;xlabel('k');

ylabel('|X(k)|') % 画出DFT(k)幅度

axis([10 50 0 120])

limit = 80;

for s=5:8;

if val(s) > limit, break, end % 查找列号

end

for r=1:4;

if val(r) > limit, break, end % 查找行号

end

TNr=TNr+tm(r,s-4)*10^(6-l);

end

disp('接收端检测到的号码为:')

% 显示接收到的字符

disp(TNr)

%实验六程序exp6.m

%改成识别8位电话号码

% DTMF双频拨号信号的生成和检测程序

%clear all;clc;

tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68]; % DTMF信号代表的16个数N=205;K=[18, 20, 22, 24, 31, 34, 38, 42];

f1=[697,770,852,941]; % 行频率向量

f2=[1209,1336,1477,1633]; % 列频率向量

TN=input('键入8位电话号码= '); % 输入8位数字

TNr=0; % 接收端电话号码初值为零

for l=1:8;

d=fix(TN/10^(8-l));

TN=TN-d*10^(8-l);

for p=1:4;

for q=1:4;

if tm(p,q)==abs(d); break,end

% 检测码相符的列号q

end

if tm(p,q)==abs(d); break,end

% 检测码相符的行号p

end

n=0:1023; % 为了发声, 加长序列

x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);

% 构成双频信号

sound(x,8000); % 发出声音pause(0.1)

% 接收检测端的程序

X=goertzel(x(1:205),K+1);

% 用Goertzel算法计算八点DFT样本

val = abs(X); % 列出八点DFT向量

subplot(4,2,l);

stem(K,val,'.');grid;xlabel('k');

ylabel('|X(k)|') % 画出DFT(k)幅度

axis([10 50 0 120])

limit = 80;

for s=5:8;

if val(s) > limit, break, end % 查找列号

end

for r=1:4;

if val(r) > limit, break, end % 查找行号end

TNr=TNr+tm(r,s-4)*10^(8-l);

end

disp('接收端检测到的号码为:')

% 显示接收到的字符

disp(TNr)

编译实验报告+源代码

课程设计报告 ( 2013-- 2014年度第1学期) 名称:编译技术课程设计B 题目:简单编译程序的设计与实现院系:计算机系 班级:XXX 学号:XXX 学生姓名:XXX 指导教师:XXX 设计周数:XXX 成绩: 日期:XX 年XX 月

实验一.词法分析器的设计与实现 一、课程设计(综合实验)的目的与要求 1.1 词法分析器设计的实验目的 本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。 1.2 词法分析器设计的实验要求 设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。 单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。 表1-1 单词符号及其内部表示

二、设计(实验)正文 1.词法分析器流程图 2.词法分析器设计程序代码 // first.cpp : 定义控制台应用程序的入口点。// #include"stdafx.h" #include #include using namespace std; int what(char a) { if((int(a)>=48)&&(int(a)<=57)) {

数字信号处理知识点总结

《数字信号处理》辅导 一、离散时间信号和系统的时域分析 (一) 离散时间信号 (1)基本概念 信号:信号传递信息的函数也是独立变量的函数,这个变量可以是时间、空间位置等。 连续信号:在某个时间区间,除有限间断点外所有瞬时均有确定值。 模拟信号:是连续信号的特例。时间和幅度均连续。 离散信号:时间上不连续,幅度连续。常见离散信号——序列。 数字信号:幅度量化,时间和幅度均不连续。 (2)基本序列(课本第7——10页) 1)单位脉冲序列 1,0()0,0n n n δ=?=?≠? 2)单位阶跃序列 1,0 ()0,0n u n n ≥?=?≤? 3)矩形序列 1,01 ()0,0,N n N R n n n N ≤≤-?=?<≥? 4)实指数序列 ()n a u n 5)正弦序列 0()sin()x n A n ωθ=+ 6)复指数序列 ()j n n x n e e ωσ= (3)周期序列 1)定义:对于序列()x n ,若存在正整数N 使()(),x n x n N n =+-∞<<∞ 则称()x n 为周期序列,记为()x n ,N 为其周期。 注意正弦周期序列周期性的判定(课本第10页) 2)周期序列的表示方法: a.主值区间表示法 b.模N 表示法 3)周期延拓 设()x n 为N 点非周期序列,以周期序列L 对作()x n 无限次移位相加,即可得到周期序列()x n ,即 ()()i x n x n iL ∞ =-∞ = -∑ 当L N ≥时,()()()N x n x n R n = 当L N <时,()()()N x n x n R n ≠ (4)序列的分解 序列共轭对称分解定理:对于任意给定的整数M ,任何序列()x n 都可以分解成关于/2c M =共轭对称的序列()e x n 和共轭反对称的序列()o x n 之和,即

上机13+程序设计

实习十三-1基于流程图的可视化编程环境 Raptor 【实验目的与要求】 ●掌握Raptor 基本符号。 ●熟悉Raptor编程环境。 ●学习赋值、输入、输出语句符号。 【实验内容与要点】 一、基础知识 Raptor有六种基本符号,每个符号代表一个独特的指令类型。包括赋值(assignment),调用(Call),输入(Input)和输出(Output)及选择(Selection)和循环(Loop)。 填写其中3种基本符号作用说明。 二、安装和熟悉Raptor可视化编程环境 从互联网上通过百度搜索出Raptor汉化的安装包,安装Raptor可视化编程环境。安装界面如图所示。接着指定安装的文件夹目录后就可以安装了。安装成功后桌面出现恐龙图标的快捷方式。

Raptor 程序是一组连接的符号,表示要执行的一系列动作。符号间的连接箭头确定所有操作的执行顺序。Raptor 程序执行时,从开始(Start )符号起步,并按照箭头所指方向执行程序。Raptor 程序执行到的结束(End )符号时停止。所以右侧编程区的流程图设计窗口最初都有一个main 子图,其初始有开始(Start )符号和结束(End )符号。 图7.25Raptor 程序开发环境 右侧编程区完成程序设计后,在工具栏中的四个按钮控制程序的运行 方式。 按钮控制程序正常运行, 控制程序暂停运行可以观察“符号区”下面变量显 示区中变量值情况, 终止程序运行, 单步运行可以清楚了解每条指令的运行后变量 值情况。 调速滑块可以调节程序的执行速度,方便观测程序的执行。 设 置编程区的流程图设计窗口显示的比例。 调速滑块 符号区 变量显示区 子图

数字信号处理实验一

实验一 离散时间信号分析 班级 信息131班 学号 201312030103 姓名 陈娇 日期 一、实验目的 掌握两个序列的相加、相乘、移位、反褶、卷积等基本运算。 二、实验原理 1.序列的基本概念 离散时间信号在数学上可用时间序列)}({n x 来表示,其中)(n x 代表序列的第n 个数字,n 代表时间的序列,n 的取值范围为+∞<<∞-n 的整数,n 取其它值)(n x 没有意义。离散时间信号可以是由模拟信号通过采样得到,例如对模拟信号)(t x a 进行等间隔采样,采样间隔为T ,得到)}({nT x a 一个有序的数字序列就是离散时间信号,简称序列。 2.常用序列 常用序列有:单位脉冲序列(单位抽样)) (n δ、单位阶跃序列)(n u 、矩形序列)(n R N 、实指数序列、复指数序列、正弦型序列等。 3.序列的基本运算 序列的运算包括移位、反褶、和、积、标乘、累加、差分运算等。 4.序列的卷积运算 ∑∞ -∞==-= m n h n x m n h m x n y )(*)()()()( 上式的运算关系称为卷积运算,式中代表两个序列卷积运算。两个序列的卷积是一个序列与另一个序列反褶后逐次移位乘积之和,故称为离散卷积,也称两序列的线性卷积。其计算的过程包括以下4个步骤。 (1)反褶:先将)(n x 和)(n h 的变量n 换成m ,变成)(m x 和)(m h ,再将)(m h 以纵轴为对称轴反褶成)(m h -。

(2)移位:将)(m h -移位n ,得)(m n h -。当n 为正数时,右移n 位;当n 为负数时,左移n 位。 (3)相乘:将)(m n h -和)(m x 的对应点值相乘。 (4)求和:将以上所有对应点的乘积累加起来,即得)(n y 。 三、主要实验仪器及材料 微型计算机、Matlab6.5 教学版、TC 编程环境。 四、实验内容 (1)用Matlab 或C 语言编制两个序列的相加、相乘、移位、反褶、卷积等的程序; (2)画出两个序列运算以后的图形; (3)对结果进行分析; (4)完成实验报告。 五、实验结果 六、实验总结

linux实验报告3 Linux上C程序编译,调试和工程文件管理

深圳大学实验报告 课程名称:Linux操作系统 实验项目名称:Linux上C程序编译,调试和工程文件管理学院:计算机与软件学院 专业:软件工程 指导教师:冯禹洪 报告人:文成学号:2011150259 班级:02 实验时间:2013/12/31 实验报告提交时间:2013/12/31 教务处制

一、实验目标: 熟悉Linux上C程序设计环境,包括以下内容: 1. 联机帮助man命令 2. 编译工具gcc的使用 3. 熟悉使用gdb来调试程序 4. 熟悉C工程文件的管理工具makefile 二、实验环境与工件 湖边Linux实验室 Fedora 13 三、实验内容与步骤 1.动态库函数可以在多个应用程序之间共享,可以减少应用程序文件的容量和 应用程序的装载时间。因此,熟悉构建动态库可以提高软件的编写质量。请跟随以下步骤构建动态库message,并用其编写程序、编译和运行。(40分) 1.1编写源程序message.c(见图1)和main.c(见图2) 图1. message.c源程序 图2.main.c源程序 1.2用以下命令对message.c进行编译,其中,“-fPIC”选项是告诉gcc产生的 代码不要包含对函数和变量具体内存位置的引用。

1.3以上命令将获得目标文件message.o,使用以下命令建立共享函数库 message: 1.4使用1.3获得的共享函数库来编译main.c文件 1.5设置共享函数库搜索路径 1.6运行程序并附上结果 1.7构建静态可执行程序 1.7.1$gcc –c message.c 1.7.2$ar –crv libmsg.a message.o 1.7.3$gcc –o main main.c –L./ -lmsg 1.7.4$./main 1.8运行以下两个命令并截图说明结果: $ldd goodbye $ldd main $ls –l goodbye main /*附加题:经观察,如果用ubuntu, main 和googbye的大小在一些发行版本下没有区别,如果实验如此,请尝试解释这一现象。附加题目,平时成绩+5分,超过40分不算。*/ 2.图3-4中的reverse程序是有bug的,请使用gdb去观察程序的行为,对关键 行为截图说明,定位错误(截图说明)并修正程序bug。附上修正的程序及其运行结果。(40分) 图3. reverse.h头文件

C语言上机实验_代码_上课用

上机实践1 初识C语言实验1 一个简单的C程序 simple.c #include int main() { 【代码1】//输出"很高兴学习C语言\n" 【代码2】//输出"We are students\n" getchar(); return 0; } 实验2 有多个函数的C程序 twoFuction.c #include void speakHello(); //函数的原型 void showStar(); //函数的原型 int main() { showStar(); speakHello(); showStar(); speakHello(); showStar(); } void speakHello() { 【代码1】//输出""how are you\n" } void showStar() { 【代码2】//输出"******\n" }

实验答案 实验1 【代码1】:printf("很高兴学习C语言\n"); 【代码2】:printf ("We are students\n"); 实验2 【代码1】:printf("how are you\n"); 【代码2】:printf("******\n");

上机实践2 C程序的基本结构实验1 有多个源文件的C程序 main.c #include int add(int,int); //add的函数原型 int sub(int,int); int main(){ int result = 0; int x=12,y=20; printf("调用add函数计算和\n"); result = add(x,y); printf("result =%d \n",result); printf("调用sub函数计算差\n"); result = sub(x,y); printf("result =%d \n",result); } computer.c int add(int,int); //函数原型 int sub(int,int); int add(int a,int b) { int sum =0; sum = a+b; return sum; } int sub(int a,int b) { int difference =0; difference = a-b; return difference; }

数字信号处理实验

实验一 离散傅里叶变换(DFT )对确定信号进行谱分析 一.实验目的 1.加深对DFT 算法原理和基本性质的理解。 2.熟悉DFT 算法和原理的编程方法。 3.学习用DFT 对信号进行谱分析的方法,了解可能出现的误差及其原因,以便在实际中正确利用。 二.实验原理 一个连续信号)(t x a 的频谱可以用其傅里叶变换表示,即 dt e t x j X t j a a Ω-∞ ∞ -? = Ω)()( 若对)(t x a 进行理想采样可得采样序列 )(|)()(nT x t x n x a nT t a === 对)(n x 进行DTFT ,可得其频谱为: ∑∞ -∞ =-= n n j j e n x e X ωω )()( 其中数字频率ω与模拟频率Ω的关系为: s f T Ω = Ω=ω )(n x 的DFT 为∑∞ -∞ =-= n nk N j e n x k X π 2)()( 若)(t x a 是限带信号,且在满足采样定理的条件下,)(ω j e X 是)(Ωj X a 的周期延拓, )(k X 是)(ωj e X 在单位圆上的等间隔采样值,即k N j e X k X πωω2| )()(= =。 为在计算机上分析计算方便,常用)(k X 来近似)(ω j e X ,这样对于长度为N 的有限 长序列(无限长序列也可用有限长序列来逼近),便可通过DFT 求其离散频谱。 三.实验内容 1.用DFT 对下列序列进行谱分析。 (1))()04.0sin(3)(100n R n n x π=

1 (2)]0,0,0,0,0,0,0,0,1,1,1,1[)(=n x 2.为了说明高密度频谱和高分辨率频谱之间的区别,考察序列 )52.0cos()48.0cos()(n n n x ππ+= (1)当0≤n ≤10时,确定并画出x(n)的离散傅里叶变换。 (2)当0≤n ≤100时,确定并画出x(n)的离散傅里叶变换。 四.实验结果 1. (1) (2)

数字信号处理复习总结-最终版

绪论:本章介绍数字信号处理课程的基本概念。 0.1信号、系统与信号处理 1.信号及其分类 信号是信息的载体,以某种函数的形式传递信息。这个函数可以是时间域、频率域或其它域,但最基础的域是时域。 分类: 周期信号/非周期信号 确定信号/随机信号 能量信号/功率信号 连续时间信号/离散时间信号/数字信号 按自变量与函数值的取值形式不同分类: 2.系统 系统定义为处理(或变换)信号的物理设备,或者说,凡是能将信号加以变换以达到人们要求的各种设备都称为系统。 3.信号处理 信号处理即是用系统对信号进行某种加工。包括:滤波、分析、变换、综合、压缩、估计、识别等等。所谓“数字信号处理”,就是用数值计算的方法,完成对信号的处理。 0.2 数字信号处理系统的基本组成 数字信号处理就是用数值计算的方法对信号进行变换和处理。不仅应用于数字化信号的处理,而且

也可应用于模拟信号的处理。以下讨论模拟信号数字化处理系统框图。 (1)前置滤波器 将输入信号x a(t)中高于某一频率(称折叠频率,等于抽样频率的一半)的分量加以滤除。 (2)A/D变换器 在A/D变换器中每隔T秒(抽样周期)取出一次x a(t)的幅度,抽样后的信号称为离散信号。在A/D 变换器中的保持电路中进一步变换为若干位码。 (3)数字信号处理器(DSP) (4)D/A变换器 按照预定要求,在处理器中将信号序列x(n)进行加工处理得到输出信号y(n)。由一个二进制码流产生一个阶梯波形,是形成模拟信号的第一步。 (5)模拟滤波器 把阶梯波形平滑成预期的模拟信号;以滤除掉不需要的高频分量,生成所需的模拟信号y a(t)。 0.3 数字信号处理的特点 (1)灵活性。(2)高精度和高稳定性。(3)便于大规模集成。(4)对数字信号可以存储、运算、系统可以获得高性能指标。 0.4 数字信号处理基本学科分支 数字信号处理(DSP)一般有两层含义,一层是广义的理解,为数字信号处理技术——DigitalSignalProcessing,另一层是狭义的理解,为数字信号处理器——DigitalSignalProcessor。 0.5 课程内容 该课程在本科阶段主要介绍以傅里叶变换为基础的“经典”处理方法,包括:(1)离散傅里叶变换及其快速算法。(2)滤波理论(线性时不变离散时间系统,用于分离相加性组合的信号,要求信号频谱占据不同的频段)。 在研究生阶段相应课程为“现代信号处理”(AdvancedSignalProcessing)。信号对象主要是随机信号,主要内容是自适应滤波(用于分离相加性组合的信号,但频谱占据同一频段)和现代谱估计。 简答题: 1.按自变量与函数值的取值形式是否连续信号可以分成哪四种类型? 2.相对模拟信号处理,数字信号处理主要有哪些优点? 3.数字信号处理系统的基本组成有哪些?

汇编语言上机实验指导书(不含源代码)

汇编语言上机实验指导书 一、概述 上机实验总学时为14学时,其中综合性实验为2学时。实验共有6项暂定为7次,每次2学时。 1.实验辅导的主要内容 实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。 2.实验的软硬件要求 关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。 3.加强实践能力的培养 实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。其中包括: 实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等; 开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。 对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。 实验一汇编语言运行环境及方法、简单程序设计(2学时、验证性) 1.实验目的: (1) 熟悉汇编语言运行环境和方法 (2)了解如何使用汇编语言编制程序 (3) 熟悉DEBUG有关命令的使用方法 (4) 利用DEBUG掌握有关指令的功能 (5) 利用DEBUG运行简单的程序段 2.实验内容 (1)学会输入、编辑汇编语言程序 (2)学会对汇编语言程序进行汇编、连接和运行 (3)进入和退出DEBUG程序 (4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。 3.实验准备 (1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。 (2)准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。 (3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’; (1)仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。 4.实验步骤 (1)在DOS提示符下,进入MASM目录。 (2)在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。 ①调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm ②用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc 不断修改错误,直至汇编通过为止。 ③用连接程序link产生执行文件exe.例:link abc

数字信号处理实验答案完整版

数字信号处理实验答案 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

实验一熟悉Matlab环境 一、实验目的 1.熟悉MATLAB的主要操作命令。 2.学会简单的矩阵输入和数据读写。 3.掌握简单的绘图命令。 4.用MATLAB编程并学会创建函数。 5.观察离散系统的频率响应。 二、实验内容 认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。在熟悉了MATLAB基本命令的基础上,完成以下实验。 上机实验内容: (1)数组的加、减、乘、除和乘方运算。输入A=[1 2 3 4],B=[3 4 5 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出A、B、C、D、E、F、G。 clear all; a=[1 2 3 4]; b=[3 4 5 6]; c=a+b; d=a-b; e=a.*b; f=a./b; g=a.^b; n=1:4; subplot(4,2,1);stem(n,a); xlabel('n');xlim([0 5]);ylabel('A'); subplot(4,2,2);stem(n,b); xlabel('n');xlim([0 5]);ylabel('B'); subplot(4,2,3);stem(n,c); xlabel('n');xlim([0 5]);ylabel('C'); subplot(4,2,4);stem(n,d); xlabel('n');xlim([0 5]);ylabel('D'); subplot(4,2,5);stem(n,e); xlabel('n');xlim([0 5]);ylabel('E'); subplot(4,2,6);stem(n,f); xlabel('n');xlim([0 5]);ylabel('F'); subplot(4,2,7);stem(n,g); xlabel('n');xlim([0 5]);ylabel('G'); (2)用MATLAB实现下列序列: a) x(n)= 0≤n≤15 b) x(n)=e+3j)n 0≤n≤15 c) x(n)=3cosπn+π)+2sinπn+π) 0≤n≤15 d) 将c)中的x(n)扩展为以16为周期的函数x(n)=x(n+16),绘出四个周期。

VC++6.0中如何编译运行及调试C语言程序

VC++6.0中如何编译运行调试C语言程序1.启动VC++6.0 (如下图) 2.单个源文件的编译运行 例如下面的源代码 #include void main() { int i,sum=0; for(i=1;i<=10;i++) { sum=sum+i; } printf("sum=%d\n",sum); }

打开VC++6.0,如图1所示 (图1)选择“文件”→“新建”,打开如图2所示 (图2)

选择“文件”项,如图3所示 (图3) 选择“C++ Source File”项,并在“文件名”项目下输入“sum.c”如图4所示 (图4)

单击“确定”,打开如图5所示 (图5) 输入如上源代码,如图6所示 (图6) 选择按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接)。

(图7) 在下端的输出窗口会有错误和警告的提示,如果没有错误选择“执行”(或按Ctrl+F5组合键)即可出现运行结果,如图8所示 (图8)

3.多个源文件的编译运行 以上是运行单个源文件的情况,但是在程序设计时,往往是由几个人各自独立编写不同的程序,显然这些程序是不能写在一起进行编译的,这时就需要建立项目工作区来完成几个独立程序的编译,具体方法如下。 首先建立两个文本文件,分别命名为“file1.c”和“file.c”,分别在两个文件中输入如下两个源代码,然后保存。 源代码1: #include void main() { void sum(); sum(); } 源代码2: #include void sum() { int i,sum=0; for(i=1;i<=10;i++) { sum=sum+i; } printf("sum=%d\n",sum); } 打开VC++6.0,选择“文件”→“新建”打开如图9所示

数字信号处理实验三

实验三:离散LSI 系统的频域分析 一、实验内容 2、求以下各序列的z 变换: 12030() ()sin() ()sin()n an x n na x n n x n e n ωω-=== 程序清单如下: syms w0 n z a; x1=n*a^n;X1=ztrans(x1) x2=sin(w0*n);X2=ztrans(x2) x3= exp(-a*n)*sin(w0*n);X3=ztrans(x3) 程序运行结果如下: X1 =z/(a*(z/a - 1)^2) X2 =(z*sin(w0))/(z^2 - 2*cos(w0)*z + 1) X3 =(z*exp(a)*sin(w0))/(exp(2*a)*z^2 - 2*exp(a)*cos(w0)*z + 1) 3、求下列函数的逆z 变换 0 312342 1 1() () () ()() 1j z z z z X z X z X z X z z a z a z e z ω---= = = = ---- 程序清单如下: syms w0 n z a; X1=z/(z-a);x1=iztrans(X1) X2= z/(a-z)^2;x2=iztrans(X2) X3=z/ z-exp(j*w0);x3=iztrans(X3) X4=(1-z^-3)/(1-z^-1);x4=iztrans(X4) 程序运行结果如下: x1 =a^n x2 =n*a^n/a 课程名称 数字信号 实验成绩 指导教师 实 验 报 告 院系 信息工程学院 班级 学号 姓名 日期

x3 =charfcn[0](n)-iztrans(exp(i*w0),w0,n) x4 =charfcn[2](n)+charfcn[1](n)+charfcn[0](n) 4、求一下系统函数所描述的离散系统的零极点分布图,并判断系统的稳定性 (1) (0.3)()(1)(1) z z H z z j z j -= +-++ z1=[0,0.3]';p1=[-1+j,-1-j]';k=1; [b1,a1]=zp2tf(z1,p1,k); subplot(1,2,1);zplane(z1,p1); title('极点在单位圆外); subplot(1,2,2);impz(b1,a1,20); 由图可见:当极点位于单位圆内,系统的单位序列响应随着频率的增大而收敛;当极点位于单位圆上,系统的单位序列响应为等幅振荡;当极点位于单位圆外,系统的单位序列响应随着频率的增大而发散。由此可知系统为不稳定系统。 -1 -0.5 00.51 -2 -1.5-1-0.500.511.5 2Real Part I m a g i n a r y P a r t 极点在单位圆外 n (samples) A m p l i t u d e Impulse Response

什么是数字信号处理

什么是数字信号处理?有哪些应用? 利用数字计算机或专用数字硬件、对数字信号所进行的一切变换或按预定规则所进行的一切加工处理运算。 例如:滤波、检测、参数提取、频谱分析等。 对于DSP:狭义理解可为Digital Signal Processor 数字信号处理器。广义理解可为Digital Signal Processing 译为数字信号处理技术。在此我们讨论的DSP的概念是指广义的理解。 数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。 信号处理的实质是对信号进行变换。 信号处理的目的是获取信号中包含的有用信息,并用更直观的方式进行表达。 DSP的应用几乎遍及电子学每一个领域。 ▲通用数字信号处理器:自适应滤波,卷积,相关,数字滤波,FFT, 希尔伯特变换,波形生成,窗函数等等。 ▲语音信号处理:语音增强、识别、合成、编码、信箱等,文字/语音转换 ▲图形/图像处理:三维动画,图象鉴别/增强/压缩/传输,机器人视觉等等图 ▲特殊应用数字信号处理:振动和噪声分析与处理,声纳和雷达信号处理, 通信信号处理, 地震信号分析与处理,汽车安全及全球定位,生物医学工程等等。 在医疗、军事、汽车等行业,以及通信市场、消费类电子产品等中具有广阔的市场前景。 数字信号处理系统的基本组成:前置预滤波器(PrF)、a/d变换器(ADC)、数字信号处理器(DSP)、d/a变换器(DAC)、模拟滤波器(PoF) 数字信号处理特点: 1.大量的实时计算(FIR IIR FFT), 2.数据具有高度重复(乘积和操作在滤波、卷积和FFT中等常见) 数字信号处理技术的意义、内容 数字信号处理技术是指数字信号处理理论的应用实现技术,它以数字信号处理理论、硬件技术、软件技术为基础和组成,研究数字信号处理算法及其实现方法。 意义: 在21世纪,数字信号处理是影响科学和工程最强大的技术之一 它是科研人员和工程师必须掌握的一门技巧 DSP芯片及其特点 ▲采用哈佛结构体系:独立的程序和数据总线,一个机器周期可同时进行程序读出和数据存取。对应的:冯·诺依曼结构。 ▲采用流水线技术: ▲硬件乘法器:具有硬件连线的高速“与或”运算器 ▲多处理单元:DSP内部包含多个处理单元。 ▲特殊的DSP指令:指令具有多功能,一条指令完成多个动作;如:倒位序指令等 ▲丰富的外设▲功耗低:一般DSP芯片功耗为0.5~4W。采用低功耗技术的DSP芯片只有0.1W/3.3V、1.6V (电池供电) DSP芯片的类别和使用选择 ▲按特性分:以工作时钟和指令类型为指标分类▲按用途分:通用型、专用型DSP芯片 ▲按数据格式分:定点、浮点各厂家还根据DSP芯片的CPU结构和性能将产品分成若干系列。 TI公司的TMS320系列DSP芯片是目前最有影响、最为成功的数字信号处理器,其产品销量一直处于领先地位,公认为世界DSP霸主。 ?目前市场上的DSP芯片有: ?美国德州仪器公司(TI):TMS320CX系列占有90%

人工智能上机实习题

人工智能上机实习题 一.概述 1.实习名称 该实习是一个Windows环境下的可以进行人机对弈的五子棋程序,程序的名称是快乐五子棋。 2.运行环境和编程语言版本 运行环境:Microsoft Windows 98 或者Microsoft Windows NT。 编程语言:Microsoft Visual C++6.0 企业版 3.程序文件目录清单及文件说明 整个五子棋程序所有文件放在Five目录下。 Five.h 五子棋类的头文件 Five.cpp 五子棋类的实现文件 以上两个文件是Visual C++自动生成的 Fivedlg.h 五子棋程序主窗体类的头文件,所有的程序控制和大部份的 数据结构都在这里定义和实现 Fivedlg.cpp 五子棋程序主窗体类的实现文件,是整个程序的核心 Queue.h 优先队列的头文件 Queue.cpp 优先队列的实现文件 Node.h 优先队列的节点类头文件 Node.cpp 优先队列的节点类的实现文件 Settings.h 五子棋设置类的头文件 Settings.cpp 五子棋设置类的实现文件 设置类是一个对话框,主要负责对五子棋的人工智能部份的参数的控制。 StdAfx.cpp MFC类必需的文件,由Microsoft提供 StdAfx.h 同上 Five.dsp 五子棋程序的工程文件,可以通过打开它来打开整个工程 Res子目录存放本程序的资源,如图标,位图等。 另外还有一些文件是VC自已生成的,与我们这个具体的程序是没有关系的,所以在里就不再特别说明了。 4.程序使用说明 本五子棋程序界面亲切友好,玩家可以很容易上手。下面是一些基本的使用说明。 程序的主界面是一个大的对话框,它里面又分为三个部份。左边是一排按钮,分别是“开始新游戏”,“设定”,“认输”,“确定这样走”,“我不走这步了”,“关于本程序”,“退出”。单击“设定”后又会弹出一个对话框,里面可以对先后手,难度以及电脑的棋风进行设定。“认输”按钮只有在游戏开始以后才可以用。玩家每走一步,需要进行确定,即走完一步后点击“确定这样走”,若发现走错了,只需点击“我不走这步了”,

数字信号处理实验4

数字信号处理实验四 第一题结果: (1)没有增加过渡点 源码如下: N = 15; H = [1 1 1 0.5 zeros(1,7) 0.5 1 1 1]; %确定抽样点的幅度大小 %H(3,13) = 0.75;H(5,11) = 0.25; %设置过渡点 k = 0:N-1; A = exp(-j*pi*k*(N-1)/N); %抽样点相位大小 HK = H.*A; %求抽样点的H(k) hn = ifft(HK,N); %求出FIR的单位冲激响应h(n) freqz(hn,1,256); %画出幅频相频曲线figure(2); stem(real(hn),'.'); %绘制单位冲激响应的实部 line([0,35],[0,0]);xlabel('n');ylabel('Real(h(n))'); 单位脉冲响应曲线 幅频和相频特性曲线

(2)增加过渡点 源码如下: N = 15; H = [1 1 1 0.5 zeros(1,7) 0.5 1 1 1]; %确定抽样点的幅度大小 H(3) = 0.75;H(13) = 0.75;H(5) = 0.25;H(11) = 0.25; %设置过渡点 k = 0:N-1; A = exp(-j*pi*k*(N-1)/N); %抽样点相位大小 HK = H.*A; %求抽样点的H(k) hn = ifft(HK,N); %求出FIR的单位冲激响应h(n) freqz(hn,1,256); %画出幅频相频曲线figure(2); stem(real(hn),'.'); %绘制单位冲激响应的实部 line([0,35],[0,0]);xlabel('n');ylabel('Real(h(n))'); 单位脉冲响应曲线 幅频和相频特性曲线 第二题结果:

TurboC程序设计的基本步骤及如何编译、调试和运行源程序

Turbo C程序设计的基本步骤及如何编译、调试和运行源程序 本节主要介绍Turbo C程序设计的基本步骤及如何编译、调试和运行源程序。并给出Turbo C的常用编辑命令。最后介绍Turbo C编译、连接和运行时的常见错误。 一、Turbo C程序设计基本步骤 程序设计方法包括三个基本步骤: 第一步:分析问题。 第二步:画出程序的基本轮廓。 第三步:实现该程序。 3a.编写程序 3b.测试和调试程序 3c.提供数据打印结果 下面,我们来说明每一步的具体细节。 第一步:分析问题 在这一步,你必须: a. 作为解决问题的一种方法,确定要产生的数据(输出)。作为这一子步的一部分你应定义表示输出的变量。 b. 确定需产生输出的数据(称为输入),作为这一子步的一部分,你应定义表示输入的变量。 c. 研制一种算法,从有限步的输入中获取输出。这种算法定义为结构化的顺序操作,以便在有限步解决问题。就数字问题而言,这种算法包括获取输出的计 Word文档资料

算,但对非数字问题来说,这种算法包括许多文本和图象处理操作。 第二步:画出程序的基本轮廓 在这一步,你要用一些句子(伪代码)来画出程序的基本轮廓。每个句子对应一个简单的程序操作。对一个简单的程序来说,通过列出程序顺序执行的动作,便可直接产生伪代码。然而,对复杂一些的程序来说,则需要将大致过程有条理地进行组织。对此,应使用自上而下的设计方法。 当使用自上而下的设计方法时,你要把程序分割成几段来完成。列出每段要实现的任务,程序的轮廓也就有了,这称之为主模块。当一项任务列在主模块时,仅用其名加以标识,并未指出该任务将如何完成。这方面的容留给程序设计的下一阶段来讨论。将程序分为几项任务只是对程序的初步设计。整个程序设计归结为下图所示的流程图1. 0 1 1主模块 1 I 1 1 I 输入数据I 1主模块I I计算购房所需的金额I 1 I I计算装修所需的金额I 1任务1I I计算总金额I 1任务2I I输出计算结果I 1任务3I I I 1任务4I 1 ---------------- 1 -------------------- 1 I I I——1II——1II——1II1II——1I 1 ---------------------- 1 I输入数据II购房额?? II装修额..I I总额..I I输出 Word文档资料

C语言上机实验心得(20200505190812)

C语言上机实验心得 C语言上机实验心得 1 在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。在为期两周的时间中,我们同组的同学共同的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复 杂程序。在这里,我作为其中的参与者,感触良多。 在这次实训中,我对对C语言有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,每次运行程序成功, 让我对下面的项目就充满信心。通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。这次的实训,使我对C语言的学习产生浓厚的兴趣。 还是这次实训,最令人激动的就是合作做项目,虽然那只是一个很小很小的项目。每天大家来得很早,大家在一起学习,取长补短,我们很好的在实训中长知识,提高我们的学习热情。实训中深切体会到了老师认真负责的伟大的精神和热情为同学指导的促学方式,虽然对有些时候老师没给我们指出解决问题的方法有些小抱怨,但是到了结束时才知道,这种教学让我们自己学会了自学,学会了去看懂别人的代码。更多是老师给的感动,每天在我们来之前就到了教室,在讲 课中海给我们分享他在公司上班的一些心得和体会,还有那些我们应该注意的事项,这些是平时上课时无法学到的,是更深层次的巨大收

获。通过这次实训,也使我们发现了许多问题。 在实训中,我们认识到自己还有很多的知识没学好,基础知识没理清,而且许多东西还要去翻书,去上网搜索。而且遇到一些小错 误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。 还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多弄出几套方案,多锻炼自己结局问题的能力和与同学合作的能力。 总之,这一切都成为我记忆里面的一个篇章,更是在C语言编程上的一个里程碑。 C语言上机实验心得 2 在科技高度发展的今天,计算机在人们之中的作用越来越突出。 而C语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我们一定要学好C语言,这对我们以后的发展是十分重要的。 说到这,上机实验当然就是一个必不可少的环节了,C语言灵活、简洁的特点,只有通过编程实践才能真正了解,真正说懂。为了 更好地学习语法规定、掌握程序设计方法、提高程序开发能力,我们 必须实际上机、编写程序。

交叉编译与调试!!!

交叉编译与调试方法 一、交叉编译 1. 建立工作目录 2. 编写源代码 3. 编写makefile文件 4. 编译应用程序 #arm-linux-gcc -g hello.c -o hello 5. 启动NSF,挂载共享文件目录 将光盘中的gdbserver与gdb程序拷贝到共享目录 二、调试步骤 1、在Target Board开启gdbserver 进入共享目录 #gdbserver :2345 hello (我的host-ip是192.168.0.178) gdbserver开始监听2345端口(你也可以设其他的值),然后启动hello,你会看到“Process test created:pid=88” 2、回到Host端 添加环境变量 #export PATH=$PATH:/home/cby/arm-gdb/bin(arm-linux-gdb的路径) 调试 #arm-linux-gdb hello 最后一行显示:This GDB was configured as “--host=i686-pc-linux-gnu,--target =arm-linux”... 说明此gdb在X86的Host上运行,但是调试目标是ARM代码。 (gdb)target remote :2345 (我的target-board-ip is 192.168.0.105) 注意:你的端口号必须与gdbserver开启的端口号一致,这样才能进行通信。 建立链接后,就可以进行调试了。调试在Host端,跟gdb调试方法相同。

注意的是要用“c”来执行命令,不能用“r”。因为程序已经在Target Board上面由gdbserver 启动了。结果输出是在Target Board端,用超级终端查看。 4. 交叉调试 (gdb)list (gdb)break func (gdb)break 22 (gdb)info br (gdb)c (这里不能用run) (gdb) n (gdb) p result (gdb) finish (跳出func 函数) (gdb) next (gdb) quit 建立连接后进行gdb 远程调试和gdb 本地调试方法相同

数字信号处理

Matlab上机实验 报告 ; 学院:理学院 专业:10 电信 姓名:贺茂海 学号:2010142110 完成日期:2012.10.20

matlab上机实验 实验内容:1)阅读例子程序,观察输出波形,理解每条语句的含义。 (2)已知有限长序列x(n)=[7,6,5,4,3,2],求DFT和IDFT,要求:画出序列傅立叶变换对应的幅度谱和相位谱;画出原信号与傅立叶逆变换IDFT[X(k)]的图形进行比较。 (3)已知周期序列的主值x(n)=[7,6,5,4,3,2],求x(n)周期重复次数为3次时的DFS和IDFS。要求:画出原信号序列的主值和周期序列的图形;画出离散傅立叶变换对应的幅度谱和相位谱。 (4)求x(n)=[7,6,5,4,3,2], 0=

相关文档
最新文档