Tag: sin

使用C创建立体声sin WAV

我试图在C中创建一个立体声正弦波WAV,可能有一个不同的(可能是空白的)左右声道。 使用此function为每个通道生成一个音调: int16_t * create_tone(float frequency, float amplitude, float duration) 然后我打开一个FILE*并调用create_wav 。 以下是我用来创建WAV的两个结构: struct wav_h { char ChunkID[4]; int32_t ChunkSize; char Format[4]; char Subchunk1ID[4]; int32_t Subchunk1Size; int16_t AudioFormat; int16_t NumChannels; int32_t SampleRate; int32_t ByteRate; int16_t BlockAlign; int16_t BitsPerSample; char Subchunk2ID[4]; int32_t Subchunk2Size; }; struct pcm_snd { int16_t channel_left; int16_t channel_right; }; 这是创建WAV文件的实际function: int create_wav_file(FILE* file, […]

C中的矢量化Trigfunction?

我正在寻找计算高度并行化的trig函数(在1024的块中),并且我想利用至少一些现代架构所具有的并行性。 当我编译一个块 for(int i=0; i<SIZE; i++) { arr[i]=sin((float)i/1024); } 海湾合作委员会不会对其进行矢量化,并表示 not vectorized: relevant stmt not supported: D.3068_39 = __builtin_sinf (D.3069_38); 这对我来说很有意义。 但是,我想知道是否有一个库可以进行并行三角计算。 只有一个简单的泰勒系列上升到11阶,GCC将矢量化所有循环,并且我的速度超过了一个天真的sin循环的速度的两倍(具有精确的答案,或者具有9阶系列,只有一个位)关闭1600个值的最后两个,加速> 3倍)。 我确定有人之前遇到过这样的问题,但是当我谷歌时,我发现没有提到任何库等。 A.是否已存在某些内容? B.如果没有,建议优化并行触发function? 编辑:我发现了以下库名为“SLEEF”: http ://shibatch.sourceforge.net/,在本文中描述并使用SIMD指令计算几个基本function。 它使用SSE和AVX特定代码,但我认为将其转换为标准C循环并不困难。

计算函数sin()

对于我的学习,我必须使用此函数编写一个算法来计算sin() : 但是,在我的算法中,我必须将X的值保持在0和Pi / 2之间。 所以,我编写了算法但所有结果都是错误的。 这是我的代码: double sinX(double x){ double resultat = 0; int i; if(x M_PI_2) x = fmod(x,M_PI_2); for(i = 1;i<=30;i++){ resultat += -1 * ((x*x)/(2*i*(2*i+1)))*(pow(-1,i-1))*((pow(x,2*i-1))/(factorielle(2*i-1))); } return resultat; } 我找不到原因。 你能帮助我吗? 这里是X的几个值和fmod的结果 1 / 1 2 / 0.429204 3 / 1.4292 4 / 0.858407 5 / 0.287611 6 / 1.28761 7 […]