📄 myproject_fft.m
字号:
%--------------2FSK调制解调-------------%
%---------------初始化信息--------------%
clear;clc
close all
a=[1 0 1 1 0 0 1] %输入调制信号
n=length(a);
k1=1785; %信号为0时的频率
k2=1615; %信号为1时的频率
k3=100; %波特率
k4=64000; %采样频率64kHz(中频采样定理)
c=zeros(1,n*k4/k3); %采样数据个数,每个比特内采样数据为k4/k3
b=zeros(1,n); %输出信号
N=64; %64点的FFT
%---------------基带调制信号------------%
d=zeros(1,N);
for i=1:n
t=0:1/k4:1/k3-1/k4;
if(a(i)==1)
c((i-1)*k4/k3+1:i*k4/k3)=sin(2*pi*k2*t);
else
c((i-1)*k4/k3+1:i*k4/k3)=sin(2*pi*k1*t);
end
end %得到采样数据c
t1=0:1/k4:n/k3-1/k4;figure(1);
plot(t1,c); %基带信号
%--------------载频调制信号-------------%
f1=488300; %调制频率为488.3kHz
e=sin(2*pi*f1*t1);
cf=c.*e; %调制后数据中频为490kHz
t1=0:1/k4:n/k3-1/k4;figure(2);
plot(t1,cf); %调制信号
axis([0.01,0.03,-1,1])
xlabel('t'),ylabel('S0'),title('发送信号波形')
%-------------加入高斯白噪声------------%
snr=10;
cf=awgn(cf,snr); %加入高斯百噪声,信噪比为15dB
t1=0:1/k4:n/k3-1/k4;figure(3);
plot(t1,cf); %加入噪声后的信号cf
axis([0.01,0.03,-1,1])
xlabel('t'),ylabel('S1'),title('接收信号波形')
%cg=cf;
%----------------信号抽取--------------%
cg=downsample(cf,10); %cf换为c,未经调制
%p=zeros(1,N);
%t2=0:1/k4*10:n/k3-1/k4*10;
%p=fft(cg,N);
%figure(4),plot(t2*100*N,p)
%下面程序为fft解调
%---------------数据fft算法解调--------------%
cd=zeros(1,N);
for m=1:n
X=0;
Y=0;
for i=1:N
%if(i<=10)
cd(i)=cg(i+N*(m-1));
%else
% cd(i)=0;
%end
X=X+cd(i)*exp(-j*2*pi*27*(i-1)/N); %计算X(27),对应频率为1800Hz ,为0
Y=Y+cd(i)*exp(-j*2*pi*29*(i-1)/N); %计算X(29),对应频率为1600Hz,为1
end;
X=abs(X)^2;
Y=abs(Y)^2;
if(X>Y)
b(m)=0;
else
b(m)=1;
end %判决
%-------------求一个周期64点的DFT-------------%
for g=1:N
W=0;
for i=1:N
W=W+cd(i)*exp(-j*2*pi*g*(i-1)/N);
end
d(g)=abs(W)^2;
end
t=1:N;
figure(5);
plot(t,d);
xlabel('n'),ylabel('y'),title('码元1的64点FFT')
end
%--------判断调制数据与解调数据是否一致--------%
b
if(a==b)
right=1;
else
right=0;
end
n
right %right=1则检测正确
%-------------DSP数据转换(data)---------------%
data1=zeros(n*N,1);
data2=zeros(n*N,1);
cg=cg/max(abs(cg)); %数据归一化
for i=1:n*N
data1(i)=fix(cg(i)*32768);%cg换为c,未经调制;小数表示法
end
for i=1:n*N
if(data1(i)<0)
data2(i)=65536+data1(i);
else
data2(i)=data1(i);
end
end %若为正数则只乘以32768;若为负数,其绝对值部分乘以32768,再取反加1
data=dec2hex(data2); %十进制转为十六进制
data; %信号输入数据(0100110)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -