fsk_nocoherent.m

来自「自己开发的fsk调制以及非相关解调代码」· M 代码 · 共 87 行

M
87
字号
clear all;
close all;

%Sampling frequency.
Fs = 40000;
% samples per bit
L = 100;
Tb = L/Fs;
Fc1 = 5200;
Fc2 = 4800;

t=[1/Fs:1/Fs:Tb];

num_samp = 30000;
Vec_sgnl = wavrecord(num_samp,Fs,1);



[a b] = size(Vec_sgnl);
if(b == 1)
    Vec_sgnl = Vec_sgnl';
end

u1 = cos(2*pi*Fc1*t);
v1 = sin(2*pi*Fc1*t);
u2 = cos(2*pi*Fc2*t);
v2 = sin(2*pi*Fc2*t);

% The process of bit synchronization
max_vec = [];
Demodul_bits = [];
buf = [];
buff = [];
for ii=1:(2*L-1)
   Buf_bits = Vec_sgnl(ii: ii+L);
   Buf_Output = conv(u1,Buf_bits);
   max_per_value = max(Buf_Output);
   max_vec = [ max_vec; max_per_value ii ];
end


[max_value,idx] = max(max_vec(:,1));
bit_start = max_vec(idx,2);
fprintf('max_value = %d \r\n',max_value);

% Buf_Output = conv(u1,Vec_sgnl(1:3*L));
% [max_value,idx] = max(Buf_Output);
% bit_start = idx;

Data_stream = Vec_sgnl(bit_start:end);

len = length(Data_stream);

M = fix(len/L);

for ii = 0:(M-1)
  Data_Bit = Data_stream((1 + L*ii): (L + L*ii));
  
  u1_out = Data_Bit.*u1;
  ru1 = sum(u1_out);

  v1_out = Data_Bit.*v1;
  rv1 = sum(v1_out);

  r1 = ru1^2 + rv1^2;

  u2_out = Data_Bit.*u2;
  ru2 = sum(u2_out);

  v2_out = Data_Bit.*v2;
  rv2 = sum(v2_out);

  r2 = ru2^2 + rv2^2;

  z = r1 - r2;
  buf1 = r1/r2;
  buf2 = r2/r1;
  buf = [buf buf1];
  buff =[buff buf2];

  %decision
  if (z>=0)
	  Demodul_bits = [Demodul_bits 1];
  else
      Demodul_bits = [Demodul_bits 0];
  end;
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?