Trích xuất dữ liệu thẻ từ nhị phân từ WAV thô


23

Tôi phải đối mặt với một thách thức khó khăn: Để trích xuất dữ liệu nhị phân từ đầu đọc thẻ từ của iPhone . Đây là những gì từ tính trên thẻ trông như sau:

nhập mô tả hình ảnh ở đây
Nguồn

Đây là .WAV iPhone nhận được khi bạn quẹt thẻ (đừng hy vọng quá nhiều, đó là thẻ khách hàng thân thiết;)). Đó là ba lần vuốt, với tốc độ khác nhau. Đây là kết xuất SInt16 thô cho thao tác vuốt tôi đang sử dụng.

Ai đó dường như đã thực hiện nó ở đây nhưng dữ liệu thực tế tôi thu được không đặc biệt dễ xử lý.

Việc đọc bắt đầu (và kết thúc) với số lượng "số không" không xác định - lưu ý rằng sóng chỉ lặp lại sau khi 2 ZEROS được thu thập, điều này thể hiện NS theo sau là SN:

nhập mô tả hình ảnh ở đây

.

Điều này sẽ cho phép một thuật toán xác định dấu tích đồng hồ.

Từ trường đảo ngược trên mỗi tích tắc đồng hồ. Ngoài ra đối với nhị phân 1, từ trường đảo ngược chính xác ở giữa tích tắc:

nhập mô tả hình ảnh ở đây

Chuỗi luôn bắt đầu bằng một lệnh bắt đầu 1101 + 0 (bit chẵn lẻ). Bạn có thể chọn ra điều này trong cả ba bài đọc trong biểu đồ trên. Nó được chỉ ra rõ ràng hơn trong bài viết cosmodro tôi liên kết ở đầu câu hỏi.

Dưới đây là một ví dụ về sự xuống cấp từ tính (được thực hiện thêm trong phần đọc thẻ dưới): nhập mô tả hình ảnh ở đây

Tôi đang cố gắng tìm ra một cách hợp lý để chuyển đổi dạng sóng này thành chuỗi nhị phân tương ứng của nó.

Tôi đã tìm thấy một bản PDF đi sâu vào một số chi tiết, nhưng tôi không thể tìm ra thuật toán họ đang sử dụng.

PDF này chứa một hình ảnh thú vị: nhập mô tả hình ảnh ở đây

Nếu tôi có thể trích xuất các đường màu đỏ và màu xanh theo sơ đồ này, tôi có thể sử dụng một trong số chúng để trích xuất dữ liệu, nhưng tôi không thể tìm ra logic đằng sau cấu trúc.

Vì vậy, đây là câu hỏi của tôi: Làm thế nào để tôi trích xuất chuỗi nhị phân?

Tái bút Lưu ý rằng tốc độ vuốt sẽ không đổi. Vì vậy, một khi đồng hồ đã được xác định, cần phải liên tục điều chỉnh từ một đánh dấu sang tiếp theo.

PPS. Autocorrelation sẽ bắt cặp bọ ve? (xem như bọ ve sẽ thay thế NS SN ...)


EDIT (12 tháng 6): Tôi cần rất nhiều sự giúp đỡ về vấn đề này, nhưng cuối cùng tôi đã hoàn thành một trình đọc vững chắc ( http://www.magstripedecoder.com/ ). Cảm ơn mọi người đã giúp đỡ! Tôi khuyên bạn nên #musicdsp trên kênh efnet của IRC cho bất kỳ ai đủ tâm huyết để thực hiện thử thách nắm bắt toán học - thực sự rất khó!


Bạn có thể gửi tập tin wav thực tế?
endolith

1
Làm xong! 9876543210
P i

Hừm. Dạng sóng của bạn không giống như tất cả các ví dụ khác mà tôi có thể tìm thấy. 2.bp.blogspot.com/_QF4k-mng6_A/TOzDBOzIB3I/AAAAAAAAAbM/... monografias.com/trabajos43/banda-magnetica/Image4228.gif embeddedsoftwareengineering.com/img/mag-flux.gif
endolith

Cảm ơn bạn rất nhiều Yoda đã chỉnh sửa và dọn dẹp câu hỏi.
P i

Bạn đề cập đến ba thẻ trong câu hỏi của bạn. Thẻ WAV nào bạn đính kèm?
Jason R

Câu trả lời:


10

Đây được gọi là mã đánh dấu biphase và bạn phải tập trung vào các điểm giao nhau bằng 0 thay vì biên độ xung. Tuy nhiên, bạn có nhiều điểm giao nhau bằng 0 cho mỗi xung do các bộ lọc cắt thấp vốn có của đầu thu và đầu vào mic của điện thoại. Bạn thả xa hơn thế này giữa các lần chuyển tiếp và chéo không:

nhập mô tả hình ảnh ở đây

Bạn có thể khôi phục hình dạng lung linh hơn bằng cách sử dụng bộ lọc tăng cường thấp:

nhập mô tả hình ảnh ở đây

và sau đó đo độ dài xung bằng khoảng thời gian họ sử dụng trên ngưỡng nào đó. Có lẽ một ý tưởng tốt hơn là phân biệt đầu vào để thực hiện các chuyển đổi thành các gai lớn, lấy giá trị tuyệt đối và phát hiện chúng khi chúng vượt quá ngưỡng nào đó:

nhập mô tả hình ảnh ở đây

Sau đó đo thời gian giữa các xung và khi thời gian giữa hai xung gần bằng hai xung cuối cùng thì đó là 0, khi đó là khoảng một nửa so với giữa hai xung cuối, đó là 1.

Sự xuống cấp từ tính mà bạn nói đến phải dễ dàng loại bỏ bằng bộ lọc thông thấp.


Cảm ơn! Tôi đã tìm thấy một số tương quan rất thú vị làm việc với đạo hàm thứ hai mà tôi sẽ đăng trong khóa học do. Bạn có thể giải thích về bộ lọc tăng cường thấp không? Tôi không biết làm thế nào tôi sẽ thực hiện điều này ...
P i

@endolith Bạn có thể vui lòng thêm các thẻ tốt hơn cho câu hỏi không? Tôi đã gắn thẻ mã hóa vi sai , dựa trên câu trả lời của bạn, nhưng bạn biết chủ đề này tốt hơn.
Lorem Ipsum

@yoda: Haha không tôi không có. Tôi mới tìm hiểu về nó vài giờ trước để viết câu trả lời này.
endolith

@endolith Tôi mới bắt gặp điều này - điều này thật tuyệt - tuy nhiên bạn có thể giải thích về 'bộ lọc tăng cường thấp' này không? Có vẻ rất thú vị và google không giúp được gì nhiều ...
Spacey

@Mohammad: Chỉ là bộ lọc giúp tăng tần số thấp trong khi vẫn giữ mức cao không thay đổi. Tôi nghĩ rằng tôi đã sử dụng bộ cân bằng đồ họa trong Adobe Audition. Hãy thử bộ lọc giá đỡ crca.ucsd.edu/~msp/techniques/latest/book-html/node142.html
endolith

4

Đây là một thử thách lớn. Tôi đã thử ít nhất bốn phương pháp trước khi bẻ khóa nó. Đây là cách tôi đã làm nó:

nhập mô tả hình ảnh ở đây

Tôi bắt đầu bằng cách làm mịn dữ liệu ( lần đọc đầu tiên ) bằng một ...

x_new = 0.9 * x_prev + 0.1 * x_in

... Bộ lọc IIR. Tôi làm điều này theo cả hai hướng ( đọc thứ hai ). Điều này được loại bỏ tất cả các nhiễu mờ, tuy nhiên nó tạo ra sự không liên tục quay trở lại với sự báo thù trong các dẫn xuất.

Sau đó tôi nhận được tất cả các công cụ phái sinh lên đến lần thứ tư ( lần đọc thứ ba và thứ tư đại diện cho công cụ phái sinh thứ ba và thứ tư) và tạo ra một chức năng mới:

g(x) = f'''(x)^2 + k*f''''(x)^2

Tại sao? bởi vì tôi nhận thấy rằng vào thời điểm chúng ta có được đạo hàm thứ ba, những gì chúng ta có thực sự là một hình sin bên trong một phong bì:

nhập mô tả hình ảnh ở đây

... và mọi người đều biết từ thời trung học rằng:

sin^2 + cos^2=1 

nhập mô tả hình ảnh ở đây

tội lỗicos phân biệt với nhau:

nhập mô tả hình ảnh ở đây

Do đó, phong bì ngụ ý có thể được phục hồi.

Tại sao dẫn xuất 3 và 4? về cơ bản mỗi đạo hàm cao hơn làm sạch tín hiệu. Đó là hình sin vẫn là hình sin (chỉ chuyển pha 90 ° nên sin-> cos, v.v.) trong khi đó không biến mất.

Tôi muốn sử dụng 11 & 12 hoặc một cái gì đó điên rồ, nhưng các công cụ phái sinh sụp đổ khá nhanh, 4 là mức cao nhất tôi có thể nhận được trước khi mọi thứ trở nên rắc rối, ngay cả khi các dòng phái sinh nhỏ mà bạn nhìn thấy trong hình được làm mịn rất nhiều.

Điều này tạo ra một vết sưng nhỏ tuyệt vời trên mỗi lần chuyển đổi thông lượng ( lần đọc thứ năm ).

Tiếp theo tôi đi qua các bước ngoặt, từ chối những người siêng năng ( đọc lần thứ sáu ) ..

Cuối cùng tôi đi qua cực đại ( lần đọc thứ bảy ), đánh giá xem mỗi lần bỏ qua là một nửa bước hay toàn bộ bước, và sau đó xây dựng lại nhị phân.

Yay!

EDIT: Bây giờ là vài tháng kể từ khi tôi hoàn thành dự án này. thách thức khó khăn nhất là xây dựng một số biến đổi để cô lập các chuyển đổi từ thông; về mặt kỹ thuật, 'lấy đường bao biên độ'. điều này được thực hiện bằng cách xây dựng tín hiệu dịch pha π / 2 từ gốc (đây còn được gọi là tín hiệu cầu phương). thì E (t) ^ 2 = S (t) ^ 2 + Q (S (t)) ^ 2.

Để có được tín hiệu cầu phương, tôi chỉ cần thực hiện một FFT và xoay mỗi thùng một phần tư lượt, sau đó kết hợp lại các thành phần phổ đã sửa đổi.

Có rất nhiều thuật ngữ lạm dụng khó hiểu trong lĩnh vực này; từ khóa là 'tín hiệu phân tích', 'biến đổi Hilbert' ... Tôi đã tránh sử dụng những từ khóa đó vì các ngành khác nhau gán nghĩa khác nhau cho chúng.

Có một cách thông minh hơn để đạt được đường bao biên độ này bằng các bộ lọc kỹ thuật số, do đó tránh được biến đổi Fourier. Điều này cho phép thuật toán chạy trên các vi điều khiển có công suất rất thấp.

Quá trình này tạo ra một dạng sóng nên có một vết sưng duy nhất trên mỗi lần chuyển đổi thông lượng.

Giải mã dạng sóng này thành một chuỗi nhị phân vẫn là một nhiệm vụ không cần thiết. sự phức tạp và thành phần này là thuật toán chứ không phải toán học; khó khăn là tương đương.

Tất cả trong tất cả điều này là một vấn đề cực kỳ khó khăn. Tôi đã mất phần tốt nhất trong ba tháng để đạt được thuật toán hiệu suất của họ. Tôi sẽ hoàn thành tài liệu về cách tiếp cận của mình và tạo ra một công cụ giải mã có sẵn công khai.


1
Đầu đọc có thể bị ảnh hưởng bởi các miền từ tính liền kề cũng như quá trình chuyển đổi hiện tại dưới đầu đọc, có xu hướng đẩy các chuyển đổi đọc qua lại theo thời gian, tùy thuộc vào mẫu bit xung quanh.
hotpaw2

lưu ý rằng kỹ thuật này không đáng tin cậy Mặc dù nó mang lại kết quả tuyệt vời cho hầu hết các bản nhạc, nhưng nó không tạo ra một vết sưng duy nhất cho mỗi lần chuyển đổi từ thông sớm. tức là nó tạo ra một vết sưng kép. Tôi đoán bởi vì dạng sóng đầu vào không phải là hình sin phù hợp tại thời điểm này. Vì vậy, tôi vẫn đang tìm kiếm các kỹ thuật.
P i

Chỉ tò mò, bạn đã tìm thấy định nghĩa nào khác về "tín hiệu phân tích" hoặc "biến đổi Hilbert"? Nếu bạn đang tìm đường bao của tín hiệu, bạn có thể thấy điều đó bằng cách trước tiên chuyển đổi nó thành tín hiệu phân tích (phức tạp). Có một số cách để làm điều này, nhưng những gì bạn đã chỉ ra thường không được sử dụng.
Jason R

@JR một số nguồn dường như xác định tín hiệu phân tích là độ dịch pha 90 ° tức là Quad (f (x)). những người khác như f (x) + i.Quad (f (x)). Tôi nghĩ rằng tôi đã thấy biến đổi Hilbert được định nghĩa là cả hai cũng. Không hoàn toàn chắc chắn, vì vậy tôi đã bị mắc kẹt với một ký hiệu không rõ ràng. Tôi quan tâm đến các kỹ thuật khác để lấy đường bao của tín hiệu; dsp.stackexchange.com/questions/424/ Có vẻ là nơi thích hợp để theo đuổi chủ đề này.
P i
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.