2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Непрерывное излучение сигнала в матлабе
Сообщение05.03.2021, 15:37 


30/11/19
53
Доброго времени! Знакомлюсь с матлабом, нужно сгенерировать ЛЧМ сигнал.
При излучении одного импульса проблем не возникло:
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Заслуженный участник


27/04/09
28128
Если я правильно понял код, вы все вещи — генерация сигнала, вывод графика, вывод звука — повторяете пять раз вместо того чтобы сгенерировать изначально пять длительностей сигнала подряд в одном массиве. Вроде стоит просто написать tf = 2 * 5, хотя я в матлабе не разбираюсь и проверить непосредственно не имею возможности.

 Профиль  
                  
 
 Re: Непрерывное излучение сигнала в матлабе
Сообщение09.03.2021, 06:01 


30/11/19
53
Да, повторял 5 раз одно излучение. Исправил

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


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

 Профиль  
                  
 
 Re: Непрерывное излучение сигнала в матлабе
Сообщение09.03.2021, 19:41 
Заслуженный участник


27/04/09
28128
Если нужна пауза в самом звуке, то надо просто добавить в массив семплов нули в нужном количестве. Цикл к этому не имеет отношения.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group