2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Непрерывное излучение сигнала в матлабе
Сообщение05.03.2021, 15:37 
Доброго времени! Знакомлюсь с матлабом, нужно сгенерировать ЛЧМ сигнал.
При излучении одного импульса проблем не возникло:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
fs = 16000; % частота дискретизации

f0 = 100; % начальная частота
f1 = 8000; % конечная частота
fcarrier = (f0 + f1) / 2;
omega = f1 - f0;
tf = 2; % время излучения
t = 0 : 1/fs : tf - 1/fs;
t1 = -tf/2 : 1/fs : tf/2 - 1/fs;

s = cos(2 * pi * fcarrier .* t + 2 * pi * omega * t1.^2 / (2*tf));
plot(t, s);

Spc = abs(fft(s)); % амплитудный спектр
fx = fs/2*linspace(-1,1,length(Spc)); % значения частот
figure, plot(fx,fftshift(Spc)) % спектр
grid on
xlim([0 20])
title('Спектр ЛЧМ сигнала')
xlabel('частота, Гц')

sound(s,fs);
filename='C:\Chirp\chirp.wav';
audiowrite(filename,s,fs)
 


При излучении нескольких импульсов подряд возникает проблема. Вместо продолжения графика я получаю несколько окон, в каждом из которых одно излучение:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
fs = 16000; % частота дискретизации

f0 = 100; % начальная частота
f1 = 8000; % конечная частота
fcarrier = (f0 + f1) / 2;
omega = f1 - f0;
tf = 2; % время излучения
n = 0;
for i = 1:5
t = n : 1/fs : tf + n - 1/fs;
t1 = -tf/2 + n : 1/fs : tf/2 + n - 1/fs;

s = cos(2 * pi * fcarrier .* t + 2 * pi * omega * t1.^2 / (2*tf));
plot(t, s);

Spc = abs(fft(s)); % амплитудный спектр
fx = fs/2*linspace(-1,1,length(Spc)); % значения частот
figure, plot(fx,fftshift(Spc)) % спектр
grid on
xlim([0 20])
title('Спектр ЛЧМ сигнала')
xlabel('частота, Гц')

sound(s,fs);
filename='C:\Chirp\chirp.wav';
audiowrite(filename,s,fs)
end
 


Что делаю не так?

 
 
 
 Re: Непрерывное излучение сигнала в матлабе
Сообщение05.03.2021, 18:36 
Если я правильно понял код, вы все вещи — генерация сигнала, вывод графика, вывод звука — повторяете пять раз вместо того чтобы сгенерировать изначально пять длительностей сигнала подряд в одном массиве. Вроде стоит просто написать tf = 2 * 5, хотя я в матлабе не разбираюсь и проверить непосредственно не имею возможности.

 
 
 
 Re: Непрерывное излучение сигнала в матлабе
Сообщение09.03.2021, 06:01 
Да, повторял 5 раз одно излучение. Исправил

Используется синтаксис Matlab M
nChirps = 5 % Число повторений
chirpMulti = s; % Первый повтор
for i = 1:nChirps-1
    chirpMulti = [chirpMulti, s]; % Повторение излучения
end


А каким образом можно сделать паузу в цикле? Чем-то вроде "pause" или "delay" тормозится консоль, насколько я понимаю..

 
 
 
 Re: Непрерывное излучение сигнала в матлабе
Сообщение09.03.2021, 19:41 
Если нужна пауза в самом звуке, то надо просто добавить в массив семплов нули в нужном количестве. Цикл к этому не имеет отношения.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group