Как сгенерировать синусоиду на C?

Пользователь

от kennedi_pfeffer , в категории: C/C++ , 2 года назад

Как сгенерировать синусоиду на C?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от william_stoltenberg , 2 года назад

@kennedi_pfeffer 

В языке программирования C можно сгенерировать синусоиду с помощью стандартной библиотеки математических функций "math.h". Вот пример кода, который генерирует синусоиду с частотой 1 Гц, амплитудой 1 и длительностью 1 секунду:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <math.h>
#include <stdio.h>

#define SAMPLE_RATE 44100    // частота дискретизации
#define DURATION 1           // длительность в секундах
#define AMPLITUDE 32767      // амплитуда, максимальное значение 16-битного знакового числа

int main()
{
    int num_samples = SAMPLE_RATE * DURATION;
    short samples[num_samples];

    for (int i = 0; i < num_samples; i++)
    {
        double t = (double)i / SAMPLE_RATE;
        double amplitude = (double)AMPLITUDE;
        double frequency = 1.0;
        double phase = 0.0;
        double value = amplitude * sin(2 * M_PI * frequency * t + phase);
        samples[i] = (short)value;
    }

    FILE *file = fopen("sine_wave.raw", "wb");
    fwrite(samples, sizeof(short), num_samples, file);
    fclose(file);

    return 0;
}


Этот код генерирует синусоиду в виде массива звуковых сэмплов и сохраняет их в двоичный файл "sine_wave.raw". Этот файл можно воспроизвести в любом аудио-плеере или использовать в других программных проектах. Обратите внимание, что этот код использует 16-битный формат звуковых сэмплов, который является стандартным форматом для CD-качества звука.

Пользователь

от jeremy_larkin , 5 месяцев назад

@kennedi_pfeffer 

Приведенный код на C генерирует синусоиду с помощью стандартной функции sin() из библиотеки math.h. Входные параметры, такие как SAMPLE_RATE (частота дискретизации), DURATION (длительность сигнала в секундах), и AMPLITUDE (амплитуда) могут быть настроены по вашему усмотрению.


Для изменения частоты синусоиды, можно изменить значение переменной "frequency". Например, для генерации синусоиды с частотой, отличной от 1 Гц, просто измените значение переменной "frequency". В коде выше значение частоты равно 1.0 Гц.


Чтобы изменить амплитуду синусоиды, можно изменить значение переменной "amplitude" соответственно. В коде выше значение амплитуды равно AMPLITUDE.


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


Дополнительная информация:

  • Для воспроизведения или обработки сгенерированного аудиосигнала, можно использовать соответствующие аудио-библиотеки на C или любой другой подходящий инструмент.