Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - tha

Pages: [1] 2 3 ... 302
1
ARM Processors / Re: STM32F1 CMSIS DSP Filtering Functions
« on: July 30, 2021, 08:06:19 am »


Scaling and Overflow Behavior:

fast version นี้ใช้ a 32-bit accumulator ที่มี 2.30 format. The accumulator รักษา full precision ของ the intermediate multiplication results แต่จัดให้มีเฉพาะ a single guard bit. ดังนั้น, ถ้า the accumulator result โอเวอร์โฟวส์มันจะพันรอบและบิดเบือน the result. เพื่อหลีกเลี่ยง overflows อย่างสมบูรณ์ the input signal ต้องถูกลดขนาดลงสอง bits และอยู่ในย่าน [-0.25 +0.25). The 2.30 accumulator จากนั้นถูกเลื่อนไป postShift bits และ the result ถูกตัดเป็น 1.15 format โดยการทิ้ง the low 16 bits.             

อ้างอิงถึง the function arm_biquad_cascade_df1_q15() สำหรับ a slower implementation ของฟังชั่นนี้ซึ่งใช้ 64-bit accumulation เพื่อหลีกเลี่ยง wrap around distortion. ทั้ง the slow and the fast versions ใช้ the same instance structure. ใช้ the function arm_biquad_cascade_df1_init_q15() เพื่อเริ่มต้น the filter structure.

References __PKHBT, __SIMD32, __SMLAD(), __SMUAD(), __SMUADX(), arm_biquad_casd_df1_inst_q15::numStages, arm_biquad_casd_df1_inst_q15::pCoeffs, arm_biquad_casd_df1_inst_q15::postShift, and arm_biquad_casd_df1_inst_q15::pState.

2
ARM Processors / Re: STM32F1 CMSIS DSP Filtering Functions
« on: July 30, 2021, 07:53:39 am »

3
ARM Processors / Re: STM32F1 CMSIS DSP Filtering Functions
« on: July 29, 2021, 10:23:33 am »
Fixed-Point Behavior

ต้องใช้ความระมัดระวังเมื่อใช้ the Q15 and Q31 versions ของ the Biquad Cascade filter functions. ประเด็นต่อไปนี้ต้องถูกพิจารณา :

     •    Scaling of coefficients
     •    Filter gain
     •    Overflow and saturation

Scaling of coefficients: Filter coefficients ถูกแสดงเป็น fractional values และ coefficients ถูกจำกัดอยู่ในย่าน [-1 +1). The fixed-point functions มี an additional scaling parameter postShift ซึ่งยอมให้ the filter coefficients เกินย่าน [+1 -1). ที่ the output ของ the filter's accumulator เป็น a shift register ซึ่งเลื่อนผลลัพธ์ไป postShift bits.

             

สิ่งนี้จะปรับขนาดอย่างเป็นหลัก the filter coefficients โดย 2^postShift. ตัวอย่างเช่น, การหา the coefficients

 {1.5, -0.8, 1.2, 1.6, -0.9}

เซ็ต the pCoeffs array เป็น:

   {0.75, -0.4, 0.6, 0.8, -0.45}

และเซ็ต postShift=1

Filter gain: The frequency response ของ a Biquad filter คือ a function ของ coefficients ของมัน. มันเป็นไปได้สำหรับ the gain ที่ผ่าน the filter เกิน 1.0 หมายความว่า the filter จะเพิ่ม the amplitude ของ certain frequencies. นี้หมายความว่า an input signal ที่มี amplitude < 1.0 อาจให้ผลใน an output > 1.0 และเหล่านี้ถูกทำให้อิ่มตัวหรือโอเวอร์โฟวส์ตามการจัดให้ของ the filter. เพื่อหลีกเลี่ยง behavior นี้ the filter ต้องการถูกปรับขนาดลงเพื่อว่า peak gain ของมัน < 1.0 หรือ the input signal ต้องถูกปรับขนาดลงเพื่อว่าการรวมของ input and filter ไม่โอเวอร์โฟวส์

Overflow and saturation: สำหรับ Q15 and Q31 versions, จะถูกอธิบายแยกต่างหากเป็นส่วนหนึ่งของ the function specific documentation ข้างล่าง

4
ARM Processors / Re: STM32F1 CMSIS DSP Filtering Functions
« on: July 29, 2021, 08:47:21 am »
Instance Structure

The coefficients และ state variables สำหรับ a filter ถูกเก็บเข้าด้วยกันใน an instance data structure. A separate instance structure ต้องถูกกำหนดสำหรับแต่ละ filter. Coefficient arrays อาจถูกแชร์ในหมู่ instances ทั้งหลายในขณะที่ state variable arrays ไม่สามารถถูกแชร์. มี separate instance structure declarations สำหรับแต่ละของ the 3 supported data types.

Init Functions

มี an associated initialization function สำหรับแต่ละ data type อีกด้วย. The initialization function ดำเนินการทำงานต่อไปนี้ :

•   เซ็ตค่าของ the internal structure fields.
•   ทำให้เป็นศูนย์ค่าใน the state buffer. เพื่อทำนี้แบบ manual โดยไม่มีการเรียก the init function, กำหนดฟิลด์ย่อยต่อไปนี้ของ the
     instance structure: numTaps, pCoeffs, pState. เซ็ตทั้งหมดของค่าใน pState เป็นศูนย์อีกด้วย.

การใช้ของ the initialization function เป็นทางเลือก. อย่างไรก็ตาม, ถ้า the initialization function ถูกใช้, ดังนั้น the instance structure ไม่สามารถถูกวางลงใน a const data section. เพื่อวาง an instance structure ลงใน a const data section, the instance structure ต้องถูกเริ่มต้นแบบ manual. เซ็ตค่าใน the state buffer เป็นศูนย์ก่อน static initialization. The code ข้างล่างเริ่มต้นแบบคงที่แต่ละของ the 3 different data type filter instance structures

    arm_biquad_casd_df1_inst_f32 S1 = {numStages, pState, pCoeffs};
    arm_biquad_casd_df1_inst_q15 S2 = {numStages, pState, pCoeffs, postShift};
    arm_biquad_casd_df1_inst_q31 S3 = {numStages, pState, pCoeffs, postShift};

โดยที่ numTaps คือจำนวนของ Biquad stages ใน the filter; pState คือ the address ของ the state buffer; pCoeffs คือ the address ของ the coefficient buffer. postShift shift ที่ถูกใช้.

5
ARM Processors / Re: STM32F1 CMSIS DSP Filtering Functions
« on: July 29, 2021, 07:50:00 am »
file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/group__BiquadCascadeDF1.html




Description

ชุดของฟังก์ชันนี้จัดให้มีใช้ arbitrary order recursive (IIR) filters. The filters ถูกจัดให้มีใช้อย่างการต่อเป็นหลั่นๆของ second order Biquad sections. The functions รองรับ Q15, Q31 and floating-point data types. Fast version ของ Q15 and Q31 รองรับอีกด้วยบน CortexM4 and Cortex-M3.

The functions ทำงานบน blocks of input and output data และแต่ละการเรียกไปยัง the function จะประมวลผล blockSize samples ผ่าน the filter. pSrc ชี้ไปยัง the array of input data และ pDst ชี้ไปยัง the array of output data. ทั้งสอง arrays บรรจุ blockSize values.

Algorithm

แต่ละ Biquad stage จัดให้มีใช้ a second order filter โดยใช้ the difference equation:

    y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2]

A Direct Form I algorithm ถูกใช้ด้วย 5 coefficients และ 4 state variables ต่อ stage.

         

Coefficients b0, b1 and b2 คูณกับ the input signal x[n] และถูกเรียกว่า the feedforward coefficients. Coefficients a1 and a2 คูณกับ the output signal y[n] และถูกเรียกว่า the feedback coefficients. ให้ความสนใจอย่างระมัดระวังกับเครื่องหมายของ the feedback coefficients. บาง design tools ใช้ the difference equation

      y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] - a1 * y[n-1] - a2 * y[n-2]

ในกรณีนี้ the feedback coefficients a1 and a2 ต้องถูกลบล้างเมื่อถูกใช้กับ the CMSIS DSP Library.

Higher order filters ถูกรับรู้เป็นการต่อเป็นหลั่นๆของ second order sections. numStages อ้างอิงถึง the number of second order stages ที่ใช้. ตัวอย่างเช่น, an 8th order filter จะถูกรับรู้ด้วย numStages=4 second order stages.



A 9th order filter จะถูกรับรู้ด้วย numStages=5 second order stages ที่มี the coefficients สำหรับอันหนึ่งของ the stages ถูกกำหนดค่าเป็น a first order filter (b2=0 and a2=0).

The pState ชี้ไปยัง state variables array. แต่ละ Biquad stage มี 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. The state variables ถูกจัดเรียงใน the pState array เป็น :

      {x[n-1], x[n-2], y[n-1], y[n-2]}

The 4 state variables สำหรับ stage 1 เป็นอันดับแรก, จากนั้น the 4 state variables สำหรับ stage 2, และต่อไป. The state array มีความยาวรวม 4*numStages values. The state variables ถูกอัฟเดตหลังจากแต่ละ block of data ถูกประมวลผล, the coefficients ไม่ถูกแตะต้อง.

6
-

7
ARM Processors / Re: STM32F1 CMSIS DSP Filtering Functions
« on: July 27, 2021, 08:07:22 am »


Scaling and Overflow Behavior:

The function ถูกจัดให้มีใช้โดยใช้ a 64-bit internal accumulator. ทั้ง coefficients and state variables ถูกแสดงใน 1.7 format และการคูณให้ผล a 2.14 result. The 2.14 intermediate results ถูกสะสมใน a 32-bit accumulator ใน 18.14 format. ไม่มีความเสี่ยงของ internal overflow ด้วยความเข้าใกล้นี้และ the full precision of intermediate multiplications ถูกรักษา. The accumulator ถูกแปลงเป็น 18.7 format โดยการทิ้ง the low 7 bits. สุดท้าย, the result ถูกตัดเป็น 1.7 format.

References blockSize, arm_fir_instance_q7::numTaps, arm_fir_instance_q7::pCoeffs, and arm_fir_instance_q7::pState.

8
ARM Processors / Re: STM32F1 CMSIS DSP Filtering Functions
« on: July 27, 2021, 08:00:22 am »


Scaling and Overflow Behavior:

The function ถูกจัดให้มีใช้โดยใช้ an internal 64-bit accumulator. The accumulator มี a 2.62 format และรักษา full precision of the intermediate multiplication results แต่จัดให้มีเฉพาะ a single guard bit. ดังนั้น, ถ้า the accumulator result โอเวอร์โฟวส์มันจะพันรอบมากกว่าการตัด. เพื่อหลีกเลี่ยง overflows อย่างสมบูรณ์ the input signal ต้องถูกลดขนาดลง log2(numTaps) bits. หลังจากทุก multiply-accumulates ถูกดำเนินการ, the 2.62 accumulator ถูกเลื่อนไปทางขวา 31 bits และถูกทำให้อิ่มตัวเป็น 1.31 format เพื่อให้ผล the final result.

Refer to the function arm_fir_fast_q31() for a faster but less precise implementation of this filter for Cortex-M3 and Cortex-M4.

References blockSize, arm_fir_instance_q31::numTaps, arm_fir_instance_q31::pCoeffs, and arm_fir_instance_q31::pState.

Pages: [1] 2 3 ... 302