Sách / tài nguyên để thực hiện các chức năng toán học khác nhau trong số học điểm cố định cho mục đích DSP


8

Tôi đang tìm kiếm các cuốn sách hoặc tài nguyên bao gồm các chi tiết sau đây:

  • thực hiện các hàm toán học (ví dụ: logarit, hàm mũ, sin, cosin, nghịch đảo) trong số học điểm cố định cho mục đích DSP.

  • các kỹ thuật như sử dụng bảng tra cứu, sê-ri Taylor, v.v.

Tôi khá quen thuộc với lập trình C và quan tâm nhiều hơn đến các thuật toán về cách thực hiện các hàm toán học khác nhau một cách hiệu quả.


1
Đây chỉ là một mẹo, nhưng nó rất hữu ích. Đó là về tính toán hàm atan2, tức là tính toán đối số của số phức từ các phần thực và phần ảo của nó.
Matt L.

1
tôi có thể cung cấp cho bạn một số chuỗi năng lượng hữu hạn được tối ưu hóa mà tôi đã phát triển hơn một thập kỷ trước. ngoài khách hàng ban đầu, tôi chưa nhận được tiền cho nó vì vậy tôi nghĩ tôi cũng có thể biến nó thành miền công cộng. ban đầu nó được phát triển cho điểm nổi trong bối cảnh khách hàng không thể bao gồm stdlib trong bản dựng. và đánh giá là không hoàn hảo. tức là có lỗi, nhưng rất nhỏ và được tối ưu hóa cho chức năng cụ thể được đánh giá. Để tôi tìm tập tin đó, tôi sẽ kéo các hệ số ra và đăng loạt bài.
robert bristow-johnson

@ robertbristow-johnson tôi mong được sử dụng bộ truyện và xem nó diễn ra như thế nào! cảm ơn!
RuD

Ruchir, tôi đã đăng loạt bài dưới đây. có những điều thông thường bạn cần làm để mở rộng phạm vi. giống
2x=2k×2xk
nếu kxk+1. điều tương tự cholog2()và các sinusoids định kỳ. đối với exp và log, điều này sẽ yêu cầu dịch chuyển bit số học của những gì đi ra (đối với exp) hoặc những gì đi vào (đối với log). Tôi nghĩ rằng bạn có thể bỏ qua đó. và, tất nhiên, cho exp và log của các cơ sở khác nhau (nhưe), bạn chỉ cần chia tỷ lệ với hằng số thích hợp những gì đi vào 2x và những gì đi ra log2(x).
robert bristow-johnson

Câu trả lời:


9

dạng đa thức chung là:

f(u)=n=0N an un=a0+(a1+(a2+(a3+...(aN2+(aN1+aNu)u)u ...)u)u)u

hình thức thứ hai đang sử dụng phương pháp của Horner , rất được khuyến khích, đặc biệt nếu bạn thực hiện điều này ở điểm nổi chính xác đơn.

sau đó cho một vài chức năng cụ thể:

căn bậc hai:

f(x1)x1x2N=4a0=1.0a1=0.49959804148061a2=0.12047308243453a3=0.04585425015501a4=0.01076564682800

nếu 2x4, sử dụng ở trên để đánh giá x2 và nhân kết quả đó với 2 để có được x. như vớilog2(x), áp dụng sức mạnh của 2 chia tỷ lệ để mở rộng đối số đến phạm vi cần thiết.

logarit cơ sở 2:

xf(x1)log2(x)1x2N=5a0=1.44254494359510a1=0.7181452567504a2=0.45754919692582a3=0.27790534462866a4=0.121797910687826a5=0.02584144982967

cơ sở 2 theo cấp số nhân:

f(x)2x0x1N=4a0=1.0a1=0.69303212081966a2=0.24137976293709a3=0.05203236900844a4=0.01355574723481

sin:

xf(x2)sin(π2x)1x1N=4a0=1.57079632679490a1=0.64596406188166a2=0.07969158490912a3=0.00467687997706a4=0.00015303015470

cosine (sử dụng sin):

cos(πx)=12sin2(π2x)

tiếp tuyến:

tan(x)=sin(x)cos(x)

tiếp tuyến nghịch đảo:

xf(x2)arctan(x)1x1N=4a0=1.0a1=0.33288950512027a2=0.08467922817644a3=0.03252232640125a4=0.00749305860992

arctan(x)=π2arctan(1x)1x

arctan(x)=π2arctan(1x)x1

nghịch đảo sin:

arcsin(x)=arctan(x1x2)

cosin nghịch đảo:

arccos(x)=π2arcsin(x)=π2arctan(x1x2)

Điều đó có vẻ khá hữu ích! Cảm ơn bạn rất nhiều vì đã chia sẻ điều đó. Nhưng mục tài liệu tham khảo vẫn đầu tiên trong man soxlà tốt nhất;)
jojek

dunno sox. hướng dẫn nói gì về nó?
robert bristow-johnson

2
Đơn giản [1] R. Bristow-Johnson, Cookbook formulae for audio EQ biquad filter coefficients, http://musicdsp.org/files/Audio-EQ-Cookbook.txt:)
jojek

BTW, sê-ri giảm thiểu lỗi trọng số tối đa . lỗi được tính theo cách có ý nghĩa đối với hàm. lỗi tối đa thống nhất cholog2(). sai số tối đa tỷ lệ chox2x. một cái gì đó tương tự như tỷ lệ chosin() phải làm với hệ số tính toán cho các bộ lọc cộng hưởng sao cho sai số tối đa là log(f0)được giảm thiểu. tôi không thể nhớ tôi đã sử dụng tiêu chí nàoarctan(). và vì một số lý do tôi không thể tìm thấy tệp của mình cho tôi biết các lỗi tối đa là gì, với phạm vix. ai đó với MATLAB có thể tìm ra.
robert bristow-johnson

1
bạn nên vẽ lỗi với python của bạn, nếu bạn có thể. cũng np.max(np.abs(sqrt_1px(xp)-np.sqrt(1+xp)))có thể thay thế np.max(np.abs((sqrt_1px(xp)-np.sqrt(1+xp))/np.sqrt(1+xp))) và tương tự đối 2**x với trọng số lỗi cho tội lỗi là khác nhau và tôi sẽ phải tìm cách tôi đã làm điều đó. Tôi có các tập lệnh MATLAB cũ đã từng hoạt động trong Octave, nhưng bây giờ tôi thậm chí không thể lấy Octave để vẽ trên máy tính xách tay G4 Mac cũ của mình.
robert bristow-johnson

2

Mặc dù không cụ thể về điểm cố định, tôi rất muốn giới thiệu cuốn sách "Bộ công cụ toán học cho lập trình thời gian thực" của Jack Crenshaw. Nó đi kèm với một đĩa CD với mã nguồn.


2

TI có thư viện IQMath cho tất cả các bộ vi điều khiển điểm cố định của họ. Tôi đã tìm thấy chúng là một mỏ vàng của các hàm toán học và DSP điểm cố định không nhất thiết giới hạn ở các chip TI.

MSP430 C28X


Tôi quan tâm nhiều hơn đến các thuật toán thay vì chỉ thực hiện các chức năng
RuD 16/2/2015

1

Phép tính gần đúng Ch Quashev có thể giúp tính các hệ số đa thức gần với tối ưu để xấp xỉ một hàm trong một phạm vi hữu hạn. Bạn chạy thói quen gần đúng trên PC để đạt được một hệ số đa thức cụ thể, sau đó bạn có thể áp dụng trên bất kỳ nền tảng nào bạn thích (ví dụ: nhúng / DSP) Bản in đẹp ít nhiều như sau:

  • Điều này chỉ hoạt động cho các chức năng của một biến; nếu bạn có một số chức năngz=f(x,y) sau đó, xấp xỉ Ch Quashev sẽ không giúp bạn.
  • Hàm bạn gần đúng sẽ là "giống như đa thức". Các góc, uốn cong sắc nét và nhiều khúc cua sẽ yêu cầu các đa thức bậc cao hơn để đạt được một mức độ chính xác nhất định.
  • Giữ thứ tự đa thức ở mức thấp là rất quan trọng - trên 5 hoặc hơn, bạn có thể bắt đầu thấy các lỗi số.
  • Phép tính gần đúng của Ch Quashev sử dụng các đa thức Ch Quashev được đánh giá qua miền [-1,1], vì vậy nếu phạm vi đầu vào cho hàm của bạn khác nhau đáng kể, bạn có thể cần phải chia tỷ lệ / bù đầu vào một cách thích hợp trước khi xác định hệ số và trước khi áp dụng chúng. Ví dụ: nếu tôi quan tâm đến một chức năng trong phạm vi đầu vàox[0,20] sau đó tôi có thể định nghĩa u=(x×0.1)1 vậy nên u trong phạm vi từ -1 đến +1 và tôi có thể đánh giá một đa thức trong uđể tính kết quả yêu cầu. Nếu không có tỷ lệ này, bạn có thể gặp các lỗi số dễ dàng hơn - hoặc đã nêu một cách khác, với cùng độ chính xác, bạn có thể cần độ dài bit cao hơn để tính các giá trị trung gian và điều này thường không mong muốn.

Jason, tôi đã không sử dụng đa thức Tchithershev, nhưng tôi đã sử dụng một lỗi MinMax có trọng số (đôi khi được gọi là "Lđịnh mức "về lỗi), theo tôi, giống như xấp xỉ Tchithershev. phương pháp tôi sử dụng là Thuật toán trao đổi Remez.
robert bristow-johnson

Remez là cấp trên (mặc dù phức tạp hơn) so với Ch Quashev. Ch Quashev chỉ xấp xỉ điều kiện minimax, nhưng thường thì nó đủ tốt.
Jason S
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.