第一篇:最优二叉树的matlab实现
%v = [0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469 0.9575 0.9649 0.1576 0.9706 0.9572 0.4854 0.8003];origv = rand(1,7);v=origv;
MAXVAL = 100;ov = zeros(size(v));numOL = length(v);
vv = zeros(1, numOL*2-1);tv = vv;vv(numOL:length(tv))= v;
for i=numOL-1:-1:1
[i1,i2] = findLeast2Val(v+ov);
vv(i)= v(i1)+v(i2);
ov(i1)= MAXVAL;
ov(i2)= MAXVAL;
tv(i1+i)=i;
tv(i2+i)=i;
v = [vv(i),v];
ov = [0,ov];drawtree(tv);pause end drawtree(tv);
function [ind1,ind2]=findLeast2Val(v)len=length(v);
if len==2
ind1=1;ind2=2;
return;end
MIN2=100;MIN1=99;ind1=1;ind2=1;for i=1:len
if v(i) if v(i) MIN1 = v(i);ind1=i; end end function drawtree(treeVec) treeplot2(treeVec); count = size(treeVec,2); [x,y] = treelayout(treeVec); x = x'; y = y'; name1 = cellstr(num2str((1:count)')); text(x(:,1), y(:,1), name1, 'VerticalAlignment','bottom','HorizontalAlignment','right') title({'Level Lines'},'FontSize',12,'FontName','Times New Roman');end function treeplot2(p,c,d)%TREEPLOT Plot picture of tree.% TREEPLOT(p)plots a picture of a tree given a row vector of % parent pointers, with p(i)== 0 for a root.% % TREEPLOT(P,nodeSpec,edgeSpec)allows optional parameters nodeSpec % and edgeSpec to set the node or edge color, marker, and linestyle.% Use '' to omit one or both.% % Example: % treeplot([2 4 2 0 6 4 6])% returns a complete binary tree.% % See also ETREE, TREELAYOUT, ETREEPLOT.% Copyright 1984-2009 The MathWorks, Inc.% $Revision: 5.12.4.3 $ $Date: 2009/04/21 03:26:23 $ [x,y,h]=treelayout(p);f = find(p~=0);pp = p(f);X = [x(f);x(pp);repmat(NaN,size(f))];Y = [y(f);y(pp);repmat(NaN,size(f))];X = X(:);Y = Y(:); if nargin == 1,n = length(p); if n < 500,plot(x, y, 'ro', X, Y, 'r-'); else plot(X, Y, 'r-'); end;else [~, clen] = size(c); if nargin < 3,if clen > 1,d = [c(1:clen-1)'-']; else d = 'r-'; end; end; [~, dlen] = size(d); if clen>0 && dlen>0 plot(x, y, c, X, Y, d); elseif clen>0,plot(x, y, c); elseif dlen>0,plot(X, Y, d); else end;end; % 显示外部节点 k=find(y==min(y));hold on , plot(x(k),y(k),'bs');hold off xlabel(['height = ' int2str(h)]);axis([0 1 0 1]); 数字信号处理 说 明 书 目录 一.摘要…………………………………3 二.课程设计目的………………………3 三.设计内容……………………………3 四.设计原理……………………………4 4.1.语音信号的采集…………………………….4 4.2.滤波器……………………………………….4 4.21.IIR滤波器原理…………………………………….4 4.22.FIR滤波器原理………………………………………5 五.设计步骤……………………………6 5.1录制女音………………………………………6 5.2采样语音信号并画出时域波形和频谱图……7 5.3采用双线性变换法设计IIR滤波器…………10 5.4窗函数法设计FFR滤波器………………......12 5.5用IIR滤波器对信号进行滤波………………14 5.6用FIR滤波器对信号进行滤波………………16 5.7男女声语音信号频谱特点分析………………19 5.8有背景噪声的信号分析………………………20 六.心得体会…………………………….22 七.参考文献…………………………….23 一.摘要: 这次课程设计的主要目的是综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB或者DSP开发系统作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。通过对声音的采样,将声音采样后的频谱与滤波。 MATLAB全称是Matrix Laboratory,是一种功能强大、效率高、交互性好的数值和可视化计算机高级语言,它将数值分析、矩阵运算、信号处理和图形显示有机地融合为一体,形成了一个极其方便、用户界面友好的操作环境。经过多年的发展,已经发展成为一种功能全面的软件,几乎可以解决科学计算中所有问题。MATLAB软件还提供了非常广泛和灵活的用于处理数据集的数组运算功能。 在本次课程设计中,主要通过MATLAB来编程对语音信号处理与滤波,设计滤波器来处理数字信号并对其进行分析。 二.课程设计目的: 综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。 三.设计内容: 内容:录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数 法和双线性变换法设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;换一个与你性别相异的人录制同样一段语音内容,分析两段内容相同的语音信号频谱之间有什么特点;再录制一段同样长时间的背景噪声叠加到你的语音信号中,分析叠加前后信号频谱的变化,设计一个合适的滤波器,能够把该噪声滤除。 四.设计原理: 4.1.语音信号的采集 熟悉并掌握MATLAB中有关声音(wave)录制、播放、存储和读取的函数,在MATLAB环境中,有关声音的函数有: a:y=wavrecord(N,fs,Dtype);利用系统音频输入设备录音,以fs为采样频率,默认值为11025,即以11025HZ进行采样。Dtype为采样数据的存储格式,用字符串指定,可以是:‘double’、‘single’、’int16’、‘int8’其中只有int8是采用8位精度进行采样,其它三种都是16位采样结果转换为指定的MATLAB数据; b:wavplay(y,fs);利用系统音频输出设备播放,以fs为播放频率,播放语音信号y; c:wavwrite((y,fs,wavfile);创建音频文件; d:y=wavread(file);读取音频文件; 关于声音的函数还有sound();soundsc();等。4.2滤波器: 4.21.IIR滤波器原理 冲激响应不变法是使数字滤波器在时域上模拟滤波器,但是它们的缺点是产生频率响应的混叠失真,这是由于从s平面到z平面是多值的映射关系所造成的。 双线性变换法是使数字滤波器的频率响应与模拟滤波器的频率响应相似的一种变换方法。为了克服多值映射这一缺点,我们首先把整个s平面压缩变换到某一中介的s1平面的一条横带里,再通过变换关系将此横带变换到整个z平面上去,这样就使得s平面与z平面是一一对应的关系,消除了多值变换性,也 就消除了频谱混叠现象。 双线性法设计IIR数字滤波器的步骤: 1)将数字滤波器的频率指标{ k}由Wk=(2/T)*tan(wk),转换为模拟滤波器的频率指标{k}.2)由模拟滤波器的指标设计H(s).3)由H(s)转换为H(z)21z1H(z)H(s)sT1z1 4.22.FIR滤波器原理 FIR滤波器与IIR滤波器特点不同,IIR滤波器的相位是非线性的,若需线性相位则要采用全通网络进行相位校正。而有限长单位冲激响应(FIR)数字滤波器就可以做成具有严格的线性相位,同时又可以具有任意的幅度特性。 由于FIR系统的冲激响应就是其系统函数各次项的系数,所以设计FIR滤波器的方法之一可以从时域出发,截取有限长的一段冲激响应作为H(z)的系数,冲激响应长度N就是系统函数H(z)的阶数。只要N足够长,截取的方法合理,总能满足频域的要求。这种时域设计、频域检验的方法一般要反复几个回合,不像IIR DF设计靠解析公式一次计算成功。给出的理想滤波器频率响应是,它是w的周期函数,周期 由傅立叶反变换导出,即 hd(n)1Hd(ejw)ejwndw2,再将hd(n)与窗函数,因此可展开成傅氏级数w(n)相乘就可以得到h(n)。、的计算可采用傅氏变换的现成公式和程序,窗函数也是现成的。但整个设计过程不能一次完成,因为窗口类型和大小的选择没有解析公式可一次算,整个设计可用计算机编程来做。 窗函数的傅式变换W(ejω)的主瓣决定了H(ejω)过渡带宽。W(ejω)的旁瓣大小和多少决定了H(ejω)在通带和阻带范围内波动幅度,常用的几种窗函数有: 矩形窗 w(n)=RN(n); Hanning窗 ; Hamming窗 ; Blackmen窗 ; Kaiser窗。 式中Io(x)为零阶贝塞尔函数。 五.设计步骤: 5.1录制女音: 利用MATLAB中的函数录制声音。function nvyin()fs=11025; %采样频率 str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];disp(str);disp(' 开始录音');str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];disp(str);y=wavrecord(3*fs,fs,'double'); %录制声音3秒 str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];disp(str);disp(' 录音结束');str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];disp(str);str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];disp(str);disp(' 播放录音');str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];5 disp(str);wavplay(y,fs); %播放录音 str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];disp(str);disp(' 播放录音结束');str=['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'];disp(str);wavwrite(y,fs,'原女音'); %声音的存储 5.2采样语音信号并画出时域波形和频谱图 读取语音信号,画出其时域波形和频谱图,与截取后的语音信号的时域波形和频谱图比较,观察其变化。程序如下: [x,fs,bits]=wavread('女音.wav'); %读取声音 N=length(x); %计数读取信号的点数 t=(1:N)/fs; %信号的时域采样点 f0=fs/N; %采样间隔 n=1:N/2; %取信号的一半 figure(1);subplot(2,2,1); %把画图区域划分为2行2列,指定第一个图 plot(t, x); %画出声音采样后的时域波形 title('原女音信号的时域波形'); %给图形加注标签说明 xlabel('时间/t');ylabel('振幅/A');grid; %添加网格 y=fft(x); %对信号做N点FFT变换 k=(n-1)*f0; %频域采样点 subplot(2,2,3); %把画图区域划分为2行2列,指定第三个图 plot(k,abs(y(n))); %绘制原始语音信号的幅频响应图 title('FFT变换后声音的频谱特性'); %给图形加注标签说明 xlabel('频率/Hz');ylabel('幅值/A');grid; %添加网格 subplot(2,2,4); %把画图区域划分为2行2列,指定第四个图 if y~=0 %判断指数是否为0 plot(k,20*log10(abs(y(n)))); %画信号频谱的分贝图 end xlabel('Hz');ylabel('振幅/分贝');title('FFT变换后声音的频谱特性');grid; %添加网格 %实际发出声音落后录制动作半拍的现象的解决 siz=wavread('女音.wav','size');x1=wavread('女音.wav',[3500 32076]); %截取语音信号 N=length(x1); %计数读取信号的点数 t=(1:N)/fs; %信号的时域采样点 f0=fs/N; %采样间隔 n=1:N/2; %取信号的一半 figure(2);subplot(2,2,1); %把画图区域划分为2行2列,指定第一个图 plot(t,x1); %画出声音采样后的时域波形 title('截取后女音信号的时域波形'); %给图形加注标签说明 xlabel('时间/t');ylabel('振幅/A');grid; %添加网格 y1=fft(x1); %对信号做N点FFT变换 subplot(2,2,3); %把画图区域划分为2行2列,指定第三个图 k=(n-1)*f0; %频域采样点 plot(k,abs(y(n))); %绘制原始语音信号的幅频响应图 title('FFT变换后声音的频谱特性'); %给图形加注标签说明 xlabel('频率/Hz');ylabel('幅值/A');grid; %添加网格 subplot(2,2,4); %把画图区域划分为1行2列,指定第二个图 if y1~=0 %判断指数是否为0 plot(k,20*log10(abs(y1(n)))); %画信号频谱的分贝图 end xlabel('Hz');ylabel('振幅/分贝');title('FFT变换后声音的频谱特性');grid; %添加网格 原女音信号的时域波形10.5A/幅0振-0.5-10123时间/tFFT变换后声音的频谱特性FFT变换后声音的频谱特性30050A200贝/值分/幅0幅100振00200040006000-***频率/HzHz 截取后女音信号的时域波形10.5振幅/A0-0.5-10123FFT变换后声音的频谱特性50时间/tFFT变换后声音的频谱特性300200振幅/分贝幅值/A01000020004000频率/Hz6000-5002000Hz40006000 结果分析: 由原女音信号的时域波形可知录取开始时实际发出声音大概落后3500个采样点,我们把前3500点去除即可解决实际发出声音落后录制动作半拍的现象。由原女音的的频谱图和截取后声音的频谱图可看出,对声音的截取并不会影响它们频谱分布。 5.3采用双线性变换法设计IIR滤波器: 人的声音频率一般在(1~~4)kHZ之间,则我们只需要设计一个带通滤波器即可滤去声音频带以外的无用噪声,得到比较清晰的声音。根据声音的频谱图分析,设计一个带通滤波器性能指标如下: fp1=1000 Hz,fp2=3000 Hz,fsc1=500 Hz,fsc2=3500Hz,As=100dB,Ap=1dB,fs=10000 程序如下: %iir带通的代码: %w=2*pi*f/fs Ap=1; %通带波纹系数 Az=100; %最小阻带衰减 wp=[0.2 0.6]; %归一化通带数字截止频率 wz=[0.1 0.7]; %归一化阻带数字截止频率 [N,wn]=cheb1ord(wp,wz,Ap,Az); %估计契比雪夫I型滤波器阶数 [b,a]=cheby1(N,Ap,wn); %N指定滤波器阶数,wn归一化 截 %止频率,Ap通带波动 [h,w]=freqz(b,a); %求数字滤波器的复频率响应 figure(1);subplot(2,1,1);plot(w/pi,abs(h)); %绘制数字滤波器的频谱图 grid;xlabel('omega/pi');ylabel('振幅(幅值)');title('契比雪夫Ⅰ型带通滤波器的幅频响应');subplot(2,1,2);if abs(h)~=0 %判断指数是否为0 plot(w/pi,20*log10(abs(h))); %绘制数字滤波器频谱的分贝图 end grid;xlabel('omega/pi');ylabel('振幅(分贝)');title('契比雪夫Ⅰ型带通滤波器的幅频响应');契比雪夫Ⅰ型带通滤波器的幅频响应1振幅(幅值)0.5000.10.20.50.60.70.8/契比雪夫Ⅰ型带通滤波器的幅频响应0.30.40.910振幅(分贝)-200-400-60000.10.20.30.40.5/0.60.70.80.91 5.4窗函数法设计FFR滤波器 线性相位FIR滤波器通常采用窗函数法设计。窗函数法设计FIR滤波器的基本思想是:根据给定的滤波器技术指标,选择滤波器长度N和窗函数ω(n),使其具有最窄宽度的主瓣和最小的旁瓣。其核心是从给定的频率特性,通过加窗确定有限长单位脉冲响应序列h(n)。工程中常用的窗函数共有6种,即矩形窗、巴特利特(Bartlett)窗、汉宁(Hanning)窗、汉明(Hamming)窗、布莱克曼(Blackman)窗和凯泽(Kaiser)窗。 这次设计我采用的是布莱克曼来设计给定数字带通滤波器的参数如下: wp1=0.3pi, wp2=0.6pi, wz1=0.2pi, wz2=0.7pi, Ap=1dB, Az=70dB 程序如下: Ap=1; %通带波纹系数 Az=100; %最小阻带衰减 fs=10000; %采样频率 wp1=0.3*pi;wp2=0.6*pi;wz1=0.2*pi;wz2=0.7*pi;wc1=(wz1+wp1)/2;wc2=(wz2+wp2)/2;deltaW=min((wp1-wz1),(wz2-wp2)); %---取两个过渡带中的小者 N0=ceil(2*5.5*pi/deltaW); %---查表7-3(P342)布拉克曼窗 N=N0+mod(N0+1,2); %---确保N为奇数 hdWindow=ideallp(wc2,N)-ideallp(wc1,N);%理想带通滤波器 wdWindow=blackman(N); %布拉克曼窗 hr=wdWindow.*hdWindow'; %点乘 n=0:N-1; %阶数 subplot(2,2,1);stem(n,wdWindow); %绘制布拉克曼窗时域波形 xlabel('时间');ylabel('振幅');title('布拉克曼窗');[H,W]=freqz(hr,1); %求滤波器频率响应 subplot(2,2,3);plot(W/pi,abs(H)) %绘制滤波器频域波形 xlabel('omega/pi');ylabel('振幅');title('FIR带通滤波器幅频特性');subplot(2,2,4); if abs(H)~=0 %判断指数是否为0 plot(W/pi,20*log10(abs(H))); %画滤波器频谱的分贝图 end xlabel('omega/');ylabel('振幅/分贝');title('FIR带通滤波器幅频特性');grid; %添加网格 %---ideallp()函数(非系统自有函数)在系统安装目录的WORK子目录ideallp.m function hd = ideallp(wc,N);% 理想低通滤波器的脉冲响应子程序 % hd = 点0 到 N-1之间的理想脉冲响应 % wc = 截止频率(弧度)% N = 理想滤波器的长度 tao =(N-1)/2; % 理想脉冲响应的对称中心位置 n = [0:(N-1)]; % 设定脉冲响应长度 m = n-tao + eps; % 加一个小数以避免零作除数 hd = sin(wc*m)./(pi*m); % 理想脉冲响应 布拉克曼窗1振幅0.500406080时间FIR带通滤波器幅频特性500振幅/分贝20FIR带通滤波器幅频特性1.51振幅-50-100-15000.5/10.5000.5/1 5.5用IIR滤波器对信号进行滤波 用自己设计的IIR滤波器分别对采集的信号进行滤波,在Matlab中,IIR滤波器利用函数filter对信号进行滤波。程序如下: [x,fs,bits]=wavread('女音.wav');N=length(x); %计数读取信号的点数 t=(1:N)/fs; %信号的时域采样点 f0=fs/N; %采样间隔 n=1:N/2; %取信号的一半 y=fft(x); %对信号做N点FFT变换 k=(n-1)*f0; %频域采样点 subplot(2,1,1); %把画图区域划分为2行1列,指定第一个图 plot(k,abs(y(n))); %绘制原始语音信号的幅频响应图 title('滤波前女音的频谱特性'); %给图形加注标签说明 xlabel('频率/Hz');ylabel('幅值/A');grid; %iir带通的代码: Ap=1; %通带波纹系数 Az=100; %最小阻带衰减 wp=[0.2 0.6]; %归一化通带数字截止频率 wz=[0.1 0.7]; %归一化阻带数字截止频率 [N,wn]=cheb1ord(wp,wz,Ap,Az); %估计契比雪夫I型滤波器阶数 [b,a]=cheby1(N,Ap,wn); %N指定滤波器阶数,wn归一化截止频率,Ap通带波动 x1=filter(b,a,x); %对声音滤波 wavplay(x1)wavwrite(x1,'IIR滤波后女音.wav');N=length(x1); %计数读取信号的点数 t=(1:N)/fs; %信号的时域采样点 f0=fs/N; %采样间隔 n=1:N/2; %取信号的一半 y=fft(x1); %对信号做N点FFT变换 k=(n-1)*f0; %频域采样点 subplot(2,1,2); %把画图区域划分为2行1列,指定第一个图 plot(k,abs(y(n))); %绘制原始语音信号的幅频响应图 title('l滤波后女音的频谱特性'); %给图形加注标签说明 xlabel('频率/Hz');ylabel('幅值/A');grid; 滤波前女音的频谱特性300幅值/A***030004000频率/Hz滤波后女音的频谱特性500060006040幅值/A***0频率/Hz400050006000 结果分析: 由上面滤波前后的频谱图可看出,滤波器滤除了小于1000Hz和大于3400Hz的频谱成分。回放语音信号,由于低频和高频成分被滤除,声音变得较低沉。 5.6用FIR滤波器对信号进行滤波 用自己设计的FIR滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波 程序如下: [x,fs,bits]=wavread('女音.wav');N=length(x); %计数读取信号的点数 t=(1:N)/fs; %信号的时域采样点 f0=fs/N; %采样间隔 n=1:N/2; %取信号的一半 y=fft(x); %对信号做N点FFT变换 k=(n-1)*f0; %频域采样点 subplot(2,1,1); %把画图区域划分为2行1列,指定第一个图 plot(k,abs(y(n))); %绘制原始语音信号的幅频响应图 title('滤波前女音的频谱特性'); %给图形加注标签说明 xlabel('频率/omega');ylabel('幅值/A');grid; %FIR带通滤波器代码 fs=10000;wp1=0.3*pi;wp2=0.6*pi;wz1=0.2*pi;wz2=0.7*pi;wc1=(wz1+wp1)/2;wc2=(wz2+wp2)/2;deltaW=min((wp1-wz1),(wz2-wp2)); %---取两个过渡带中的小者 N0=ceil(2*5.5*pi/deltaW); %---查表7-3(P342)布拉克曼窗 N=N0+mod(N0+1,2); %---确保N为奇数 hdWindow=ideallp(wc2,N)-ideallp(wc1,N);wdWindow=blackman(N);hr=wdWindow.*hdWindow';x1=fftfilt(hr,x); %对声音滤波 wavplay(x1)wavwrite(x1,'FIR滤波后女音.wav');N=length(x1); %计数读取信号的点数 t=(1:N)/fs; %信号的时域采样点 f0=fs/N; %采样间隔 n=1:N/2; %取信号的一半 y=fft(x1); %对信号做N点FFT变换 k=(n-1)*f0; %频域采样点 subplot(2,1,2); %把画图区域划分为2行1列,指定第一个图 plot(k,abs(y(n))); %绘制原始语音信号的幅频响应图 title('l滤波后女音的频谱特性'); %给图形加注标签说明 xlabel('频率/Hz');ylabel('幅值/A');grid; 滤波前女音的频谱特性300200幅值/A***004000频率/l滤波后女音的频谱特性500060006040幅值/A20005001000***03000频率/Hz***0 结果分析: 由上面滤波前后的频谱图可看出,滤波器滤除了小于1000Hz和大于3500Hz的频谱成分。和用IIR滤波器滤波一样,回放语音信号,由于低频和高频成分被滤除,声音变得较低沉。5.7男女声语音信号频谱特点分析 换一个男音录制同样一段语音内容,分析两段内容相同的语音信号频谱之间有什么特点。程序如下: [x,fs,bits]=wavread('女音.wav'); %读取声音 N=length(x); %计数读取信号的点数 t=(1:N)/fs; f0=fs/N; n=1:N/2; y=fft(x); k=(n-1)*f0; subplot(2,1,1); plot(k,abs(y(n))); title('FFT变换后女音的频谱特性');xlabel('频率/omega');ylabel('幅值/A');grid; [x,fs,bits]=wavread('明明.wav'); N=length(x); t=(1:N)/fs; f0=fs/N; n=1:N/2; y=fft(x); k=(n-1)*f0; subplot(2,1,2); plot(k,abs(y(n))); title('FFT变换后男音的频谱特性');xlabel('频率/omega');ylabel('幅值/A');grid; %信号的时域采样点 %采样间隔 %取信号的一半 %对信号做N点FFT变换 %频域采样点 %把画图区域划分为2行1列,指定第一个图%绘制原始语音信号的幅频响应图 %给图形加注标签说明 %添加网格 %读取声音 %计数读取信号的点数 %信号的时域采样点 %采样间隔 %取信号的一半 %对信号做N点FFT变换 %频域采样点 %把画图区域划分为2行1列,指定第二个图%绘制原始语音信号的幅频响应图 %给图形加注标签说明 %添加网格 axis([0 6000 0 300]); %改变横纵坐标便于比较频谱图 FFT变换后女音的频谱特性300200幅值/A***00频率/FFT变换后男音的频谱特性***200幅值/A***00频率/400050006000 结果分析: 通过比较上面女音频谱图和男音频谱图可知,男音的频谱集中在低频部分,高频成分底,谱线较平滑,声音听起来低沉。5.8有背景噪声的信号分析 从硬盘中把一段噪声(频谱能量集中在某个小范围内)叠加到语音信号中,分析叠加前后信号频谱的变化,设计一个合适的滤波器,能够把该噪声滤除; 程序如下: z=wavread('女音.wav',[1 24000]); %读取声音在1-24000之间 f=wavread('noise.wav',[1 24000]);x=z+f;wavplay(x);fs=11025;N=length(x);f0=fs/N; %采样间隔 n=1:N; %取信号的一半 y=fft(x,N);%对信号做N点FFT变换 k=(n-1)*f0; %频域采样点 subplot(2,1,1); %把画图区域划分为1行2列,指定第二个图 plot(k,abs(y(n))); %绘制原始语音信号的幅频响应图 title('加噪声后声音的频谱特性'); %给图形加注标签说明 xlabel('频率/Hz');ylabel('幅值/A');grid;%添加网格 %iir带通滤波器的代码: Ap=1; %通带波纹系数 Az=70; %最小阻带衰减 wp=[0.2 0.7]; %归一化通带数字截止频率 wz=[0.1 0.8]; %归一化阻带数字截止频率 [N,wn]=cheb1ord(wp,wz,Ap,Az); %估计契比雪夫I型滤波器阶数 [b,a]=cheby1(N,Ap,wn); %N指定滤波器阶数,wn归一化截止频率,Ap通带波动 x1=filter(b,a,x); %对声音滤波 wavplay(x1); wavwrite(x1,'滤除噪音后女音.wav');N=length(x1);f0=fs/N; %采样间隔 n=1:N; %取信号的一半 y1=fft(x1,N); %对信号做fs点FFT变换 subplot(2,1,2); %把画图区域划分为1行2列,指定第二个图 k=(n-1)*f0; %频域采样点 plot(k,abs(y1(n))); %绘制原始语音信号的幅频响应图 title('滤除噪声后声音的频谱特性'); %给图形加注标签说明 xlabel('频率/Hz');ylabel('幅值/A');grid;%添加网格 加噪声后声音的频谱特性3000幅值/A***0008000频率/Hz滤除噪声后声音的频谱特性***030幅值/A***000频率/Hz80001000012000 结果分析 观察加噪声后声音的频谱图可知,噪音频率主要在4000Hz处,只要我们设计一个,滤波器滤除大概在4000Hz的频谱即可,回放滤波后的语音信号,可证噪音基本滤除。 六.心得体会: 通过这次课程设计,让我对MATLAB的基本应用有了更深的了解,还有数字信号处理在MATLAB中的一些函数的用法。通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。 在这次实验中,也遇到了很多问题,比如画信号频谱的分贝图时(20*log10(abs(y)))指数为零时的处理。滤波器的设计也花了好大的功夫,刚开始不会设计参数,一头雾水,通过同学的指导和讨论,得知通过观察信号的频谱图,看噪音频率集中在那一部分,设计滤波器把其滤除即可。可反复设置参数直到滤波后语音信号的效果好为止。 七.参考文献: (1)《MATLAB LabVIEW SystemView》翁剑枫 叶志前 编著, 机械工业出版社; (2)《MATLAB及在电子信息课程中的应用》陈怀琛 吴大正 高西全编著,电子工业出版社; (3)《MATLAB在数字信号处理中的应用》(弟2版)薛年喜 编著,清华大学出版社; (4)《MATLAB扩展编程》何强 何英 编著,清华大学出版社;(5)《MATLAB7简明教程》吴清 曹辉林 编著,清华大学出版社;(6)MATLAB5.3精要.编程及高级应用》程卫国 冯峰 王雪梅 刘艺 编著,机械工程出版社。 : 为实现员工最优业绩为目的,特制定本管理办法及规定: 一、薪资办法 (一)薪资构成薪资总额=基本工资+岗位工资+绩效工资+驻外补贴+通讯补贴+奖金(提成)+工龄工资 岗位 基本工资(元)岗位工资(元)绩效工资基数(元)驻外补贴(元/天)通讯补贴(元/月) 1、基本工资、岗位工资按实际出勤天数发放; 2、绩效工资=回款完成率×绩效工资基数×60%+销售完成率×绩效工资基数×30%+销售考核分数×(绩效工资基数÷10) (1)回款完成率=当月实际回款÷回款任务(最高按100%计算) (2)销售完成率=当月实际销售额÷销售任务(最高按100%计算) (3)连续3个月未完成基本销售任务,绩效工资基数下降30%,连续3个月未完成基本销售任务80%,调离销售岗位或予以辞退; 3、销售考核分数具体评分标准如下: A.当月回款排名奖0至3分,当月销售回款额排名与上月销售回款额排名,名次每前进一名,则加1分,加满3分为止。如名次后退或没改变则不得分; B.客户管理3分,新增有回款客户1家,加1分,丢减客户1家减1分; C.报表考核4分,每少一份(或信息不合格),按要求所交报表总数扣减相应分数。 D.工作态度、纪律情况考评-3分至3分。 4、驻外补贴指到四川省内成都以外的地、州开展工作,每月按实际驻外工作天数发放的补贴,本地招聘人员无补贴。 驻四川省外地区的补贴每天增加10元。 驻外工作在同一住地时间超过15天以上的,补助标准每天减少5元。 5、奖金(提成)按每月销售回款按品种类别计算提取。 产品类别 奖金(提成)当月发放50%,另30%于每一季度的次月8日发放,其余20%年终发放。 业务主管、区域经理或大区经理单独所做无业务代表的市场,按业务代表标准提取,提成比例不进行累计。 如有新产品上市,另行通知按何类产品提取奖金。 6、工作年限满一年以上的,工龄工资每月按----元/每年计算。 (二)新聘人员 新聘人员有一周左右的培训期,基本待------元/天,无考核。 新聘人员试用期1-3个月,业务代表基本工资和绩效工资基数按70%计算,第一个月无销量和回款考核,第二、三个月按任务50%考核,完成任务80%以上即可转为正式员工。 新聘业务代表以上岗位人员,试用期按下一级别岗位薪资标准和考核,转正后按相应级别发放薪资并考核,连续两个月考核不合格,降为下一级;业务代表连续三个月考核不合格,解除劳动关系(完成任务80%以下即为考核不合格)。 二、费用报销规定 (一)营销人员费用 营销人员费用总体按销售回款额的8%控制。 1、营销人员薪资 营销人员经过考核后,每月薪资于次月8日发放。 2、出差管理及差旅费用报销(含驻外补贴) 跨地区出差,应先报出差计划(时间、路线、内容、交通工具等)经批准后实施,可报销火车硬座、轮船三等舱以内、长途汽车票,凭原始票据及记录详细行程的计划表在出差后一周之内报销(驻外人员可一月报销一次或邮寄回总部报销)。 驻外包干补助(含住宿费、市内交通费、生活补贴等)根据票据时间计算出差天数,往、返日只计算一天,50公里以上,当天往返,其补助按半天计算。大区经理及以下级别人员补助在每月薪资中一并发放。 不是为本企业服务所产生的差旅费不予报销,非驻外市场工作无补助。 3、应酬费 应酬费用按上月销售回款总额的0.5%限额控制。每一次客户招待时应填报《宴客单》报销售经理按限额审批,并报总经理。应酬费用可在一年内的每月的限额间进行调节,年终时超出总额部份不予报销。开支费用在总额内如有节约,节约部份的50%作为销售经理和其他销售管理人员的奖励,比例分配为1:1。 客户宴请应根据实际情况,分别按招待标准接待,并应达到良好效果,如出现客户反映因我企业人员原因造成的不满或未达到预期效果的,每次对宴请申请人罚款50元。 4、销售日常费用 营销总部购买各种办公用品实行申报制,由总经理批准后购买使用。市场人员的工作笔记本、笔、各类报表等由营销总部按相关规定配给,不再报销此项费用。 市场人员报销的打字、复印、传真等费用每月限额50元,并应附清单写明每次费用发生的时间、具体内容、数量等,否则不予销。 由营销总部承诺负担而由经销商代垫的如运杂费等费用,在合同或文件规定金额内可予报销。由营销人员私自承诺的费用不予报销。 5、会议、培训费 营销总部不定期召集营销人员会议进行培训、传达文件、研究工作。每一次培训、业务会议由营销总部通知时间及内容,在会议期间的食宿等费用由总部统一安排,原则上按每人每天50元的标准(总额控制在销售回款的0.3%内),在规定时间外和超标费用由相关人员自行承担。 回总部的火车硬座、轮船三等舱以内、长途汽车票凭票据实报销。 5、业务提成每月25日由营销人员填制《销售提成报销表》,营销总部审核无误后按规定发放。 (二)宣传促销费 宣传促销费按销售额8%以内开支,由营销总部根据市场情况安排或由经销商、营销人员申请。由营销人员申请的费用,必须附总部批准执行的报告。可采取实物、买赠、现金奖励等各种方式。 (三)市场营销人员借款规定 市场业务人员经批准每人可以借支1000元,离职时或年底报完费用结清借支。若造成损失的,谁批准(包括无批准而私自借出的当事人),谁负责。特殊情况下,总部人员出差借支,需经总经理批准后方能借款,并于出差结束后及时报销冲账。 (四)处罚规定 各项报销凭证,必须手续完备、内容真实、数字准确、项目清楚、粘贴整齐,不得弄虚作假;原始依据必须充分、有效,填写完整、不得挖补涂改。如发现弄虚作假作假者,除作假部份不予报销外,并处以相应金额2倍的罚款,发现两次以上者,直接辞退。 《数据结构》 第六次实验报告 学生姓名 学生班级 学生学号 指导老师 重庆邮电大学计算机学院 计算机专业实验中心 一、实验内容 1)采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作。2)输出树的深度,最大元,最小元。 二、需求分析 遍历二叉树首先有三种方法,即先序遍历,中序遍历和后序遍历。递归方法比较简单,首先获得结点指针如果指针不为空,且有左子,从左子递归到下一层,如果没有左子,从右子递归到下一层,如果指针为空,则结束一层递归调用。直到递归全部结束。下面重点来讲述非递归方法: 首先介绍先序遍历: 先序遍历的顺序是根 左 右,也就是说先访问根结点然后访问其左子再然后访问其右子。具体算法实现如下:如果结点的指针不为空,结点指针入栈,输出相应结点的数据,同时指针指向其左子,如果结点的指针为空,表示左子树访问结束,栈顶结点指针出栈,指针指向其右子,对其右子树进行访问,如此循环,直至结点指针和栈均为空时,遍历结束。 再次介绍中序遍历: 中序遍历的顺序是左 根 右,中序遍历和先序遍历思想差不多,只是打印顺序稍有变化。具体实现算法如下:如果结点指针不为空,结点入栈,指针指向其左子,如果指针为空,表示左子树访问完成,则栈顶结点指针出栈,并输出相应结点的数据,同时指针指向其右子,对其右子树进行访问。如此循环直至结点指针和栈均为空,遍历结束。最后介绍后序遍历: 后序遍历的顺序是左 右 根,后序遍历是比较难的一种,首先需要建立两个栈,一个用来存放结点的指针,另一个存放标志位,也是首先访问根结点,如果结点的指针不为空,根结点入栈,与之对应的标志位也随之入标志位栈,并赋值0,表示该结点的右子还没有访问,指针指向该结点的左子,如果结点指针为空,表示左子访问完成,父结点出栈,与之对应的标志位也随之出栈,如果相应的标志位值为0,表示右子树还没有访问,指针指向其右子,父结点再次入栈,与之对应的标志位也入栈,但要给标志位赋值为1,表示右子访问过。如果相应的标志位值为1,表示右子树已经访问完成,此时要输出相应结点的数据,同时将结点指针赋值为空,如此循环直至结点指针和栈均为空,遍历结束。 三、详细设计 源代码: #include typedef struct Tnode //定义结点 { char data;//存储结点数据 struct Tnode *left;//定义结点左子指针 struct Tnode *right;//定义右子指针 }Tnode,*Pnode;//声明Tnode类型的变量和指针 typedef struct Stack//定义栈 { Pnode pnode[MAX];//存放数据 int p;//栈顶指针 }Stack,*Pstack;//定义Stack类型的变量和指针 void Push(Pstack pstack,Pnode pnode)//入栈 { } Pnode Pop(Pstack pstack)//出栈 { } Pnode Top(Pstack pstack)//看栈顶元素 { } int Isempty(Pstack pstack)//栈判空 { } int Isfull(Pstack pstack)//栈满 { } void Initstack(Pstack pstack)//初始化栈 if(pstack->p==FULL)else return 0;return 1;if(pstack->p==EMPTY)else return 0;;return 1;return pstack->pnode[pstack->p];return pstack->pnode[pstack->p--];pstack->p ++;pstack->pnode[pstack->p] = pnode;//赋值 { } void Inittnode(Pnode root,Pnode left,Pnode right,char data)//初始化结点 { } void PreorderR(Pnode proot)//递归先序遍历算法 { } void InorderR(Pnode proot)//递归中序遍历算法 { } void PostorderR(Pnode proot)//递归后序遍历算法 { } void PreorderI(Pnode proot,Pstack pstack)//非递归先序遍历算法 { Initstack(pstack);//初始化栈 while(proot||!Isempty(pstack))//如果栈空并且结点指针空,则结束循环 { if(proot){ printf(“%2c”,proot->data);if(proot){ } PostorderR(proot->left);PostorderR(proot->right);printf(“%2c”,proot->data);if(proot){ } InorderR(proot->left);printf(“%2c”,proot->data);InorderR(proot->right);if(proot){ } printf(“%2c”,proot->data);PreorderR(proot->left);PreorderR(proot->right);root->left=left;root->right = right;root->data = data;pstack->p=EMPTY; } } } else { } if(Isfull(pstack))//如果栈满不能执行入栈操作 { } Push(pstack,proot);//入栈 proot=proot->left;//指针指向左子 printf(“栈满,不能执行入栈操作!”);return;if(Isempty(pstack))//栈空时不能出栈 { } proot = Pop(pstack);//执行出栈操作 proot=proot->right;//指针指向右子 printf(“栈空,不能执行出栈操作!”);return;void InorderI(Pnode proot,Pstack pstack)//非递归中序遍历算法 { Initstack(pstack);//初始化栈 while(proot||!Isempty(pstack))//循环结束条件 { if(proot){ } else { if(Isempty(pstack)){ } proot = Pop(pstack);//出栈 printf(“%2c”,proot->data);//打印数据 printf(“栈空,不能执行出栈操作!”);return;if(Isfull(pstack)){ } Push(pstack,proot);//执行入栈操作 proot = proot->left;//指针指向左子 printf(“栈满,不能执行入栈操作!”);return; } } } proot=proot->right;//指针指向右子 void PostorderI(Pnode proot,Pstack pstack)//非递归后续遍历算法 { } void main(){ int flags[MAX];//定义标志位栈 int p =-1;//初始化标志位栈 int flag;//存放标志位 Initstack(pstack);//初始化栈 while(proot||!Isempty(pstack))//循环结束条件 { } if(proot){ } else { } proot = Pop(pstack);//指针出栈 flag = flags[p--];//相应标志位出栈 if(flag==0)//如果标志位为0表示右子还未访问过 { } else { } printf(“%2c”,proot->data);//打印数据 proot = NULL;//将结点指针置空 flag =1;//将标志位置1,右子已访问 flags[++p] = flag;//标志位入栈 Push(pstack,proot);//结点入栈 if(Isfull(pstack)){ } flags[++p] = 0;//标志位置0,并入栈 Push(pstack,proot);//结点入栈 proot=proot->left;//指针指向左子 printf(“栈满,不能执行入栈操作!”);return; proot = proot->right;//指针指向右子 Tnode A,B,C,D,E,F,G;//声明结点变量 Stack stack;//声明栈 Inittnode(&A,&B,&C,'A');//初始化结点 Inittnode(&B,NULL,&D,'B');Inittnode(&C,&E,&F,'C');Inittnode(&D,NULL,NULL,'D');Inittnode(&E,NULL,NULL,'E');Inittnode(&F,&G,NULL,'F');Inittnode(&G,NULL,NULL,'G');printf(“你定义的树的结构是:n”);printf(“A(B(D)C(E F(G)))n”);printf(“=====================下面是遍历结果====================n”);printf(“=====================递归先序遍历:====================n”);PreorderR(&A);printf(“n”);printf(“=====================非递归先序遍历:==================n”);PreorderI(&A,&stack);printf(“n”);printf(“=====================递归中序遍历:====================n”);InorderR(&A);printf(“n”);printf(“=====================非递归中序遍历:==================n”);InorderI(&A,&stack);printf(“n”);PostorderR(&A);printf(“n”);PostorderI(&A,&stack); printf(“n”); /*一下是调用相应的函数输出遍历结果*/ } printf(“=====================递归后序遍历:====================n”); printf(“=====================非递归后序遍历:==================n”); 五、遇到的问题及解决办法 这部分我主要遇到如下两个问题,其内容和解决方法如下所列: 执行程序时程序停止运行,其效果如图: 解决方法:看到程序停止运行,推测可能的原因:遇到死循环、参数设置不合理或者结构体没有造好。首先对结构体进行了检查,各个成员声明正常无误,在对程序进行调试,程序正常跳出循环,因此最可能是自定义函数的参数设置的不合理,因此对调用的自定义函数进行相应的改动,将参数由具体类型改为指针类型后,程序正常运行。 程序不停的输出同一个结点的数据,其效果入图: 解决方法:分析运行结果可知,第一不停的输出证明遇到了死循环,第二输出的是同一个结点的数据,表示指针没有按预期进行指向,首先对程序进行调试,发现程序没有添加循环结束条件,添加循环结束条件后,只能输出树的部分结点的数据,对标志位进行修改后,程序运行正常,也能正确输出遍历结果。 六、心得体会 通过这次作业真的受益匪浅,感触良多: 首先,要提高编程能力,必须多动手,多实践,而不是仅仅局限在书本上,更不能眼高手低。眼高手低,懒得动手,这就犯了编程人员的大忌。大一我们开始接触C语言,这是我们接触到的第一种编程语言,但是当时徒有对编程的兴趣,却没有付诸行动,动手少,结果考试险过,通过这次作业,我再次看了C语言课本,边看边写代码,理解快,印象深刻,思维也活跃许多,状态也好,真正的意识到,编程能力需要靠实践来提升。当自己写出意想的程序后,真的有些成就感。再者,在吴老师的指导和要求下,我们改掉了很多的编程坏习惯的同时也养成了良好的编程习惯,另一方面我们态度端正了很多,认真完成好每一项任务,这样无形中提高了对自己的要求,同时也增强了我们的动手能力和编程能力。 七、附录 运行结果截图。 《太阳》是一年级北师大版课改实验教材。这首儿歌,通过日出景象的描写,让学生感受太阳的美,从而喜欢太阳,激发学生热爱大自然的思想感情。并随文学习12个生字,学写6个字。由于学生认字的程度存在差异,有的学生通过课外自学,己掌握了本课的生字。针对这一情况,在识字教学中,我采用了分层教学,邀请数学老师和我一起走进课堂,数学老师负责辅导己掌握该课生字的学生,给予拓展、提高。并在新授后对该课未完全掌握的学生及时补缺漏。我则进行正常的识字教学。尝试这样的课堂教学,我觉得可以真正做到以育人为本,因材施教,实现学生最优发展。 二、课堂教学节录 借助课件让学生感受太阳的美,从而学习课文,指导有感情地朗读课文。接着,进入识字教学。课件点击出示这课要学的12个生字。 分a、b组进行教学。a组在教室的一角自由围坐,和数学老师学习;b组小小组t字形坐式新授。 师:昨天,我测过我们班几个小朋友,有六个小朋友已经自己学会了这12个生字。现在,请这几位小朋友(a组)到后面去和龚老师一起学习。其他的小朋友和我一起来学习这12个字。(课件演示)我们看谁最先和这些可爱的字娃娃交上朋友。 看一看,你认识几号字娃娃,你就可以当小老师教大家。或是你喜欢认识哪个字娃娃,就提出来。 生:我认识6号字娃娃,这个字读“出”,出来的“出”。(生字是注音的)师:真不错,大家跟她一起读。你还能教小朋友认识哪个字娃娃呢? 生:我还认识3号字娃娃“从”,1号字娃娃“叫”(生跟读) 师:大家跟她学得很认真。这个小老师当得真好,奖你一个“小太阳”贴纸。**同学,你想认识儿号字娃娃? 生:我想认识5号字娃娃。师:有哪位小朋友会吗? 生:我知道这个字是“跳”,跳舞的“跳”。师:“同学你懂了吗?谢谢生1小朋友。” (其余几个字方法同上,主要体现生生互动。)师:这些字娃娃小朋友都认识了吗?拿出你们桌上的生字卡片,在小组里互相考一考。这些字都认识,还能读准字音的小朋友,其他小朋友就可以把桌上的“小太阳”贴纸送给他。如果他有的字还不认识,你们就帮帮他。(生字卡上都有注音)师:看来小朋友学得不错,很多小朋友都得到了“小太阳”。你们真棒呀,下面我要再次考考大家,看谁认得最快,读得最准。(开火车认读字卡,生字不注音)在本组学生基本掌握生字后,a组的学生回到课堂中来。一起课间律动操《种太阳》。做“搬房子”游戏扩词、练习说话。由a组的同学当“小测试员”测试b组的同学12个生字掌握情况。再次分组学习,未完全掌握的同学找龚老师再次学习;其余的同学一起讨论:学了这课,你喜欢太阳公公吗?为什么?小组交流:课前收集的有关太阳的资料。 (有影音资料、有图片资料、有网上查找的资料、有书籍资料等)龚老师和a组:(手提电脑演示课件) 1、做各种游戏进行12个生字扩词、说话等多种形式的提高性练习。 2、做游戏“射气球”学习本课未要求认识的其余生字。 3、互相交流自己新认识的字。龚老师和测试后c组的同学: 课件演示,再次和未认识的字娃娃交上朋友。 三、简析: 1、充分体现语文教育的人文性、民主性 学生是学习和发展的主体。语文课必须根据学生身心发展和语文学习的特点,关注学生的个体差异和不同的学习要求,爱护学生的好奇心、求知欲,充分激发学生的主动意识和进取精神。北师大版的这册教材非常注重让学生多认字。在识字教学中,我发现学生认字的程度不一,有的学生通过课外自学己掌握了本课的生字,如果让这些学生也和其他学生一起重新识字的话,势必挫伤他们学习的积极性,甚至可以说是浪费他们的学习时间。因此,我认为教师必须关注到学生的这种差异和他们的不同学习要求,在教学中,我让这部分的学生进行提高、拓展学习,使他们更上一层楼。而那些无法按时完成学习任务的学生,则在课堂给他们更多的时间再学习,及时补上。总之,力求充分体现以育人为本、因材施教的教学理念。 2、分层教学实现学生最优发展 进行课程改革,可以通过创设现代的教育环境,改变教学的形式,使得学生与学生之间、教师与学生之间、教师与教师之间有充分的互动。分层教学正是为之提供了大舞台。《太阳》这课,我们打破了学科体系,语、数老师一同走进课堂。语文老师当主角、数学老师当配角。当进入学习生字这一教学环节时,开始分层教学,数学老师在教室的一角和课前已自学本课所学生字的上等学生(a组)一起学习,利用电脑课件给以提高补充知识。语文老师则负责占大多数的学生(b组)新授生字的教学。当b组学生通过小老师教、小组合作互帮互学完成了本课的学习任务以后,让这几名上等生做小测试员当场测试认字情况。之后,未完全掌握生字的学生即刻再和数学老师学习,争取圆满完成学习任务。语文老师则让已完成学习任务的学生拓展学习,小组交流自己课前收集的有关太阳的资料。这样的分层次教学,能最大限度满足不同程度的学生的学习要求,让每个孩子都能“吃饱”。在识字教学中我们还把a、b、c、d四种层度的学生在组合在一个小组里,合作学习之前提出四种不同的要求,对每组4号同学的要求最低,而对1号同学的要求最高。在小组交流、全班交流时,不同层度的同学均有表现的机会,也均能学到其他同学的长处。 应该说我们“小班化教育”为分层教学创造了很有利的条件。但实践证明,分层教学有利于学生在感兴趣的自主活动中全面提高语文素养,培养学生主动探究、团结合作、勇于创新精神,使教师更好地了解学生,让学生在积极互动中掌握知识,发展个性,实现学生最优发展。第二篇:MATLAB实现数字信号处理
第三篇:为实现员工最优业绩为目的
第四篇:数据结构实验报告-二叉树的实现与遍历
第五篇:分层教学实现学生最优发展-教学教案