1、 1 例 1-1 洗手 %周期信号(方波)的展开 ,fb_jinshi.m 洗手 close all;beef洗手 clear all;beef洗手 N=100;beef %取展开式的项数为 2N 1 项 洗手 洗手 T=1;beef洗手 fs=1/T;beef洗手 N_sample=128;beef %为了画出波形 , 吃饭 设置每个周期的采样点数 洗手 dt = T/N_sample;beef洗手 洗手 t=0:dt:10*T-dt;beef洗手 n=-N:N;beef洗手 Fn = sinc(n/2).*exp(-j*n*pi/2);beef洗手 Fn(N+1)=0;beef洗手 ft
2、= zeros(1,length(t);beef洗手 for m=-N:N 洗手 ft = ft + Fn(m+N+1)*exp(j*2*pi*m*fs*t);beef洗手 end 洗手 plot(t,ft)洗手 例 1-2 洗手 利用 FFT 计算信号的频谱并与信号的真实频谱的抽样比较 。 洗手洗手 脚本文件 T2F.m 定义了函数 T2F, 吃饭 计算信号的傅立叶变换 。 洗手洗手 function f,sf= T2F(t,st)洗手 %This is a function using the FFT function to calculate a signals Fourier 洗手 %
3、Translation洗手 %Input is the time and the signal vectors,the length of time must greater 洗手 %than 2 洗手 %Output is the frequency and the signal spectrum 洗手 dt = t(2)-t(1);beef洗手 T=t(end);beef洗手 df = 1/T;beef洗手 N = length(st);beef洗手 洗手 f=-N/2*df:df:N/2*df-df;beef洗手 sf = fft(st);beef洗手 sf = T/N*fftshift
4、(sf);beef洗手 脚本文件 F2T.m 定义了函数 F2T, 吃饭 计算信号的反傅立叶变换 。 洗手洗手 function t st=F2T(f,sf)洗手 %This function calculate the time signal using ifft function for the input 洗手 %signals spectrum洗手 洗手 2 df = f(2)-f(1);beef洗手 Fmx = ( f(end)-f(1) +df);beef洗手 dt = 1/Fmx;beef洗手 N = length(sf);beef洗手 T = dt*N;beef洗手 洗手 %t
5、=-T/2:dt:T/2-dt;beef洗手 t = 0:dt:T-dt;beef洗手 洗手 sff = fftshift(sf);beef洗手 st = Fmx*ifft(sff);beef洗手 洗手 洗手 另写脚本文件 fb_spec.m 如下 : bef洗手 %方波的傅氏变换 , fb_spec.m 洗手 clear all;beefclose all;beef洗手 T=1;beef洗手 N_sample = 128;beef洗手 dt=T/N_sample;beef洗手 洗手 t=0:dt:T-dt;beef洗手 st=ones(1,N_sample/2), -ones(1,N_sam
6、ple/2);beef %方波一个周期 洗手 subplot(211);beef洗手 plot(t,st);beef洗手 axis(0 1 -2 2);beef洗手 xlabel(t);beef ylabel(s(t);beef洗手 subplot(212);beef洗手 f sf=T2F(t,st);beef %方波频谱 洗手 plot(f,abs(sf);beef hold on;beef洗手 axis(-10 10 0 1);beef洗手 xlabel(f);beefylabel(|S(f)|);beef洗手 %根据傅氏变换计算得到的信号频谱相应位置的抽样值 洗手 sff= T2*j*p
7、i*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);beef洗手 plot(f,abs(sff),r-)洗手 例 1-3 洗手 %信号的能量计算或功率计算 ,sig_pow.m 洗手 clear all;beef洗手 close all;beef洗手 dt = 0.01;beef洗手 t = 0:dt:5;beef洗手 洗手 s1 = exp(-5*t).*cos(20*pi*t);beef洗手 s2 = cos(20*pi*t);beef洗手 洗手 3 E1 = sum(s1.*s1)*dt;beef %s1(t)的信号能量 洗手
8、P2 = sum(s2.*s2)*dt/(length(t)*dt);beef %s2(t)的信号功率 s 洗手 洗手 f1 s1f= T2F(t,s1);beef洗手 f2 s2f= T2F(t,s2);beef洗手 洗手 df = f1(2)-f1(1);beef洗手 E1_f = sum(abs(s1f).2)*df;beef %s1(t)的能量 ,用频域方式计算 洗手 df = f2(2)-f2(1);beef洗手 T = t(end);beef洗手 P2_f = sum(abs(s2f).2)*df/T;beef %s2(t)的功率 , 吃饭 用频域方式计算 洗手 洗手 figure
9、(1)洗手 subplot(211)洗手 plot(t,s1);beef洗手 xlabel(t);beef ylabel(s1(t);beef 洗手 subplot(212)洗手 plot(t,s2)洗手 xlabel(t);beef ylabel(s2(t);beef 洗手 例 1-4 洗手 %方波的傅氏变换 , 吃饭 sig_band.m洗手 clear all;beef洗手 close all;beef洗手 T=1;beef洗手 N_sample = 128;beef洗手 dt=1/N_sample;beef洗手 t=0:dt:T-dt;beef洗手 st=ones(1,N_sample
10、/2) -ones(1,N_sample/2);beef洗手 洗手 df=0.1/T;beef洗手 Fx = 1/dt;beef洗手 f=-Fx:df:Fx-df;beef洗手 %根据傅氏变换计算得到的信号频谱 洗手 sff= T2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);beef洗手 plot(f,abs(sff),r-)洗手 axis(-10 10 0 1);beef洗手 hold on;beef洗手 sf_max = max(abs(sff);beef洗手 line(f(1) f(end),sf_max sf_
11、max);beef洗手 line(f(1) f(end),sf_max/sqrt(2) sf_max/sqrt(2);beef %交点处为信号功率下降 3dB处 洗手 Bw_eq = sum(abs(sff).2)*df/T/sf_max.2;beef %信号的等效带宽 洗手 洗手 例 1-5 洗手 4 %带通信号经过带通系统的等效基带表示 , 吃饭 sig_bandpass.m洗手 clear all;beef洗手 close all;beef洗手 dt = 0.01;beef洗手 t = 0:dt:5;beef洗手 洗手 s1 = exp(-t).*cos(20*pi*t);beef %输
12、入信号 洗手 f1 s1f= T2F(t,s1);beef %输入信号的频谱 洗手 s1_lowpass = hilbert(s1).*exp(-j*2*pi*10*t);beef %输入信号的等效基带信号 洗手 f2 s2f=T2F(t,s1_lowpass);beef %输入等效基带信号的频谱 洗手 洗手 h2f = zeros(1,length(s2f);beef洗手 a b=find( abs(s1f)=max(abs(s1f) );beef %找到带通信号的中心频率 洗手 h2f( 201-25:201+25 )= 1;beef洗手 h2f( 301-25:301+25) = 1;b
13、eef洗手 h2f = h2f.*exp(-j*2*pi*f2);beef %加入线性相位 , 吃饭 洗手 洗手 t1 h1 = F2T(f2,h2f);beef %带通系统的冲激响应 洗手 h1_lowpass = hilbert(h1).*exp(-j*2*pi*10*t1);beef %等效基带系统的冲激响应 洗手 洗手 figure(1)洗手 subplot(521);beef洗手 plot(t,s1);beef洗手 xlabel(t);beef ylabel(s1(t);beef title(带通信号 );beef洗手 subplot(523);beef洗手 plot(f1,abs(
14、s1f);beef洗手 xlabel(f);beef ylabel(|S1(f)|);beef title(带通信号幅度谱 );beef洗手 subplot(522)洗手 plot(t,real(s1_lowpass);beef洗手 xlabel(t);beefylabel(Res_l(t);beeftitle(等效基带信号的实部 );beef洗手 subplot(524)洗手 plot(f2,abs(s2f);beef洗手 xlabel(f);beefylabel(|S_l(f)|);beeftitle(等效基带信号的幅度谱 );b eef洗手 %画带通系统及其等效基带的图 洗手 subpl
15、ot(525)洗手 plot(f2,abs(h2f);beef洗手 xlabel(f);beefylabel(|H(f)|);beeftitle(带通系统的传输响应幅度谱 );b eef洗手 subplot(527)洗手 plot(t1,h1);beef洗手 xlabel(t);beefylabel(h(t);beeftitle(带通系统的冲激响应 );beef洗手 洗手 subplot(526)洗手 f3 hlf=T2F(t1,h1_lowpass);beef洗手 plot(f3,abs(hlf);beef洗手 5 xlabel(f);beefylabel(|H_l(f)|);beeftit
16、le(带通系统的等效基带幅度谱 );b eef洗手 洗手 subplot(528)洗手 plot(t1,h1_lowpass);beef洗手 xlabel(t);beefylabel(h_l(t);beeftitle(带通系统的等效基带冲激响应 );b eef洗手 洗手 %画出带通信号经过带通系统的响应 及 等效基带信号经过等效基带系统的响应 洗手 tt = 0:dt:t1(end)+t(end);beef洗手 yt = conv(s1,h1);beef洗手 洗手 subplot(529)洗手 plot(tt,yt);beef洗手 xlabel(t);beefylabel(y(t);beeft
17、itle(带通信号与带通系统响应的卷积 )洗手 洗手 ytl = conv(s1_lowpass,h1_lowpass).*exp(j*2*pi*10*tt);beef洗手 subplot(5,2,10)洗手 plot(tt,real(yt);beef洗手 xlabel(t);beefylabel(y_l(t)cos(20*pi*t);beef洗手 title(等效基带与等效基带系统响应的卷积中心频率载波 )洗手 例 1-6 洗手 %例 : b eef窄带高斯过程 , 吃饭 文件 zdpw.m 洗手 clear all;beef close all;beef洗手 N0=1;beef %双边功率
18、谱密度 洗手 fc=10;beef %中心 频率 洗手 B=1;beef %带宽 洗手 洗手 dt=0.01;beef洗手 T=100;beef洗手 t=0:dt:T-dt;beef洗手 %产生功率为 N0*B的高斯白噪声 洗手 P = N0*B;beef洗手 st = sqrt(P)*randn(1,length(t);beef洗手 %将上述白噪声经过窄带带通系统 , 吃饭 洗手 f,sf = T2F(t,st);beef %高斯信号频谱 洗手 figure(1)洗手 plot(f,abs(sf);beef %高斯信号的幅频特性 洗手 洗手 tt gt=bpf(f,sf,fc-B/2,fc+
19、B/2);beef %高斯信号经过带通系统 洗手 洗手 glt = hilbert(real(gt);beef %窄带信号的解析信号 , 吃饭 调用 hilbert 函数得到解析信号 洗手 glt = glt.*exp(-j*2*pi*fc*tt);beef洗手 洗手 ff,glf=T2F( tt, glt );beef洗手 6 figure(2)洗手 plot(ff,abs(glf);beef洗手 xlabel(频率 (Hz);beef ylabel(窄带高斯过程样本的幅频特性 )洗手 洗手 figure(3)洗手 subplot(411);beef洗手 plot(tt,real(gt);b
20、eef洗手 title(窄带高斯过程样本 )洗手 subplot(412)洗手 plot(tt,real(glt).*cos(2*pi*fc*tt)-imag(glt).*sin(2*pi*fc*tt)洗手 title(由等效基带重构的 窄带高斯过程样本 )洗手 subplot(413)洗手 plot(tt,real(glt);beef洗手 title(窄带高斯过程样本的同相分量 )洗手 subplot(414)洗手 plot(tt,imag(glt);beef洗手 xlabel(时间 t(秒 );beef title(窄带高斯过程样本的正交分量 )洗手 洗手 %求窄带高斯信号功率 ;b e
21、ef注 : beef由于样本的功率近似等于随机过程的功率 , 吃饭 因此可能出现一些偏差 洗手 P_gt=sum(real(gt).2)/T;beef洗手 P_glt_real = sum(real(glt).2)/T;beef洗手 P_glt_imag = sum(imag(glt).2)/T;beef洗手 洗手 %验证窄带高斯过程的同相分量 、 beef正交分量的正交性 洗手 a = real(glt)*(imag(glt)/T;beef洗手 用到的子函数 洗手 function t,st=bpf(f,sf,B1,B2)洗手 %This function filter an input a
22、t frequency domain by an ideal bandpass filter 洗手 %Inputs:洗手 % f: frequency samples洗手 % sf: input data spectrum samples 洗手 % B1: bandpasss lower frequency洗手 % B2: bandpasss higher frequency 洗手 %Outputs:洗手 % t: frequency samples 洗手 % st: output datas time samples 洗手 df = f(2)-f(1);beef洗手 T = 1/df;bee
23、f洗手 hf = zeros(1,length(f);beef洗手 洗手 bf = floor( B1/df ): floor( B2/df ) ;b eef洗手 bf1 = floor( length(f)/2 ) + bf;beef洗手 bf2 = floor( length(f)/2 ) - bf;beef洗手 hf(bf1)=1/sqrt(2*(B2-B1);beef洗手 7 hf(bf2)=1/sqrt(2*(B2-B1);beef洗手 洗手 yf=hf.*sf.*exp(-j*2*pi*f*0.1*T);beef洗手 t,st=F2T(f,yf);beef洗手 例 1-7 洗手 %
24、显示模拟调制的波形及解调方法 DSB, 吃饭 文件 mdsb.m 洗手 %信源 洗手 close all;beef洗手 clear all;beef洗手 dt = 0.001;beef %时间采样间隔 洗手 fm=1;beef %信源最高频率 洗手 fc=10;beef %载波中心频率 洗手 T=5;beef %信号时长 洗手 t = 0:dt:T;beef 洗手 mt = sqrt(2)*cos(2*pi*fm*t);beef %信源 洗手 %N0 = 0.01;beef %白噪单边功率谱密度 洗手 %DSB modulation洗手 s_dsb = mt.*cos(2*pi*fc*t);b
25、eef洗手 B=2*fm;beef洗手 %noise = noise_nb(fc,B,N0,t);beef洗手 %s_dsb=s_dsb+noise;beef洗手 figure(1)洗手 subplot(311)洗手 plot(t,s_dsb);beefhold on;beef %画出 DSB信号波形 洗手 plot(t,mt,r-);beef %标示 mt的波形 洗手 title(DSB调制信号 );beef洗手 xlabel(t);beef洗手 %DSB demodulation洗手 rt = s_dsb.*cos(2*pi*fc*t);beef洗手 rt = rt-mean(rt);be
26、ef洗手 f,rf = T2F(t,rt);beef洗手 t,rt = lpf(f,rf,2*fm);beef洗手 subplot(312)洗手 plot(t,rt);beef hold on;beef洗手 plot(t,mt/2,r-);beef洗手 title(相干解调后的信号波形与输入信号的比较 );b e ef洗手 xlabel(t)洗手 subplot(313)洗手 f,sf=T2F(t,s_dsb);beef洗手 psf = (abs(sf).2)/T;beef洗手 plot(f,psf);beef洗手 axis(-2*fc 2*fc 0 max(psf);beef洗手 title
27、(DSB信号功率谱 );beef洗手 8 xlabel(f);beef洗手 function t st=lpf(f,sf,B)洗手 %This function filter an input data using a lowpass filter 洗手 %Inputs: f: frequency samples洗手 % sf: input data spectrum samples 洗手 % B: lowpasss bandwidth with a rectangle lowpass 洗手 %Outputs: t: time samples 洗手 % st: output datas tim
28、e samples 洗手 df = f(2)-f(1);beef洗手 T = 1/df;beef洗手 hf = zeros(1,length(f);beef洗手 bf = -floor( B/df ): floor( B/df ) + floor( length(f)/2 );beef洗手 hf(bf)=1;beef洗手 yf=hf.*sf;beef洗手 t,st=F2T(f,yf);beef洗手 st = real(st);beef洗手 例 1-8 洗手 %显示模拟调制的波形及解调方法 AM,文件 mam.m 洗手 %信源 洗手 close all;beef洗手 clear all;beef
29、洗手 dt = 0.001;beef %时间采样间隔 洗手 fm=1;beef %信源最高频率 洗手 fc=10;beef %载波中心频率 洗手 T=5;beef %信号时长 洗手 t = 0:dt:T;beef 洗手 mt = sqrt(2)*cos(2*pi*fm*t);beef %信源 洗手 %N0 = 0.01;beef %白噪单边功率谱密度 洗手 洗手 %AM modulation洗手 A=2;beef洗手 s_am = (A+mt).*cos(2*pi*fc*t);beef洗手 B = 2*fm;beef %带通滤波器带宽 洗手 %noise = noise_nb(fc,B,N0,
30、t);beef %窄带高斯噪声产生 洗手 %s_am = s_am + noise;beef洗手 洗手 figure(1)洗手 subplot(311)洗手 plot(t,s_am);beefhold on;beef %画出 AM信号波形 洗手 plot(t,A+mt,r-);beef %标示 AM的包络 洗手 title(AM调制信号及其包络 );beef洗手 xlabel(t);beef洗手 %AM demodulation洗手 9 rt = s_am.*cos(2*pi*fc*t);beef %相干解调 洗手 rt = rt-mean(rt);beef洗手 f,rf = T2F(t,rt
31、);beef洗手 t,rt = lpf(f,rf,2*fm);beef %低通滤波 洗手 subplot(312)洗手 plot(t,rt);beef hold on;beef洗手 plot(t,mt/2,r-);beef洗手 title(相干解调后的信号波形与输入信号的比较 );b e ef洗手 xlabel(t)洗手 subplot(313)洗手 f,sf=T2F(t,s_am);beef洗手 psf = (abs(sf).2)/T;beef洗手 plot(f,psf);beef洗手 axis(-2*fc 2*fc 0 max(psf);beef洗手 title(AM信号功率谱 );bee
32、f洗手 xlabel(f);beef洗手 例 1-9 洗手 %显示模拟调制的波形及解调方法 SSB, 吃饭 文件 mssb.m 洗手 %信源 洗手 close all;beef洗手 clear all;beef洗手 dt = 0.001;beef %时间采样间隔 洗手 fm=1;beef %信源最高频率 洗手 fc=10;beef %载波中心频率 洗手 T=5;beef %信号时长 洗手 t = 0:dt:T;beef 洗手 mt = sqrt(2)*cos(2*pi*fm*t);beef %信源 洗手 %N0 = 0.01;beef %白噪单边功率谱密度 洗手 洗手 %SSB modulat
33、ion洗手 s_ssb = real( hilbert(mt).*exp(j*2*pi*fc*t) );beef洗手 B=fm;beef洗手 %noise = noise_nb(fc,B,N0,t);beef洗手 %s_ssb=s_ssb+noise;beef洗手 figure(1)洗手 subplot(311)洗手 plot(t,s_ssb);beefhold on;beef %画出 SSB信号波形 洗手 plot(t,mt,r-);beef %标示 mt的波形 洗手 title(SSB调制信号 );beef洗手 xlabel(t);beef洗手 洗手 %SSB demodulation洗手
34、 rt = s_ssb.*cos(2*pi*fc*t);beef洗手 10 rt = rt-mean(rt);beef洗手 f,rf = T2F(t,rt);beef洗手 t,rt = lpf(f,rf,2*fm);beef洗手 洗手 subplot(312)洗手 plot(t,rt);beef hold on;beef洗手 plot(t,mt/2,r-);beef洗手 title(相干解调后的信号波形与输入信号的比较 );b e ef洗手 xlabel(t)洗手 subplot(313)洗手 f,sf=T2F(t,s_ssb);beef洗手 psf = (abs(sf).2)/T;beef洗
35、手 plot(f,psf);beef洗手 axis(-2*fc 2*fc 0 max(psf);beef洗手 title(SSB信号功率谱 );beef洗手 xlabel(f);beef洗手 例 2-0 洗手 %显示模拟调制的波形及解调方法 VSB, 吃饭 文件 mvsb.m 洗手 %信源 洗手 close all;beef洗手 clear all;beef洗手 dt = 0.001;beef %时间采样间隔 洗手 fm=5;beef %信源最高频率 洗手 fc=20;beef %载波中心频率 洗手 T=5;beef %信号时长 洗手 t = 0:dt:T;beef 洗手 mt = sqrt(
36、2)*( cos(2*pi*fm*t)+sin(2*pi*0.5*fm*t) );beef %信源 洗手 %VSB modulation洗手 s_vsb = mt.*cos(2*pi*fc*t);beef洗手 B=1.2*fm;beef洗手 f,sf = T2F(t,s_vsb);beef洗手 t,s_vsb = vsbpf(f,sf,0.2*fm,1.2*fm,fc);beef洗手 figure(1)洗手 subplot(311)洗手 plot(t,s_vsb);beefhold on;beef %画出 VSB信号波形 洗手 plot(t,mt,r-);beef %标示 mt的波形 洗手 title(VSB调制信号 );beef洗手 xlabel(t);beef洗手 %VSB demodulation洗手 rt = s_vsb.*cos(2*pi*fc*t);beef洗手 f,rf = T2F(t,rt);beef洗手 t,rt = lpf(f,rf,2*fm);beef洗手 subplot(312)洗手