实验一
设计任务:
用MatLib仿真一个BFSK通信系统,基本参数:
1)fc=1000Hz;
2)Rb=100bps;
3)信息序列:“Hello world”的ASCII
实验与报告基本要求:
1)Matlab程序,要点旁注(可打印后手写);
2)绘出信号波形,绘出信号PSD;
3)给出解调后的信息序列;
4)将信息重复3遍以上,FSK信号保存为WAV文件格式,使用音频播放,聆听;M文件:
wave.m
function[t,mt]=wave(m,dt,fs)
l=length(m);
mt=[];
ddt=1/fs;
n=floor(dt*fs);
m_add=ones(1,n);
for i=1:l
if(m(i))
mt=[mt,m(i),m_add];
else
mt=[mt,m(i),m_add*0];
end
t=(1:((n+1)*l))*ddt;
end
my_filter.m
function[num,den]=my_filter(wp,ws,ap,as)
if nargin<4
as=15;
end
if nargin<4
ap=3;
end
[n,wn]=buttord(wp,ws,ap,as);
[num,den]=butter(n,wn);
end
代码:
f0=800;%‘0’码载波频率
f1=1200;%‘1’码载波频率
fs=4000;%采样频率
Rb=100;%比特率
dt=1/Rb;%一个比特发送时间
A0=2;%调制幅度
A1=2;%相干解调幅度
miu=0;sigma=0.3;%miu:高斯白噪声均值,sigma:高斯白噪声均方差
str='Hello world';%信号字符串
m_dec=abs(str);%将信号字符串转换成ASCII码(十进制) m_bin=dec2bin(m_dec,8);
m_bin=abs(m_bin)-48;%将十进制转换成8比特二进制矩阵
m=[];
for i=1:size(m_bin,1)
m=[m,m_bin(i,:)];
end%将二进制转换成行向量
[t,m]=wave(m,dt,fs);%对信号采样
mt_f1=m.*cos(2*pi*f1*t)*A0;%频率f1调制
mt_f0=(~m).*cos(2*pi*f0*t)*A0;%频率f0调制
mt=mt_f1+mt_f0;%发送信号
l=length(mt);
subplot(2,1,1);plot(t,mt);
grid on;xlabel('t/s');title('m(t)');%发送信号波形subplot(2,1,2);periodogram(mt,[],l,fs);grid on;%发送信号PSD
nt=normrnd(miu,sigma,1,l);%噪声
st=mt+nt;%接收信号
wp0=[0.65,1.05]/2;ws0=[0.7,0.9]/2;
[num0,den0]=my_filter(wp0,ws0);%产生650HZ<f<1050HZ带通滤波器
st_f0=filter(num0,den0,st);%过滤噪声
wp0=0.01;ws0=0.1;
[num0,den0]=my_filter(wp0,ws0);%产生20HZ<f<200HZ低通滤波器
st_f0=filter(num0,den0,st_f0.*cos(2*pi*f0*t)*A1);%相干解调并通过低通滤波器
wp1=[1.05,1.35]/2;ws1=[1.1,1.3]/2;
[num1,den1]=my_filter(wp1,ws1);%产生1050HZ<f<1350HZ 带通滤波器
st_f1=filter(num1,den1,st);%过滤噪声
st_f1=filter(num0,den0,st_f1.*cos(2*pi*f1*t)*A1);%相干解调并通过低通滤波器
figure(2);
subplot(2,1,1);
plot(t,st_f0);grid on;
xlabel('t/s');title('st_f0');%f0解调波形
subplot(2,1,2);
plot(t,st_f1);grid on;
xlabel('t/s');title('st_f1');%f1解调波形
m_r=(st_f1>st_f0);%判决输出
figure(3);
plot(t,m_r,'r');grid on;
xlabel('t/s'),title('m_r');%m_r波形
wavwrite(repmat(m_r,1,5),'hello.wav');
波形:
1.发送信号及其PSD:
2.解调后f0,f1信号
3.判决后波形:。