Как использовать компьютер в качестве генератора сигналов произвольной формы

Добавлено 12 декабря 2018 в 06:26
Цифровая обработка сигналов в Scilab  (содержание)

Узнайте, как ваш компьютер может работать в качестве генератора сигналов произвольной формы. В данной статье мы будем использовать Scilab для генерирования цифровых сигналов, которые могут быть преобразованы в аналоговые сигналы с помощью звукового аппаратного обеспечения компьютера.

В последнее время я пишу статьи, которые демонстрируют использование Scilab для различных задач обработки сигналов. Эксперименты с DSP в такой вычислительной среде чрезвычайно удобны; алгоритмы, используемые в системах связи, датчиках и аудиосистемах, могут быть быстро разработаны и усовершенствованы, а сигналы могут быть тщательно проанализированы во временной и частотной областях.

Следующий шаг – расширить всю эту деятельность по обработке сигналов в область реальных сигналов напряжения, и Scilab делает выполнение этого очень простым (я предполагаю, что ваш компьютер может воспроизводить звук). В настоящее время у меня нет доступа к MATLAB, но я предполагаю, что он обеспечивает эквивалентные функциональные возможности, поэтому я надеюсь, что почти всё в этой статье будет актуально и для пользователей MATLAB. Существует еще одна бесплатная альтернатива MATLAB под названием GNU Octave. Я никогда не использовал его, поэтому я был бы признателен за любые отзывы пользователей Octave о том, как в нем реализовать операции преобразования цифры в аналог, обсуждаемые в этой и следующей статьях.

Вероятно, существует довольно много способов использовать эти возможности преобразования Scilab в аналог (или MATLAB в аналог). Один из вариантов использования, который приходит на ум, – это тестирование высокочастотной части беспроводного передатчика путем генерирования модулирующих сигналов основной полосы частот в Scilab и преобразования их в аналоговые сигналы, которые подаются на радиочастотную схему. В данной статье мы остановимся на более общем приложении: использование типового компьютера в качестве генератора сигналов произвольной формы.

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

Предыдущие статьи о цифровой обработке сигналов в Scilab

Базовая система

Единственное, что вам нужно из дополнительного аппаратного обеспечения, – это аудиокабель с разъемами на обоих концах. Один конец подключается к разъему наушников на компьютере, а второй конец подает сигнал на соответствующую схему (или на осциллограф). На следующей фотографии показано, как я подключил пробник осциллографа Tektronix к аудиоразъему.

Подключение аудиокабеля с выхода компьютера к осциллографу для тестирования генерируемых сигналов
Подключение аудиокабеля с выхода компьютера к осциллографу для тестирования генерируемых сигналов

Команда, которую мы будем использовать для генерирования аналоговых сигналов, называется sound(). Её единственный обязательный входной аргумент – это массив чисел, который вы хотите отправить на звуковой цифро-аналоговый преобразователь. Значения в этом массиве должны быть больше или равны –1 и меньше или равны +1. Это удобно, если вы работаете с синусоидальными сигналами, потому что функции sin() и cos() генерирую сигналы в этом диапазоне. Однако, в целом, вам необходимо знать амплитуды вашего сигнала и масштабировать их в диапазон [–1,1] по мере необходимости.

Функция sound() также принимает аргумент для необходимой частоты дискретизации. Если вы не указываете частоту дискретизации, то она использует значение по умолчанию, которое составляет 22,05 кГц.

Пока мы говорим о частоте дискретизации, я должен упомянуть о серьезном ограничении, которое затрагивает любые попытки использовать звуковое оборудование компьютера в качестве генератора сигналов. Это аппаратное обеспечение предназначено для аудиосигналов, и, следовательно, его максимальная частота дискретизации была выбрана в соответствии с качеством звука, которое должно обеспечиваться аппаратным обеспечением. У меня сложилось впечатление, что в настоящее время многие компьютеры поддерживают частоты дискретизации до 192 кГц, но четкую информацию по этому вопросу найти трудно.

Генерирование синусоиды

Давайте начнем с простого примера. Мы сгенерируем синусоиду 441 Гц и рассмотрим некоторые осциллограммы.

SignalFrequency = 441;
SamplingFrequency = 22.05e3;
Samples_per_Cycle = SamplingFrequency/SignalFrequency;
n = 0:(Samples_per_Cycle-1);
Signal_OneCycle = sin(2*%pi*n / (SamplingFrequency/SignalFrequency));

Массив n, и следовательно, и массив Signal_OneCycle, имеет длину 50. Период сэмплирования составляет 1/22050 ≈ 45 мкс. Таким образом, один период сигнала длится приблизительно 50 × 45 мкс = 2.25 мс. Я предпочитаю, чтобы общая продолжительность составляла примерно 10 секунд, чтобы у меня было достаточно времени, чтобы посмотреть на сигнал на осциллографе. Следующий цикл for используется для расширения массива Signal_OneCycle до массива, длина которого соответствует требуемой длительности сигнала.

CycleDuration = (1/SamplingFrequency) * length(n);
FullSignal = 0;
for k=1:(10/CycleDuration)
  > FullSignal = [FullSignal Signal_OneCycle];
  > end

Теперь мы готовы генерировать сигнал. Нам не нужно указывать частоту дискретизации, потому что частота дискретизации, которую я использовал (22,05 кГц) равна значению по умолчанию.

sound(FullSignal)

Следующая осциллограмма показывает сгенерированный сигнал. Внизу мы можете увидеть измерения размаха (пик-пик) сигнала и частоты. Амплитуда сигнала, взятого напрямую с разъема наушников, вероятно, будет достаточной для многих приложений; если вам нужно более высокое напряжение, то будет достаточно простой схемы на операционном усилителе.

Осциллограмма сгенерированной синусоиды
Осциллограмма сгенерированной синусоиды

Одним особенно удобным аспектом генерирования аналоговых сигналов таким способом является то, что функция регулировки громкость на компьютере дает вам превосходный контроль над амплитудой сигнала. Следующие осциллограммы дают представление о взаимосвязи между амплитудой сигнала и выставленной на компьютере громкостью.

Влияние регулировки громкости на компьютере на амплитуду генерируемого сигнала. Вариант 1
Влияние регулировки громкости на компьютере на амплитуду генерируемого сигнала. Вариант 1
Влияние регулировки громкости на компьютере на амплитуду генерируемого сигнала. Вариант 2
Влияние регулировки громкости на компьютере на амплитуду генерируемого сигнала. Вариант 2
Влияние регулировки громкости на компьютере на амплитуду генерируемого сигнала. Вариант 3
Влияние регулировки громкости на компьютере на амплитуду генерируемого сигнала. Вариант 3

Генерирование треугольного сигнала

Следующие команды могут использоваться для генерирования треугольного сигнала. Мы будем использовать ту же частоту (т.е. 441 Гц), то есть длину в 25 выборок.

LowerLimit = -1;
UpperLimit = 1;
StepSize = (UpperLimit - LowerLimit)/(length(n)/2);
UpwardRamp = LowerLimit:StepSize:(UpperLimit - StepSize);
DownwardRamp = UpperLimit:-StepSize:(LowerLimit + StepSize);
TriangleWave_OneCycle = [UpwardRamp DownwardRamp];
TriangleWave_Full = -1;
for k=1:(10/CycleDuration)
  > TriangleWave_Full = [TriangleWave_Full TriangleWave_OneCycle];
  > end
sound(TriangleWave_Full)
Сгенерированный треугольный сигнал
Сгенерированный треугольный сигнал

Прежде чем мы закончим, я хочу отметить, что эта система обеспечивает не только удобное управление амплитудой, но и быструю настройку частоты: вы можете изменить частоту аналогового сигнала, не изменяя цифровые значения, а указав другую частоту дискретизации при вызове функции sound(). Например, если указанная частота дискретизации выше исходной частоты дискретизации в 2 раза, то новая частота сигнала будет выше, чем исходная частота, в 2 раза.

sound(TriangleWave_Full, SamplingFrequency*2)
Сгенерированный сигнал с частотой вдвое больше исходной частоты
Сгенерированный сигнал с частотой вдвое больше исходной частоты
sound(TriangleWave_Full, SamplingFrequency/2)
Сгенерированный сигнал с частотой вдвое меньше исходной частоты
Сгенерированный сигнал с частотой вдвое меньше исходной частоты

Заключение

Мы обсудили простой способ, который использует Scilab (или MATLAB), чтобы превратить обычный компьютер в генератор сигналов произвольной формы. В данной статье представлены команды Scilab для генерирования синусоидального и треугольного сигналов, а в следующей статье мы рассмотрим другие типы сигналов.

Теги

DAC / ЦАП (цифро-аналоговый преобразователь)DSP / ЦОС (цифровая обработка сигналов)ScilabГенератор сигналов произвольной формы

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.