注:
typedef unsigned long vDSP_Length;
typedef long vDSP_Stride;
单矢量归一化1 vDSP_normalize方法
extern void vDSP_normalize(
const float *__A,
vDSP_Stride __IA,
float * __nullable __C,
vDSP_Stride __IC,
float *__Mean,
float *__StandardDeviation,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
方法的核心算法:
// Calculate mean and standard deviation.
m = sum(A[n], 0 <= n < N) / N;
d = sqrt(sum(A[n]**2, 0 <= n < N) / N - m**2);
if (C)
{
// Normalize.
for (n = 0; n < N; ++n)
C[n] = (A[n] - m) / d;
}
单矢量归一化2 vDSP_normalizeD方法
extern void vDSP_normalizeD(
const double *__A,
vDSP_Stride __IA,
double * __nullable __C,
vDSP_Stride __IC,
double *__Mean,
double *__StandardDeviation,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
方法的核心算法:
// Calculate mean and standard deviation.
m = sum(A[n], 0 <= n < N) / N;
d = sqrt(sum(A[n]**2, 0 <= n < N) / N - m**2);
if (C)
{
// Normalize.
for (n = 0; n < N; ++n)
C[n] = (A[n] - m) / d;
}
单矢量极坐标转换1 vDSP_polar方法
extern void vDSP_polar(
const float *__A,
vDSP_Stride __IA,
float *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
方法的核心算法:
for (n = 0; n < N; ++n)
{
x = A[n*IA+0];
y = A[n*IA+1];
C[n*IC+0] = sqrt(x**2 + y**2);
C[n*IC+1] = atan2(y, x);
}
单矢量极坐标转换2 vDSP_polarD方法
extern void vDSP_polarD(
const double *__A,
vDSP_Stride __IA,
double *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
方法的核心算法:
for (n = 0; n < N; ++n)
{
x = A[n*IA+0];
y = A[n*IA+1];
C[n*IC+0] = sqrt(x**2 + y**2);
C[n*IC+1] = atan2(y, x);
}
单矢量极坐标转换3 vDSP_rect方法
extern void vDSP_rect(
const float *__A,
vDSP_Stride __IA,
float *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
方法的核心算法:
for (n = 0; n < N; ++n)
{
r = A[n*IA+0];
theta = A[n*IA+1];
C[n*IC+0] = r * cos(theta);
C[n*IC+1] = r * sin(theta);
}
单矢量极坐标转换4 vDSP_rectD方法
extern void vDSP_rectD(
const double *__A,
vDSP_Stride __IA,
double *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
方法的核心算法:
for (n = 0; n < N; ++n)
{
r = A[n*IA+0];
theta = A[n*IA+1];
C[n*IC+0] = r * cos(theta);
C[n*IC+1] = r * sin(theta);
}
单矢量转换为分贝等值1 vDSP_vdbcon方法
extern void vDSP_vdbcon(
const float *__A,
vDSP_Stride __IA,
const float *__B,
float *__C,
vDSP_Stride __IC,
vDSP_Length __N,
unsigned int __F)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
方法的核心算法:
If Flag is 1:
alpha = 20;
If Flag is 0:
alpha = 10;
for (n = 0; n < N; ++n)
C[n] = alpha * log10(A[n] / B[0]);
注:分贝(decibel)是量度两个相同单位之数量比例的单位,主要用于度量声音强度,常用dB表示。“分”(deci-)指十分之一,个位是“贝”(bel),一般只采用分贝。分贝是以美国发明家亚历山大·格雷厄姆·贝尔的名字命名的。
单矢量转换为分贝等值2 vDSP_vdbconD方法
extern void vDSP_vdbconD(
const double *__A,
vDSP_Stride __IA,
const double *__B,
double *__C,
vDSP_Stride __IC,
vDSP_Length __N,
unsigned int __F)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
方法的核心算法:
If Flag is 1:
alpha = 20;
If Flag is 0:
alpha = 10;
for (n = 0; n < N; ++n)
C[n] = alpha * log10(A[n] / B[0]);
祝您生活愉快!