iOS vDSP中的单矢量归一化、极坐标转换和单矢量转换为分贝等值


注:

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]);



祝您生活愉快!










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VDSP(Vector Digital Signal Processing,向量数字信号处理)是一种用于高效处理数字信号的技术。它使用向量指令和并行处理的方式,能够同时处理多个数据元素,提高信号处理的速度和效率。 理解VDSP的情况可以从以下几个方面: 1. 并行处理能力:VDSP利用向量指令集和SIMD(Single Instruction, Multiple Data)技术,可以同时处理多个数据元素。这意味着它可以在个指令的执行对多个数据进行操作,从而提高信号处理的效率。 2. 数据对齐要求:VDSP通常要求数据在内存按照特定的对齐方式存储。这是因为向量指令需要访问连续的内存地址来读取数据,如果数据没有按照对齐要求存储,可能会导致性能下降。 3. 应用领域:VDSP广泛应用于数字信号处理领域,包括音频处理、图像处理、视频编解码等。通过利用并行处理能力,VDSP可以加速这些领域的算法和操作,提高实时性能和响应速度。 4. 硬件支持:VDSP通常需要硬件支持,例如特定的处理器或DSP芯片。这些硬件提供了向量指令集和并行处理元,使得VDSP能够发挥其优势。 总之,VDSP是一种利用向量指令和并行处理的技术,用于高效处理数字信号。它在提高信号处理速度和效率方面具有重要作用,并广泛应用于音频、图像、视频等领域。理解VDSP的情况可以帮助我们选择合适的技术和工具来进行信号处理任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u014068781

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值