📄 gsmk.m
字号:
function gsmk;
N = 32;
BT = 0.5;
Amp = 1;
num_bits = 10;
OSR = N;
Tb = 3.692e-6;
Psig = (Amp^2/2)*N;
for n= 1:18
SNR(n) = n-1;
Pn = Psig/(10^(SNR(n)/10));
sigma(n) = sqrt(Pn);
end
for n = 1:18
errors = 0;
totalsymbols = 0;
window = [-1.5:1/N:1.5];
% coeff = errfunc(window,BT);
[g,q] = ph_g(Tb,OSR,BT);
% coeff = [g,0];
coeff = g;
while(errors<round(10000*(0.68)^(n-1)))
tx_data = round(rand(1,num_bits));
% tx_data = ones(1,num_bits);
% tx_data = zeros(1,num_bits);
% NRZ = ((rand(1,num_bits)>0.5)-0.5)*2;
NRZ = ((tx_data>0.5)-0.5)*2; %1变到1,0变到-1
clear impulse
impulse(1:N:num_bits*N) = [NRZ];
phase = filter(coeff,1,impulse);
B = 1/(2*N);
A = [1 -1];
phi =filter(B,A,phase);
I = cos(2*pi.*phi);
Q = sin(2*pi.*phi);
fidI = fopen('I.csv','w');
fidQ = fopen('Q.csv','w');
fprintf(fidI,'GMSK data for generating I\n');
fprintf(fidI,'GMSK data for generating Q\n');
for ii = 1:1:length(I)
fprintf(fidI,'%d, %f\n',ii,I(ii));
fprintf(fidQ,'%d, %f\n',ii,Q(ii));
end
fclose(fidI);
fclose(fidQ);
noiseI = normrnd(0,sigma(n),1,length(I))./20;
noiseQ = normrnd(0,sigma(n),1,length(Q))./20;
% noiseI = 0; noiseQ = 0; %没有噪声的时候只有最后两个解错
In = I + noiseI;
Qn = Q + noiseQ;
z = In + Qn*j;
[symbols demod] = detect0(z,N);
% symbols-NRZ
% xor(symbols(2:length(symbols)),NRZ(1:length(NRZ)-3)) % noiseI = 0; noiseQ = 0;
% xor(symbols(2:length(symbols)),NRZ) % noiseI = 0; noiseQ = 0;
% xor(symbols(2:length(symbols)),NRZ(1:length(NRZ))) % 有噪声
% [symbols1 demod1] = trN2(z,N);
% xor(symbols,symbols1);
s1 = length(symbols);
errors = errors + sum(rem((symbols(4:sl)>0)+(NRZ(1:sl-3)>0),2));
totalsymbols = totalsymbols + length(symbols(4:s1));
end
prob(n) = errors/totalsymbols;
trial1 = fopen('tr8b.txt','a');
fprintf(trial1,'%d %1.10f\n',SNR(N),prob(n));
fclose(trial1);
end
%比较了 symbols 与 NRZ 发现 NRZ最后数3个不用,symbols第一个不用,可以解读
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -