FSK调制解调MATLAB源代码.doc

上传人:仙人指路1688 文档编号:4139327 上传时间:2023-04-07 格式:DOC 页数:25 大小:76.50KB
返回 下载 相关 举报
FSK调制解调MATLAB源代码.doc_第1页
第1页 / 共25页
FSK调制解调MATLAB源代码.doc_第2页
第2页 / 共25页
FSK调制解调MATLAB源代码.doc_第3页
第3页 / 共25页
FSK调制解调MATLAB源代码.doc_第4页
第4页 / 共25页
FSK调制解调MATLAB源代码.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《FSK调制解调MATLAB源代码.doc》由会员分享,可在线阅读,更多相关《FSK调制解调MATLAB源代码.doc(25页珍藏版)》请在三一办公上搜索。

1、 FSK调制解调MATLAB源代码关键词:FSK 高斯白噪声 调制 眼图 信噪比 function FSKFc=10; %载频Fs=40; %系统采样频率Fd=1; %码速率N=Fs/Fd;df=10;numSymb=25;%进行仿真的信息代码个数M=2; %进制数SNRpBit=60;%信噪比SNR=SNRpBit/log2(M);seed=12345 54321;numPlot=25;%产生25个二进制随机码x=randsrc(numSymb,1,0:M-1);%产生25个二进制随机码figure(1)stem(0:numPlot-1,x(1:numPlot),bx);title(二进制随

2、机序列)xlabel(Time);ylabel(Amplitude);%调制y=dmod(x,Fc,Fd,Fs,fsk,M,df);numModPlot=numPlot*Fs;t=0:numModPlot-1./Fs;figure(2)plot(t,y(1:length(t),b-);axis(min(t) max(t) -1.5 1.5);title(调制后的信号)xlabel(Time);ylabel(Amplitude);%在已调信号中加入高斯白噪声randn(state,seed(2);y=awgn(y,SNR-10*log10(0.5)-10*log10(N),measured,dB

3、);%在已调信号中加入高斯白噪声figure(3)plot(t,y(1:length(t),b-);%画出经过信道的实际信号axis(min(t) max(t) -1.5 1.5);title(加入高斯白噪声后的已调信号)xlabel(Time);ylabel(Amplitude);%相干解调figure(4)z1=ddemod(y,Fc,Fd,Fs,fsk/eye,M,df);title(相干解调后的信号的眼图)%带输出波形的相干M元频移键控解调figure(5)stem(0:numPlot-1,x(1:numPlot),bx);hold on;stem(0:numPlot-1,z1(1:n

4、umPlot),ro);hold off;axis(0 numPlot -0.5 1.5);title(相干解调后的信号原序列比较)legend(原输入二进制随机序列,相干解调后的信号) xlabel(Time);ylabel(Amplitude); %非相干解调figure(6)z2=ddemod(y,Fc,Fd,Fs,fsk/eye/noncoh,M,df); title(非相干解调后的信号的眼图)%带输出波形的非相干M元频移键控解调figure(7)stem(0:numPlot-1,x(1:numPlot),bx);hold on;stem(0:numPlot-1,z2(1:numPlo

5、t),ro);hold off;axis(0 numPlot -0.5 1.5);title(非相干解调后的信号)legend(原输入二进制随机序列,非相干解调后的信号) xlabel(Time);ylabel(Amplitude); %误码率统计errorSym ratioSym=symerr(x,z1);figure(8)simbasebandex(0:1:5);title(相干解调后误码率统计)errorSym ratioSym=symerr(x,z2);figure(9)simbasebandex(0:1:5);title(非相干解调后误码率统计) %滤除高斯白噪声Delay=3;R=

6、0.5ropD=0; %滞后3syf,tf=rcosine(Fd,Fs,fir,R,Delay); %升余弦函数yo2,to2=rcosflt(y,Fd,Fs,filter,yf); %加入高斯白噪声后的已调信号和经过升余弦滤波器后的已调信号t=0:numModPlot-1./Fs;figure(10)plot(t,y(1:length(t),r-);hold on;plot(to2,yo2,b-);hold off;axis(0 30 -1.5 1.5);xlabel(Time);ylabel(Amplitude);legend(加入高斯白噪声后的已调信号,经过升余弦滤波器后的已调信号) t

7、itle(升余弦滤波前后波形比较)eyediagram(yo2,N);%眼图title(加入高斯白噪声后的已调信号的眼图) ASK数字通信系统matlab仿真及误码率分析别人叫我帮忙的但是我不是通信专业大家帮帮忙 1、假设某数字通信系统收发信息速率为1kbps,发送端对数字信息进行ASK调制后,使用模拟线路进行传输,其中,载波频率为4kHz,数字“1”对应有载波,数字“0”对应无载波,接收端接收到信号后使用载波信号为模板进行相关解调。考虑信道中存在不同的加性高斯白噪声的情况下,分析此时该系统的误码性能。 设计内容3的操作步骤:1、根据假设,系统信息速率为1kbps,考察1s内系统的误码性能,即

8、需要随机生成1000个“0”,“1”数据,每一位信息所占时间片大小为1ms。(round(rand(1,1000)) 2、由于系统载波频率为4kHz,生成载波信号Ca=sin(2*pi*4000*t),进行AM调制,若信息为“1”,载波幅度为1,若信息为“0”,载波幅度为0。例如,若第n位数据为“1”,则在第n位数据对应的时间片(n-1)ms<=t<=n ms)内为正弦载波信号,若每一个时间片内取100个采样点,则对应信号为sin(2*pi*4000*t),t =n-1+1/100:1/100:n;反之,为0。例如下图为10个离散数据:0,0,0,0,1,0,1,0,0,0,经过调

9、制后的波形。(见附件) 3、信号调制后送入信道,假设该信道存在较大的加性高斯白噪声,使用awgn函数生成在接收端接收到的叠加了噪声的信号。(Rx_m=awgn(Tx_m,-5,0),其中Tx_m为调制后的信号,Rx_m为在接收端接收的信号,-5表示信噪比为-5dB,0表示信号功率为0dBw) 4、在接收端用载波信号为模板进行相关解调。(即将1个时间片(1ms)内的接收信号(100个)与载波信号逐点相乘后累加,与阈值(载波信号逐点相乘后累加值的一半)相比,若大于阈值,则判定接收的信号为“1”,反之为“0”,阈值大小设为载波与载波相关值的一半) 5、将接收到的数据与发送数据进行比较,找出,并计算发

10、生错误的位的个数,计算此时的误码率。 6、修改awgn函数中的信噪比,重复以上操作,分析误码率变换的规律,并说明原因。 附二:可能用到的函数,可用“help 命令”的格式查看帮助 round rand awgn sum bitxor% Matlab version: 7.0.4.365 (R14) Service Pack 2% Date: 2009/01/15% Rs = 1000; % rate is 1kbps% fc = 4000; % carrier is 4k Hz% 1 employs carrier% 0 no carrier% t0 = 1; % time duration

11、is 1 secondN = 1000; % Sample number, equal to ratefc = 4000; % Carrier frequencyfs = 100; % Smapling rate per bitts = 1/fs; % Sampling intervalt0 = 1; % Time durationtc = t0/N; % Each bit lasts 1 millisecondt = 0:tc:t0-tc; % Time axis of message signalct = 0:ts/N:tc-ts/N; % Time axis of one bit dur

12、ationca = sin(2*pi*fc*ct); % Carrier signaltest = ca.;limitation = sum(test);snr = -5; % SNR in dBbercnt=0; % bit error counter% Message signalxn = round(rand(1,1000); % 1000 random bits% Modulation, mod_sig is the modulated signal without noisefor m1 = 1:Nif(xn(m1)=1) mod_sig(m1-1)*fs+1else mod_sig

13、(m1-1)*fs+1m1*fs) = zeros(1,fs); m1*fs) = ca;endend% Through AWGN Channelrn = awgn(mod_sig,snr,0); % Received signal% Correlation demodulationrxn = zeros(1,N); % Estimated value of rnfor m2 = 1:N % Processing bit by bit rn_seg = rn(m2-1)*fs+1m2*fs);sumrxn(m2) = rn_seg*ca; % Correlation and summation

14、if(sumrxn(m2)>=(limitation/2) % Determination criteria, 25 is the limited valuerxn(m2) = 1;elserxn(m2) = 0;endif(rxn(m2)=xn(m2)bercnt = bercnt+1;end% ifendber = bercnt/N;disp(信噪比为:);snrdisp(误码率为:);ber% sum(rxn-xn)subplot(311)stem(xn,rx),title(原始信号),xlabel(t/0.001s),axis(1 21 -.251.25)subplot(313)

15、stem(rxn,kx),title(解调信号),xlabel(t/0.001s),axis(1 21 -.251.25)subplot(312),plot(mod_sig),title(已调信号),axis(0 2000 -1.5 1.5) PSK信号载波相位符号定时联合估计程序载波环采用判决反馈环,去除噪声平方损耗,定时模块采用早迟原理, 里边有详细的注释,希望对大家有用。点击即可运行。 注:请注意m文件命名不要以数字开头,已修改。文件可运行。 %opsk simulation V3.0,%edit by leeemail=%2007-12-12-10:00%2007-12-12-10:0

16、0/email%初始化malab引擎%pi/4相位模糊问题已经解决,添加导频 clear all;close all;clc;%初始化malab引擎%设置信噪比,函数将计算信号功率,并添加噪声。SNR=-3; %unit dBtict=fix(clock);disp(sprintf(The procedure startsat %4d-%02d-%02d %02d:%02d:%02d.,t); Rc = 1e3;%unit bps,code rateT = 1/Rc;%unit s,码元宽度code_len=5000;format longf0 = 80 ; %Unit Hzfe = f0+5

17、; %unit Hz,freq errG1 = 0.5;%数值增大将会极大地增加环路捕获带宽 G2 = 0.03;%影响捕获时间Kc = 0.2;%影响捕获时间带宽,影响稳态性能figure_n=1;%采样倍数RATE=128;samp_len=code_len*RATE;%B = RCOSFIR(R, N_T, RATE, T, FILTER_TYPE); A=rcosfir(1,-4 +4,RATE,T,sqrt);B=A(1:length(A);%生成相位序列,8psk,8 phasecode_info = round(7*rand(1,code_len-24);%纠正相位模糊,添加导频

18、.有N*pi/4的相位模糊现象。 PILOT=zeros(1,24);PILOT(1)=0;PILOT(3)=0;code_info=code_info PILOT;%code_send =code_info;phi=1*code_info*2*pi/8+1*pi/8;% phi=pi/8:pi/4:pi*15/8;% phi=phi phi phi phi phi phi phi phi;% phi=phi phi phi phi phi phi phi phi;% phi=phi phi phi phi phi phi phi phi;code_info=exp(j*(phi)/1; %生

19、成误差相位序列delta_theta=2*pi*fe*T*(1:samp_len)/RATE;%unit rad %生成误差相位序列% clear j;% multi_phi=ones(1,RATE);% phi=kron(phi,multi_phi);% code_info=1*exp(j*(phi+delta_theta);% code_info=cos(phi);%生成相位序列,8psk,8 phasefor i=1:RATEif i=1inter_zero(i) = 1;elseinter_zero(i) = 0;end;end;s_tmp_i = kron(real(code_inf

20、o),inter_zero);s_tmp_q = kron(imag(code_info),inter_zero);%成形滤波。send_wave_i=conv(s_tmp_i,B);send_wave_q=conv(s_tmp_q,B); % figure(1);% subplot(2,1,1);% plot(send_wave_i,g);% subplot(2,1,2);% plot(send_wave_q,c);send_wave=send_wave_i + j*send_wave_q;%添加频偏for i=1:code_len*RATEsend_wave(i)=send_wave(i)

21、*exp(j*delta_theta(i);end;%添加白噪声。send_wave = awgn(send_wave,SNR,measured,1234,db);%添加白噪声。send_wave_i=real(send_wave);send_wave_q=imag(send_wave); %接收端匹配滤波recv_wave_i=conv(send_wave_i,B);recv_wave_q=conv(send_wave_q,B);clear j;%归一化recv_sig=(recv_wave_i+j*recv_wave_q)/max(abs(recv_wave_i+j*recv_wave_q

22、);recv_sig_i = real(recv_sig);recv_sig_q = imag(recv_sig);%2倍采样recv_sig1=recv_sig(1:32:length(recv_sig);% %添加内插滤波.t1=1:length(recv_sig1);% %16倍内插,intpolatin_num=8;t2=1:1/intpolatin_num:length(recv_sig1);recv_sig2=interp1(t1,recv_sig1,t2,spline);recv_sig = recv_sig2;% figure(figure_n);% figure_n = fi

23、gure_n + 1;% inter_zero=1 0 0 0 0 0 0 0;% plot(kron(real(recv_sig1),inter_zero),*);% hold on;% plot(real(recv_sig),o);%添加内插滤波% carrier and code PLL%时间序列,每个符号鉴相一次Ts=(1:code_len*32)*T/32;%初始化carrier loop参数.nco = exp(-j * 2 * pi * f0 * Ts);Srd = zeros(1,code_len);u = zeros(1,code_len);v = zeros(1,code_

24、len);z = zeros(1,code_len);a = zeros(1,code_len);b = zeros(1,code_len);e_theta = zeros(1,code_len);e = zeros(1,code_len + 1);Uc = zeros(1,code_len + 1);accumulator = 0;%码环所用的参数G3=1;G4=0.1;Kc2=1;err_tao=zeros(1,code_len);err_tao_on_time=zeros(1,code_len);e_tao=zeros(1,code_len);accumulator2 = 0;start

25、_diff=0;for k = 1 : code_len-1n=k*32;%取样最佳采样时刻nco(k) = exp(-j * (2 * pi * f0 * Ts(start_diff+n+round(Kc2*err_tao(k) +Kc * Uc(k);%Kc * Uc(k) Srd(k) = recv_sig(start_diff+n+round(Kc2*err_tao(k) * nco(k);%估计接收信号a(k) + b(k) * ju(k) = sign(real(Srd(k);v(k) =sign(imag(Srd(k); z(k) = sign(abs(real(Srd(k) -

26、 abs(imag(Srd(k);a(k) = u(k) * (z(k) + (1 / sqrt(2) * (1 - z(k);b(k) = v(k) * (-1 * z(k) + (1 / sqrt(2) * (1 + z(k); %估计接收信号a(k) + b(k) * j %去除符号影响e_theta(k) = imag( Srd(k) * (a(k) - b(k) * j);%误差累加,环路滤波accumulator = accumulator + e_theta(k);e(k+1) = G1 * e_theta(k) + G2 * accumulator;Uc(k+1)= Uc(k)

27、 + e(k+1); %码环误差提取%数字差分nco_e(k)=exp(-j * (2 * pi * f0 *Ts(start_diff+n+round(Kc2*err_tao(k)+8) +Kc * Uc(k);nco_l(k)=exp(-j * (2 * pi * f0 *Ts(start_diff+n+round(Kc2*err_tao(k)-8) +Kc * Uc(k); Srd_diff(k)=recv_sig(start_diff+n+round(Kc2*err_tao(k)+8) * nco_e(k)-recv_sig(start_diff+n+round(Kc2*err_tao

28、(k)-8) * nco_l(k); %去除符号影响err_tao_on_time(k)=real(Srd_diff(k) * (a(k) - b(k) * j); %误差累加,环路滤波accumulator2 = accumulator2 + err_tao_on_time(k);err_tao(k+1) = G3*err_tao_on_time(k) + G4*accumulator2; %生成调整步进量adj_step(k)=round(Kc2*err_tao(k+1)-round(Kc2*err_tao(k);Srd_i(k)=real(Srd(k);Srd_q(k)=imag(Srd

29、(k);% %判断象限。%oneif Srd_i(k) > 0 && Srd_q(k) > 0e_code(k) = atan(Srd_q(k)/Srd_i(k);end;%twoif Srd_i(k) < 0 && Srd_q(k) > 0e_code(k) = pi + atan(Srd_q(k)/Srd_i(k);end;%threeif Srd_i(k) < 0 && Srd_q(k) < 0e_code(k) = pi + atan(Srd_q(k)/Srd_i(k); end;%fourif Srd

30、_i(k) > 0 && Srd_q(k) < 0e_code(k) = 2*pi + atan(Srd_q(k)/Srd_i(k); end;%判决码元if e_code(k) > 0 && e_code(k) < pi/4e_code(k) = 0;elseif e_code(k) > pi/4 && e_code(k) < pi/2 e_code(k) = 1;elseif e_code(k) > pi/2 && e_code(k) < 3*pi/4 e_code(k) = 2

31、;elseif e_code(k) > 3*pi/4 && e_code(k) < pi e_code(k) = 3;elseif e_code(k) > pi && e_code(k) < 5*pi/4 e_code(k) = 4;elseif e_code(k) > 5*pi/4 && e_code(k) < 3*pi/2 e_code(k) = 5;elseif e_code(k) > 3*pi/2 && e_code(k) < 7*pi/4 e_code(k) = 6;els

32、ee_code(k) = 7;end;%end;%去除相位模糊check_pilot = 0;for i=code_len-1:-1:code_len-16check_pilot = check_pilot +e_code(i);end;check_pilot = check_pilot/16;check_pilot = round(check_pilot);switch check_pilotcase 0e_code = e_code;case 1e_code = mod(e_code - 1),8);Srd = Srd*exp(-j*pi/4);case 2e_code = mod(e_c

33、ode - 2),8);Srd = Srd*exp(-j*2*pi/4);case 3e_code = mod(e_code - 3),8);Srd = Srd*exp(-j*3*pi/4);case 4e_code = mod(e_code - 4),8);Srd = Srd*exp(-j*4*pi/4);case 5e_code = mod(e_code - 5),8);Srd = Srd*exp(-j*5*pi/4);case 6e_code = mod(e_code - 6),8);Srd = Srd*exp(-j*6*pi/4);case 7e_code = mod(e_code -

34、 7),8);Srd = Srd*exp(-j*7*pi/4);end;%去除相位模糊%误码率统计err_code=code_send(1:length(e_code)-7)-e_code(8:length(e_code); err_num=0;for i=length(err_code)/2:length(err_code)if err_code(i) = 0err_num = err_num + 1;end;end;err_rate=2*err_num/(length(err_code);disp(sprintf(When SNR = %8fdb,fe=%8fHz,SNR,fe-f0);d

35、isp(sprintf(误码率为%f%.,err_rate*100);%误码率统计%生成仿真图片Srd=Srd/max(abs(Srd);figure(figure_n);figure_n = figure_n + 1;scatter(real(Srd(1:code_len),imag(Srd(1:code_len),r,*); phi1=pi/8:pi/4:pi*15/8;code=exp(j*phi1);hold ongrid onscatter(real(code),imag(code),b,o);title(OPSK星座图);figure(figure_n);figure_n = fi

36、gure_n + 1;subplot(2,1,1);plot(err_tao_on_time(1:code_len),r);title(code loop);xlabel(err tao on time);subplot(2,1,2);stem(adj_step,o)xlabel(adj step);figure(figure_n);figure_n = figure_n + 1;subplot(2,1,1);plot(e_theta(1:code_len),r);title(carrier loop);xlabel(当前相差);subplot(2,1,2);plot(e(1:code_len

37、),b);xlabel(相位累加字);%释放空间t=fix(clock);disp(sprintf(The procedure succeedat %4d-%02d-%02d %02d:%02d:%02d.,t);elapsed_time=toc;disp(sprintf(Running time is %8f sec,elapsed_time); save(d:e_theta,send_wave,code_len);load d:e_theta send_wave code_len;% clear all; matlab怎么实现fsk我有一个代码,是关于FSK的,可是运行时出错,希望好心的朋

38、友出手指点,谢谢。代码:function fskd(g,f0,f1)if nargin > 3error(Too many input arguments)elseif nargin=1f0=1;f1=2;elseif nargin=2f1=2;endval0=ceil(f0)-f0;val1=ceil(f1)-f1;if val0 =0 | val1 =0;error(Frequency must be an integer); end if f0<1 | f1<1;error(Frequency must be bigger than 1); end t=0:2*pi/9

39、9:2*pi;cp=;sp=;mod=;mod1=;bit=; for n=1:length(g);if g(n)=0;die=ones(1,100);c=sin(f0*t);se=zeros(1,100);else g(n)=1;die=ones(1,100);c=sin(f1*t);se=ones(1,100);endcp=cp die;mod=mod c;bit=bit se;end ask=cp.*mod;subplot(2,1,1);plot(bit,LineWidth,1.5);grid on; title(Binary Signal);axis(0 100*length(g) -

40、2.5 2.5); subplot(2,1,2);plot(ask,LineWidth,1.5);grid on; title(FSK modulation);axis(0 100*length(g) -2.5 2.5);运行错误:? Input argument "f0" is undefined. Error in => fskd at 9val0=ceil(f0)-f0; 怎样用matlab实现psk和fsk我在网上下载了几个程序,都运行不了,部分地方还看不懂,希望热心的高手门帮忙解决一下,谢谢了!function qpskd(g,f)%For more inf

41、ormation, visit: %Modulation QPSK%Example: g is a binay vector; f is the carrier frequency.%qpskd(1 0 1 1 0 0,2)%Author. Diego Orlando Barrag醤 Guerrero%diegokillemall%Loja (ECUADOR)%See also:% . 328&objectType=FILEif nargin > 2error(Too many input arguments);elseif nargin=1f=1;end if f<1;e

42、rror(Frequency must be bigger than 1);end%*-*-*-*-*-*l=length(g);r=l/2;re=ceil(r);val=re-r; if val=0;error(Please insert a vector divisible for 2);end%*-*-*-*-*-* t=0:2*pi/99:2*pi;cp=;sp=;mod=;mod1=;bit=;for n=1:2:length(g);if g(n)=0 && g(n+1)=1;die=sqrt(2)/2*ones(1,100);die1=-sqrt(2)/2*ones

43、(1,100);se=zeros(1,50) ones(1,50);elseif g(n)=0 && g(n+1)=0;die=-sqrt(2)/2*ones(1,100);die1=-sqrt(2)/2*ones(1,100);se=zeros(1,50) zeros(1,50);elseif g(n)=1 && g(n+1)=0;die=-sqrt(2)/2*ones(1,100);die1=sqrt(2)/2*ones(1,100);se=ones(1,50) zeros(1,50);elseif g(n)=1 && g(n+1)=1;die=sqrt(2)/2*ones(1,100);die1=sqrt(2)/2*ones(1,100);se=ones(1,50) ones(1,50);endc=cos(f*t);s=sin(f*t);cp=cp die; %Amplitude cosinosp=sp die1; %Amplitude sinomod=mod c; %cosino carrier (Q)mod1=mod1 s; %sino carrier (I)bit=bit se;endbpsk=cp.*mod+sp.*mod1;subplot(2,1,1);p

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号