Index exceeds matrix dimensions.

조회 수: 6 (최근 30일)
Anastasia Lyamina
Anastasia Lyamina 2019년 5월 28일
편집: Voss 2024년 4월 25일
clc;
clear;
%Исходные данные
F=100; %частота следования импульсов, Гц
alpha=0.5; %Коэффициент скругления
U0=1; % Амплитуда несущего колебания, В
f0=100000; %частота несущего колебания, Гц
Fs=10*f0; %частота дискретизации, Гц
T=1/F; %Период следования импульсов, с
Ts=1/Fs; %Период дискретизации, с
f=140:0.1:160; % массив частот
M=length(f);
j=complex(0, 1);
%Добавление шума
SNR=-15; % добавление шума, дБ
% 1. Расчёт импульса приподнятого косинуса
delay=3; %задержка
g=rcosine(F, 200*F, 'sqrt', alpha, delay); %импульс приподнятого косинуса
g=g/max(g);
N1=length(g);
t1=0:(1/(200*F)):(N1-1)*(1/(200*F));
% 2. Синтез случайного кода
Nsym=100; %число символов
p=ceil(2.*rand(1,Nsym));
p=p-1;
%----------------------------------Модуляция DQPSK------------
% 3. Расчёт символов a
a=zeros(1, Nsym);
for n=1:Nsym %Вычисление A и B
if p(n)==0
a(n)=-1;
end
if p(n)==1
a(n)=1;
end
end
n=1:Nsym;
figure(1)
stem(n, a);
%xlim([0, 20]);
ylim([-2, 2]);
xlabel('n');
ylabel('a');
grid on
% 4. Синтез модулирующего сигнала
N=Nsym*N1;
t=0:Ts:(N-1)*Ts;
Sa=zeros(1,N);
for n=1:Nsym
for k=1:N1
Sa(k+(n-1)*200*F)=a(n).*g(k)+Sa(k+(n-1)*200*F);
end
end
figure(2)
plot(t, Sa);
title('График модулирующего сигнала символов a');
xlim([0, 10]);
ylim([-2, 2]);
xlabel('t, с');
ylabel('Sa(t), В');
grid on
% 5. Балансная модуляция
Ug=U0*cos(2*pi*f0*t); %несущее колебание
Uw=Sa.*Ug; %радиосигнал
P=mean(Uw.*Uw); % мощность в Вт
PF=10*log10((max(Uw.*Uw))/P); %пик-фактор
Ps=10*log10(P); % мощность в дБ
Noise=wgn(1, N, Ps-SNR);
Uw=Uw+Noise; % добавление шума
figure(3)
plot(t, Uw);
xlim([0, 20]);
ylim([-2, 2]);
xlabel('t, с');
ylabel('Uw(t), В');
grid on
%----------------------------------Демодуляция BPSK------------
% 6. Балансная демодуляция
t=0:Ts:(N-1)*Ts;
Uda=Uw.*cos(2*pi*f0*t);
Sfa=filter(g, 1, Uda);
Sfa=Sfa/max(Sfa)*max(Sa);
t=0:(1/(200*F)):(N-1)*(1/(200*F));
figure(4)
subplot(2, 1, 1);
plot(t, Sfa);
title('График демодулированного сигнала a');
xlim([0, 0.23]);
ylim([-2, 2]);
xlabel('t, с');
ylabel('Sa(t), В');
grid on

답변 (1개)

Pooja Kumari
Pooja Kumari 2024년 4월 25일
Hello,
I understand you are facing "Index exceeds matrix dimensions." error because you are using wrong function names.
  1. Correct MATLAB Functions: use rcosdesign for designing a raised cosine filter instead of any incorrect or untranslated function names
  2. Correct the loop for adding noise and synthesizing the modulating signal.
  3. Correct the implementation of noise addition to the signal, ensuring that the white Gaussian noise (wgn) function is used correctly with respect to signal power and SNR.
Please refer below for the corrected code:
clc;
clear;
% Initial data
F = 100; % Pulse repetition frequency, Hz
alpha = 0.5; % Rolloff factor
U0 = 1; % Carrier amplitude, V
f0 = 100000; % Carrier frequency, Hz
Fs = 10 * f0; % Sampling frequency, Hz
T = 1 / F; % Pulse repetition period, s
Ts = 1 / Fs; % Sampling period, s
F = 140: 0.1: 160; % Array
M = length(F);
j = complex(0, 1);
% Adding noise
SNR = -15; % Noise addition, dB
% Calculation of the raised cosine pulse
delay = 3; % Delay
g = rcosdesign(alpha, delay, 200*F, 'sqrt'); % Raised cosine pulse
g = g / max(g);
N1 = length(g);
t1 = 0: (1 / (200 * F)) : (N1-1) * (1 / (200 * F));
% 2. Synthesis of random code
Nsym = 100; % Number of symbols
p = ceil(2. * rand(1, Nsym));
p = p-1;
% ---------------------------------- DQPSK Modulation ------------
% 3. Calculation of symbols a
a = zeros(1, Nsym);
for n = 1: Nsym % Calculating A and B
if p(n) == 0
a(n) = -1;
end
if p(n) == 1
a(n) = 1;
end
end
n = 1: Nsym;
% Plot 1)
stem(n, a);
% xlim([0, 20]);
ylim([-2, 2]);
xlabel('n');
ylabel('a');
grid on;
% 4. Synthesis of the modulating signal
N = N1 * Nsym;
t = 0: Ts: (N-1) * Ts;
Sa = zeros(1, N);
for n = 1: Nsym
for k = 1: N1
Sa(k + (n-1) * 200 * F) = a(n) * g(k) + Sa(k + (n-1) * 200 * F);
end
end
% Figure 2)
plot(t, Sa);
title('Plot of the modulating signal of symbols a');
xlim([0, 10]);
ylim([-2, 2]);
xlabel('t, s');
ylabel('Sa(t), V');
grid on;
% 5. Balanced modulation
Ug = U0 * cos(2 * pi * f0 * t); % Carrier oscillation
Uw = Sa .* Ug; % Radio signal
P = mean(Uw .* Uw); % Power in W
PF = 10 * log10((max(Uw .* Uw)) / P); % Peak factor
Ps = 10 * log10(P); % Power in dB
Noise = wgn(1, N, Ps-SNR);
Uw = Uw + Noise; % Adding noise
% Figure (3)
plot(t, Uw);
xlim([0, 20]);
ylim([-2, 2]);
xlabel('t, s');
ylabel('Uw(t), V');
grid on;
% ---------------------------------- BPSK Demodulation ------------
% 6. Balanced demodulation
t = 0: Ts: (N-1) * Ts;
Uda = Uw .* cos(2 * pi * f0 * t);
Sfa = filter(g, 1, Uda);
Sfa = Sfa / max(Sfa) * max(Sa);
t = 0: (1 / (200 * F)) : (N-1) * (1 / (200 * F));
% Figure (4)
subplot(2, 1, 1);
plot(t, Sfa);
title('Plot of the demodulated signal a');
xlim([0, 0.23]);
ylim([-2, 2]);
xlabel('t, s');
ylabel('Sa(t), V');
grid on;

카테고리

Help CenterFile Exchange에서 Pulse and Transition Metrics에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by