2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 IQ сигнал матлаб
Сообщение14.03.2021, 09:46 


30/11/19
53
Доброго времени. Создал лчм сигнал, теперь хочу задать его комплексным, и вывести в wav. Возникает ошибка и появляются вопросы.
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
fs = 16000; % частота дискретизации
f0 = 100; % начальная частота
f1 = 8000; % конечная частота
A = 1; % амплитуда

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;

Sre = A*cos(2 * pi * fcarrier .* t + 2 * pi * omega * t1.^2 / (2*tf));
Sim = A*sin(2 * pi * fcarrier .* t + 2 * pi * omega * t1.^2 / (2*tf));
s = complex(Sre, Sim);
s = A*exp(1i * 2 * pi * fcarrier .* t + 2 * pi * omega * t1.^2 / (2*tf));

% повторение импульса
nChirps = 5; % Число повторений
tpause = 2; % пауза (2 секунды)
chirpMulti = s;
for i = 1:nChirps-1
    %chirpMulti = repmat([s zeros(1, tpause * fs)], 1, nChirps); % повторение излучения с паузой в tpause секунд
    chirpMulti = [chirpMulti, s]; % Повторение излучения без паузы
end

% график временной области
dt = 1/fs;
n = length(chirpMulti);
t = 0:dt:(n-1)*dt;
plot(t, chirpMulti);

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

% запись в wav
%sound(chirpMulti,fs);
filename='D:\Vlad\ML\Chirp\chirp_pause_2sec.wav';
audiowrite(filename,chirpMulti,fs)
 


Появляется предупреждение:
Warning: Imaginary parts of complex X and/or Y arguments ignored
> In chirp_signal (line 42)

Warning: Data clipped when writing file.
In audiowrite>clipInputData (line 404)
In audiowrite (line 184)
In chirp_signal (line 56)


Это может быть связано с тем, что комплексный сигнал должен записываться в wav в 2 канала, но не могу понять, как осуществить.

Отдельно генерировал без записи в файл, все нормально:
Используется синтаксис Matlab M
Fs = 48000;
F = 1000;
t = 0 : 1/Fs: 0.1;
S0 = 1;
phase = 0;

Sre = 0.5 * S0 * cos(2*pi*F*t+phase);
Sim = 0.5 * S0 * sin(2*pi*F*t+phase);
S = complex(Sre, Sim);
Sp = S0*exp(1i*2*pi*F*t+phase);

Fc = 15e3;
Sm = Sre.*cos(2*pi*Fc*t+phase);
 


Можно ли указывать при записи wav количество каналов, битность и частоту дискретизации файла? Частота дискретизации, как полагаю, будет той же, что задал в коде..

 Профиль  
                  
 
 Re: IQ сигнал матлаб
Сообщение14.03.2021, 17:20 
Заслуженный участник


27/04/09
28128
Тада (это ссылка на официальную документацию по функции audiowrite). Как понимаю, никакого преобразования комплексных чисел в пары действительных та функция сама делать не будет всё равно — это стоит сделать заранее, взяв от того массива real и imag и соединив их в одну матрицу.

-- Вс мар 14, 2021 19:22:38 --

Dr Blue в сообщении #1509141 писал(а):
Частота дискретизации, как полагаю, будет той же, что задал в коде..
Конечно, последний обязательный аргумент она и есть. Количество каналов определится по размеру матрицы. Ну а битность указывать дополнительными параметрами как указано по ссылке.

 Профиль  
                  
 
 Re: IQ сигнал матлаб
Сообщение15.03.2021, 07:38 


30/11/19
53
arseniiv в сообщении #1509221 писал(а):
это стоит сделать заранее, взяв от того массива real и imag и соединив их в одну матрицу.

-- Вс мар 14, 2021 19:22:38 --

Если правильно понял:
Используется синтаксис Matlab M
Sre = 0.5 * S0 * cos(2*pi*F*t+phase);
Sim = 0.5 * S0 * sin(2*pi*F*t+phase);
S = complex(Sre, Sim);
Sp = S0*exp(1i*2*pi*F*t+phase);
X = real(Sp);
Y = imag(Sp);
C = [X,Y];
...
filename='D:\modulation.wav';
audiowrite(filename,C,Fs)
 

 Профиль  
                  
 
 Re: IQ сигнал матлаб
Сообщение15.03.2021, 15:52 
Заслуженный участник


27/04/09
28128
Главное чтоб работало — сам я не знаю как собрать два массива в матрицу в матлабе. :-) Если не сработает, то может быть нужно транспонировать C.

 Профиль  
                  
 
 Re: IQ сигнал матлаб
Сообщение15.03.2021, 17:34 


30/11/19
53
arseniiv
Используется синтаксис Matlab M
samples = 2 * pi * fcarrier .* t + 2 * pi * omega * t1.^2 / (2*tf);

%s = A*cos(samples) + j*A*sin(samples);
s = A*exp(j*samples); % комплексный лчм

% повторение импульса
nChirps = 2; % Число повторений
tpause = 2; % пауза (2 секунды)
z = complex(zeros(1, tpause*fs));
chirpMulti = repmat([s z], nChirps);


Как-то так, работает)

Спасибо за идею, работаю дальше)

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

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



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

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


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

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